Re-add TinyMCE 2.0.1 to the site settings list - TinyMCE directoy names changed - installer submission settings layout dirty fix
Re-add TinyMCE 2.0.1 to the site settings list - TinyMCE directoy names changed - installer submission settings layout dirty fix

--- a/admin/settings.php
+++ b/admin/settings.php
@@ -233,7 +233,7 @@
 
 	}
 	else if($sect == "sitesettings") {
-		$tinyMCE = ($_POST['newtinyMCE'] == 1  OR $_POST['newtinyMCE'] == 2) ? $_POST['newtinyMCE'] : 0;
+		$tinyMCE = ($_POST['newtinyMCE'] == 1  OR $_POST['newtinyMCE'] == 2 OR $_POST['newtinyMCE'] == 3) ? $_POST['newtinyMCE'] : 0;
 		$allowed_tags = $_POST['newallowed_tags'];
 		$favorites = $_POST['newfavorites'] == 1 ? 1 : 0;
 		$multiplecats = $_POST['newmultiplecats'] == 1 ? 1 : 0;
@@ -396,8 +396,8 @@
 			</tr>
 			<tr>
 				<td colspan='2'><fieldset style='margin: 0 auto;'><legend>"._IMAGESIZE." <a href='#' class='pophelp'>[?]<span>"._HELP_IMAGESIZE."</span></a></legend>
-				<label for='newimageheight'>"._MAXHEIGHT.":</label> <span style='padding-left: 24.3%;'> <input  type='text' class='textbox=' name='newimageheight' value='$imageheight' size='5'> <br />
-				<label for='newimagewidth'>"._MAXWIDTH.":</label> <span style='padding-left: 25.3%;'> <input  type='text' class='textbox=' name='newimagewidth' value='$imagewidth' size='5'></fieldset></td>
+				<label for='newimageheight'>"._MAXHEIGHT.":</label> <span style='padding-left: 19.3%;'> <input  type='text' class='textbox=' name='newimageheight' value='$imageheight' size='5'> <br />
+				<label for='newimagewidth'>"._MAXWIDTH.":</label> <span style='padding-left: 20.3%;'> <input  type='text' class='textbox=' name='newimagewidth' value='$imagewidth' size='5'></fieldset></td>
 			</tr>
 			<tr>
 				<td><label for='newstore'>"._HOWSTORE.":</label></td><td><select name='newstore' onChange='if (this.disabled) this.selectedIndex=0' disabled>
@@ -410,16 +410,17 @@
 			</tr>
 			<tr>
 				<td colspan='2'><fieldset style='margin: 0 auto;'><legend>"._MAXMINWORDS."<a href='#' class='pophelp'>[?]<span>"._HELP_MINMAXWORDS."</span></a></legend>
-				<label for='newminwords'>"._MIN.":</label> <span style='padding-left: 38.44%;'> <input  type='text' class='textbox=' name='newminwords' value='$minwords' size='5'> <br />
-				<label for='newmaxwords'>"._MAX.":</label> <span style='padding-left: 37.7%;'> <input  type='text' class='textbox=' name='newmaxwords' value='$maxwords' size='7'></fieldset></td></tr>";
+				<label for='newminwords'>"._MIN.":</label> <span style='padding-left: 33.44%;'> <input  type='text' class='textbox=' name='newminwords' value='$minwords' size='5'> <br />
+				<label for='newmaxwords'>"._MAX.":</label> <span style='padding-left: 32.7%;'> <input  type='text' class='textbox=' name='newmaxwords' value='$maxwords' size='7'></fieldset></td></tr>";
 	}
 	else if($sect == "sitesettings") {
 		$output .= "<div class='sectionheader'>"._SITESETTINGS."</div>
 		<table class='acp' style='margin: 0 auto;'>
 			<tr>
 				<td><label for='newtinyMCE'>"._USETINYMCE. ": </label></td><td><select name='newtinyMCE'>
-				<option value=\"2\"" . ($tinyMCE == 2 ? " selected" : "") . ">TinyMce4</option>
-				<option value=\"1\"" . ($tinyMCE == 1 ? " selected" : "") . ">TinyMce3</option>
+				<option value=\"3\"" . ($tinyMCE == 3 ? " selected" : "") . ">TinyMce4</option>
+				<option value=\"2\"" . ($tinyMCE == 2 ? " selected" : "") . ">TinyMce3</option>
+				<option value=\"1\"" . ($tinyMCE == 1 ? " selected" : "") . ">TinyMce2</option>
 				<option value=\"0\"" . (!$tinyMCE ? " selected" : "") . ">" . _NO . "</option>
 				</select> <a href='#' class='pophelp'>[?]<span>"._HELP_TINYMCE." "._TINYMCENOTE."</span></a></td>
 			</tr>

file:a/header.php -> file:b/header.php
--- a/header.php
+++ b/header.php
@@ -259,9 +259,13 @@
 {
 	if (!empty($tinyMCE))
 	{
-		if($tinyMCE == 1) {
-			echo "<script src=\"" . _BASEDIR . "tinymce/jscripts/tiny_mce/tiny_mce.js\"></script>";
-			include(_BASEDIR . "tinymce/init.php");
+		if($tinyMCE == 2) {
+			echo "<script src=\"" . _BASEDIR . "tinymce3/jscripts/tiny_mce/tiny_mce.js\"></script>";
+			include(_BASEDIR . "tinymce2/init.php");
+		}
+		else if($tinyMCE == 1) {
+			echo "<script src=\"" . _BASEDIR . "tinymce2/jscripts/tiny_mce/tiny_mce.js\"></script>";
+			include(_BASEDIR . "tinymce3/init.php");
 		}
 		else {
 			echo "<script src=\"" . _BASEDIR . "tinymce4/js/tinymce/tinymce.min.js\"></script>";

file:a/tinymce/changelog.txt (deleted)
--- a/tinymce/changelog.txt
+++ /dev/null
@@ -1,1484 +1,1 @@
-Version 3.4.8 (2012-02-02)
-	Fixed bug in IE where selected text ending with space cannot be formatted then formatted again to get original text.
-	Fixed bug in IE where images larger than editor area were being deselected when toolbar buttons are clicked.
-	Fixed bug where wrong text align buttons are active when multiple block elements are selected.
-	Fixed bug where selected link not showing in target field of link dialog in some selection cases.
-	Use settings for remove_trailing_br so this can be turned off instead of hard coding the value.
-	Fixed bug in IE where the media plugin displayed null text when some values aren't filled in.
-	Added API method 'onSetAttrib' that fires when the attribute value on a node changes.
-	Fix font size dropdown value not being updated when text already has a font size in the advanced template.
-	Fixed bug in IE where IE doesn't use ARIA attributes properly on options - causing labels to be read out 2 times.
-	Fixed bug where caret cannot be placed after table if table is at end of document in IE.
-	Fixed bug where adding range isn't always successful so we need to check range count otherwise an exception can occur.
-	Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly.
-	Fixed bug where a stranded bullet point would get created in WebKit.
-	Fixed bug where selecting text in a blockquote and pressing backspace toggles the style.
-	Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property. 
-	Fix white space in between spans from being deleted. 
-	Fixed bug where scrollbars where visible in the character map dialog on Gecko.
-	Fixed issue with missing translation for one of the emoticons.
-	Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev.
-	Fixed bug where urls with an at sign in the path wouldn't be parsed correctly. Patch contributed by Jason Grout.
-	Fixed bug where Opera would remove the first character of a inline formatted word if you pressed backspace.
-	Fixed bugs with the autoresize plugin on various browsers and removed the need for the throbber.
-	Fixed performance issue where the contextmenu plugin would try to remove the menu even if it was removed. Patch contributed by mhu.
-Version 3.4.7 (2011-11-03)
-	Modified the caret formatting behavior to word similar to common desktop wordprocessors like Word or Libre Office.
-	Fixed bug in Webkit - Cursor positioning does not work vertically within a table cell with multiple lines of text.
-	Fixed bug in IE where Inserting a table in IE8 places cursor in the second cell of the first row.
-	Fixed bug in IE where editor in a frame doesn't give focus to the toolbar using ALT-F10.
-	Fix for webkit and gecko so that deleting bullet from start of list outdents inner list items and moves first item into paragraph.
-	Fix new list items in IE8 not displayed on a new line when list contains nested list items.
-	Clear formatting in table cell breaks the cell.
-	Made media type list localisable.
-	Fix out of memory error when using prototype in media dialog.
-	Fixed bug where could not add a space in the middle of a th cell.
-	Fixed bug where adding a bullet between two existing bullets adds an extra one
-	Fixed bug where trying to insert a new entry midway through a bulleted list fails dismally when the next entry is tabbed in.
-	Fixed bug where pressing enter on an empty list item does not outdent properly in FF
-	Fixed bug where adding a heading after a list item in a table cell changes all styles in that cell
-	Fixed bug where hitting enter to exit from a bullet list moves cursor to the top of the page in Firefox.
-	Fixed bug where pressing backspace would not delete HRs in Firefox and IE when next to an empty paragraph.
-	Fixed bug where deleting part of the link text can cause a link with no destination to be saved.
-	Fixed bug where css style border widths wasn't handled correctly in table dialog.
-	Fixed bug where parsing invalid html contents on IE or WebKit could produce an infinite loop.
-	Fixed bug where scripts with custom script types wasn't properly passed though the editor.
-	Fixed issue where some Japanese kanji characters wasn't properly entity encoded when numeric entity mode was enabled.
-	Made emoticons dialog use the keyboard naviation.
-	Added navigation instructions to the symbols dialog.
-	Added ability to set default values for the media plugin.
-	Added new font_size_legacy_values option for converting old font element sizes to span with font-size properties.
-	Fixed bug where the symbols dialog was not accessible.
-	Added quirk for IE ensuring that the body of the document containing tinyMCE has a role="application" for accessibility.
-	Fixed bug where the advanced color picker wasn't working properly on FF 7.
-	Fixed issue where the advanced color picker was producing uppercase hex codes.
-	Fixed bug where IE 8 could throw exceptions if the contents contained resizable content elements.
-	Fixed bug where caret formatting wouldn't be correctly applied to previous sibling on WebKit.
-	Fixed bug where the select boxes for font size/family would loose it's value on WebKit due to recent iOS fixes.
-Version 3.4.6 (2011-09-29)
-	Fixed bug where list items were being created for empty divs.
-	Added support in Media plugin for audio media using the embed tag
-	Fixed accessibility bugs in WebKit and IE8 where toolbar items were not being read.
-	Added new use_accessible_selects option to ensure accessible list boxes are used in all browsers (custom widget in firefox native on other browsers)
-	Fixed bug where classid attribute was not being checked from embed objects.
-	Fixed bug in jsrobot tests with intermittently failing.
-	Fixed bug where anchors wasn't updated properly if you edited them using IE 8.
-	Fixed bug where input method on WebKit on Mac OS X would fail to initialize when sometimes focusing the editor.
-	Fixed bug where it wasn't possible to select HR elements on WebKit by simply clicking on them.
-	Fixed bug where the media plugin wouldn't work on IE9 when not using the inlinepopups plugin.
-	Fixed bug where hspace,vspace,align and bgcolor would be removed from object elements in the media plugin.
-	Fixed bug where the new youtube format wouldn't be properly parsed by the media plugin.
-	Fixed bug where the style attribute of layers wasn't properly updated on IE and Gecko.
-	Fixed bug where editing contents in a layer would fail on Gecko since contentEditable doesn't inherit properly.
-	Fixed bug where IE 6/7 would produce JS errors when serializing contents containing layers.
-Version 3.4.5 (2011-09-06)
-	Fixed accessibility bug in WebKit where the right and left arrow keys would update native list boxes.
-	Added new whitespace_elements option to enable users to specify specific elements where the whitespace is preserved.
-	Added new merge_siblings option to formats. This option makes it possible to disable the auto merging of siblings when applying formats.
-	Fixed bug in IE where trailing comma in paste plugin would cause plugin to not run correctly.
-	Fixed bug in WebKit where console messages would be logged when deleting an empty document.
-	Fixed bug in IE8 where caret positioned is on list item instead of paragraph when outdent splits the list
-	Fixed bug with image dialogs not inserting an image if id was omitted from valid_elements.
-	Fixed bug where the selection normalization logic wouldn't properly handle image elements in specific config cases.
-	Fixed bug where the map elements coords attribute would be messed up by IE when serializing the DOM.
-	Fixed bug where IE wouldn't properly handle custom elements when the contents was serialized.
-	Fixed bug where you couldn't move the caret in Gecko if you focused the editor using the API or a UI control.
-	Fixed bug where adjacent links would get merged on IE due to bugs in their link command.
-	Fixed bug where the color split buttons would loose the selection on IE if the editor was placed in a frame/iframe.
-	Fixed bug where floated images in WebKit wouldn't get properly linked.
-	Fixed bug where the fullscreen mode in a separate window wasn't forced into IE9+ standards mode.
-	Fixed bug where pressing enter in an empty editor on WebKit could produce DIV elements instead of P.
-	Fixed bug where spans would get removed incorrectly when merging two blocks on backspace/delete on WebKit.
-	Fixed bug where the editor contents wouldn't be completely removed on backspace/delete on WebKit.
-	Fixed bug where the fullpage plugin wouldn't properly render style elements in the head on IE 6/7.
-	Fixed bug where the nonbreaking_force_tab option in the nonbreaking plugin wouldn't work on Gecko/WebKit.
-	Fixed bug where the isDirty state would become true on non IE browsers if there was an table at the end of the contents.
-	Fixed bug where entities wasn't properly encoded on WebKit when pasting text as plain text.
-	Fixed bug where empty editors would produce an exception of valid_elements didn't include body and forced_root_blocks where disabled.
-	Fixed bug where the fullscreen mode wouldn't retain the header/footer in the fullpage plugin.
-	Fixed issue where the plaintext_mode and plaintext_mode_sticky language keys where swapped.
-Version 3.4.4 (2011-08-04)
-	Added new html5 audio support. Patch contributed by Ronald M. Clifford.
-	Added mute option for video elements and preload options for video/audio patch contributed by Dmitry Kalinkin.
-	Fixed selection to match visual selection before applying formatting changes.
-	Fixed browser specific bugs in lists for WebKit and IE.
-	Fixed bug where IE would scroll the window if you closed an inline dialog that was larger than the viewport. Patch by Laurence Keijmel.
-	Fixed bug where pasting contents near a span element could remove parts of that span. Patch contributed by Wesley Walser.
-	Fixed bug where formatting change would be lost after pressing enter.
-	Fixed bug in WebKit where deleting across blocks would add extra styles.
-	Fixed bug where moving cursor vertically in tables in WebKit wasn't working.
-	Fixed bug in IE where deleting would cause error in console.
-	Fixed bug where the formatter was not applying formats across list elements.
-	Fixed bug where the wordcount plugin would try and update the wordcount if tinymce had been destroyed.
-	Fixed bug where tabfocus plugin would attempt to focus elements not displayed when their parent element was hidden.
-	Fixed bug where the contentEditable state would sometimes be removed if you deleted contents in Gecko.
-	Fixed bug where inserting contents using mceInsertContent would fail if "span" was disabled in valid_elements.
-	Fixed bug where initialization might fail if some resource on gecko wouldn't load properly and fire the onload event.
-	Fixed bug where ctrl+7/8/9 keys wouldn't properly add the specific formats associated with them.
-	Fixed bug where the HTML tags wasn't properly closed in the style plugins properties dialog.
-	Fixed bug where the list plugin would produce an exception if the user tried to delete an element at the very first location.
-Version 3.4.3.2 (2011-06-30)
-	Fixed bug where deleting all of a paragraph inside a table cell would behave badly in webkit.
-	Fixed bugs in tests in firefox5 and WebKit.
-	Fixed bug where selection of table cells would produce an exception on Gecko.
-	Fixed bug where the caret wasn't properly rendered on Gecko when the editor was hidden.
-	Fixed bug where pasting plain text into WebKit would produce a pre element it will now produce more semantic markup.
-	Fixed bug where selecting list type formats using the advlist plugin on IE8 would loose editor selection.
-	Fixed bug where forced root blocks logic wouldn't properly pad elements created if they contained data attributes.
-	Fixed bug where it would remove all contents of the editor if you inserted an image when not having a caret in the document.
-	Fixed bug where the YUI compressor wouldn't properly encode strings with only a quote in them.
-	Fixed bug where WebKit on iOS5 wouldn't call nodeChanged when the selection was changed.
-	Fixed bug where mceFocus command wouldn't work properly on Gecko since it didn't focus the body element.
-	Fixed performance issue with the noneditable plugin where it would enable/disable controls to often.
-Version 3.4.3.1 (2011-06-16)
-	Fixed bug where listboxes were not being handled correctly by JAWS in firefox with the o2k7 skin.
-	Fixed bug where custom buttons were not being rendered correctly when in high contrast mode.
-	Added support for iOS 5 that now supporting contentEditable in it's latest beta.
-	Fixed bug where urls in style attributes with a _ character followed by a number would cause incorrect output.
-	Fixed bug where custom_elements option wasn't working properly on IE browsers.
-	Fixed bug where custom_elements marked as block elements wouldn't get correctly treated as block elements.
-	Fixed bug where attributes with </> wasn't properly encoded as XML entities.
-Version 3.4.3 (2011-06-09)
-	Fixed bug where deleting backwards before an image into a list would put the cursor in the wrong location.
-	Fixed bug where styles plugin would not apply styles across multiple selected block elements correctly.
-	Fixed bug where cursor would jump to start of document when selection contained empty table cells in IE8.
-	Fixed bug where applied styles wouldn't be kept if you pressed enter twice to produce two paragraphs.
-	Fixed bug where a ghost like caret would appear on Gecko when pressing enter while having a text color applied.
-	Fixed bug where IE would produce absolute urls if you inserted a image/link and reloaded the page.
-	Fixed bug where applying a heading style to a list item would cascade style to children list items.
-	Fixed bug where Editor loses focus when backspacing and changing styles in WebKit.
-	Fixed bug where exception was thrown in tinymce.util.URI when parsing a relative URI and no base_uri setting was provided.
-	Fixed bug where alt-f10 was not always giving focus to the toolbar on Safari.
-	Added new 'allow_html_in_named_anchor' option to allow html to occur within a named anchor tag.  Use at own risk.
-	Added plugin dependency support.  Will autoload plugins specified as a dependency if they haven't been loaded.
-	Fixed bug where the autolink plugin didn't work with non-English keyboards when pressing ).
-	Added possibility to change properties of all table cells in a column.
-	Added external_image_list option to get images list from user-defined variable or function.
-	Fixed bug where the autoresize plugin wouldn't reduce the editors height on Chrome.
-	Fixed bug where table size inputs were to small for values with size units.
-	Fixed bug where table cell/row size input values were not validated.
-	Fixed bug where menu item line-height would be set to wrong value by external styles.
-	Fixed bug where hasUndo() would return wrong answer.
-	Fixed bug where page title would be set to undefined by fullpage plugin.
-	Fixed bug where HTML5 video properties were not updated in embedded media settings.
-	Fixed bug where HTML comment on the first line would cause an error.
-	Fixed bug where spellchecker menu was positioned incorrectly on IE.
-	Fixed bug where breaking out of list elements on WebKit would produce a DIV instead of P after the list.
-	Fixed bug where pasting from Word in IE9 would add extra BR elements when text was word wrapped.
-	Fixed bug where numeric entities with leading zeros would produce incorrect decoding.
-	Fixed bug where hexadecimal entities wasn't properly decoded.
-	Fixed bug where bookmarks wasn't properly stored/restored on undo/redo.
-	Fixed bug where the mceInsertCommand didn't retain the values of links if they contained non url contents.
-	Fixed bug where the valid_styles option wouldn't be properly used on styles for specific elements.
-	Fixed so contentEditable is used for the body of the editor if it's supported.
-	Fixed so trailing BR elements gets removed even when forced_root_blocks option was set to false/null.
-	Fixed performance issue with mceInsertCommand and inserting very simple contents.
-	Fixed performance issue with older IE version and huge documents by optimizing the forced root blocks logic.
-	Fixed performance issue with table plugin where it checked for selected cells to often.
-	Fixed bug where creating a link on centered/floated image would produce an error on WebKit browsers.
-	Fixed bug where Gecko would remove single paragraphs if there where contents before/after it.
-	Fixed bug where the scrollbar would move up/down when pasting contents using the paste plugin.
-Version 3.4.2 (2011-04-07)
-	Added new 'paste_text_sticky_default' option to paste plugin, enables you to set the default state for paste as plain text.
-	Added new autoresize_bottom_margin option to autoresize plugin that enables you to add an extra margin at the bottom. Patch contributed by Andrew Ozz.
-	Rewritten the fullpage plugin to handle style contents better and have a more normalized behavior across browsers.
-	Fixed bug where contents inserted with mceInsertContent wasn't parsed using the default dom parser.
-	Fixed bug where blocks containing a single anchor element would be treated as empty.
-	Fixed bug where merging of table cells on IE 6, 7 wouldn't look correctly until the contents was refreshed.
-	Fixed bug where context menu wouldn't work properly on Safari since it was passing out the ctrl key as pressed.
-	Fixed bug where image border color/style values were overwritten by advimage plugin.
-	Fixed bug where setting border in advimage plugin would throw error in IE.
-	Fixed bug where empty anchors list in link settings wasn't hidden.
-	Fixed bug where xhtmlextras popups were missing localized popup-size parameters.
-	Fixed bug where the context menu wouldn't select images on WebKit browsers.
-	Fixed bug where paste plugin wouldn't properly extract the contents on WebKit due to recent changes in browser behavior.
-	Fixed bug where focus of the editor would get on control contents on IE lost due to a bug in the ColorSplitButton control.
-	Fixed bug where contextmenu wasn't disabled on noneditable elements.
-	Fixed bug where getStyle function would trigger error when called on element without style property.
-	Fixed bug where editor fail to load if Javascript Compressor was used.
-	Fixed bug where list-style-type=lower-greek would produce errors in IE<8.
-	Fixed bug where spellchecker plugin would produce errors on IE6-7.
-	Fixed bug where theme_advanced_containers configuration option causes error.
-	Fixed bug where the mceReplaceContent command would produce an error since it didn't correctly handle a return value.
-	Fixed bug where you couldn't enter float point values for em in dialog input fields since it wouldn't be considered a valid size.
-	Fixed bug in xhtmlxtras plugin where it wasn't possible to remove some attributes in the attributes dialog.
-Version 3.4.1 (2011-03-24)
-	Added significantly improved list handling via the new 'lists' plugin.
-	Added 'autolink' plugin to enable automatically linking URLs. Similar to the behavior IE has by default.
-	Added 'theme_advanced_show_current_color' setting to enable the forecolor and backcolor buttons to continuously show the current text color.
-	Added 'contextmenu_never_use_native' setting to disable the ctrl-right-click showing the native browser context menu behaviour.
-	Added 'paste_enable_default_filters' setting to enable the default paste filters to be disabled.
-	Fixed bug where selection locations on undo/redo didn't work correctly on specific contents.
-	Fixed bug where an exception would be trown on IE when loading TinyMCE inside an iframe.
-	Fixed bug where some ascii numeric entities wasn't properly decoded.
-	Fixed bug where some non western language codes wasn't properly decoded/encoded.
-	Fixed bug where undo levels wasn't created when deleting contents on IE.
-	Fixed bug where the initial undo levels bookmark wasn't updated correctly.
-	Fixed bug where search/replace wouldn't be scoped to editor instances on IE8.
-	Fixed bug where IE9 would produce two br elements after block elements when pasting.
-	Fixed bug where IE would place the caret at an incorrect position after a paste operation.
-	Fixed bug where a paste operation using the keyboard would add an extra undo level.
-	Fixed bug where some attributes/elements wasn't correctly filtered when invalid contents was inserted.
-	Fixed bug where the table plugin couldn't correctly handle invalid table structures.
-	Fixed bug where charset and title of the page were handled incorrectly by the fullpage plugin.
-	Fixed bug where toggle states on some of the list boxes didn't update correctly.
-	Fixed bug where sub/sub wouldn't work correctly when done as a caret action in Chrome 10.
-	Fixed bug where the constrain proportions checkbox wouldn't work in the media plugin.
-	Fixed bug where block elements containing trailing br elements wouldn't treated properly if they where invalid.
-	Fixed bug where the color picker dialog wouldn't be rendered correctly when using the o2k7 theme.
-	Fixed bug where setting border=0 using advimage plugin invalid style attribute content was created in Chrome.
-	Fixed bug with references to non-existing images in css of fullpage plugin.
-	Fixed bug where item could be unselected in spellchecker's language selector.
-	Fixed bug where some mispelled words could be not highlighted using spellchecker plugin.
-	Fixed bug where spellchecking would merge some words on IE.
-	Fixed bug where spellchecker context menu was not always positioned correctly.
-	Fixed bug with empty anchors list in advlink popup when Invisible Elements feature was disabled.
-	Fixed bug where older IE versions wouldn't properly handle some elements if they where placed at the top of editor contents.
-	Fixed bug where selecting the whole table would enable table tools for cells and rows.
-	Fixed bug where it wasn't possible to replace selected contents on IE when pasting using the paste plugin.
-	Fixed bug where setting text color in fullpage plugin doesn't work.
-	Fixed bug where the state of checkboxes in media plugin wouldn't be set correctly.
-	Fixed bug where black spade suit character was not included in special character selector.
-	Fixed bug where setting invalid values for table cell size would throw an error in IE.
-	Fixed bug where spellchecking would remove whitespace characters from PRE block in IE.
-	Fixed bug where HR was inserted inside P elements instead of splitting them.
-	Fixed bug where extra, empty span tags were added when using a format with both selector and inline modes.
-	Fixed bug where bullet lists weren't always detected correctly.
-	Fixed bug where deleting some paragraphs on IE would cause an exception.
-	Fixed bug where the json encoder logic wouldn't properly encode \ characters.
-	Fixed bug where the onChange event would be fired when the editor was first initialized.
-	Fixed bug where mceSelected wouldn't be removed properly from output even if it's an internal class.
-	Fixed issue with table background colors not being transparent. This improves compliance with users browser color preferences.
-	Fixed issue where styles were not included when using the full page plugin.
-	Fixed issue where drag/drop operations wasn't properly added to the undo levels.
-	Fixed issue where colors wasn't correctly applied to elements with underline decoration.
-	Fixed issue where deleting some paragraphs on IE would cause an exception.
-Version 3.4 (2011-03-10)
-	Added accessibility example with various accessibility options contributed by Ephox.
-	Fixed bug where attributes wasn't properly handled in the xhtmlxtras plugin.
-	Fixed bug where the image.htm had some strange td artifacts probably due to auto merging.
-	Fixed bug where the ToolbarGroup had an missing reference to this in it's destroy method.
-	Fixed bug with the resizeBy function in the advanced theme where it was scaled by the wrong parent.
-	Fixed bug where an exception would be thrown by the element if the page was served in xhtml mode.
-	Fixed bug where mceInsertContent would throw an exception when page was served in xhtml mode.
-	Fixed bug where you couldn't select a forground/background color when page was served in xhtml mode.
-	Fixed bug where the editor would scroll to the toolbar when clicked due to a call to focus in ListBox.
-	Fixed bug where pages with rtl dir wouldn't render split buttons correctly when using the o2k7 theme.
-	Fixed bug where anchor elements with names wasn't properly collapsed as they where in 3.3.x.
-	Fixed bug where WebKit wouldn't properly handle image selection if it was done left to right.
-	Fixed bug where the formatter would align images when the selection range was collapsed.
-	Fixed bug where the image button would be active when the selection range was collapsed.
-	Fixed bug where the element_format option wasn't used by the new (X)HTML serializer logic.
-	Fixed bug where the table cell/row dialogs would produce empty attributes.
-	Fixed bug where the tfoot wouldn't be added to the top of the table.
-	Fixed bug where the formatter would merge siblings with white space between them.
-	Fixed bug where pasting headers and paragraphs would produce an extra paragraph.
-	Fixed bug where the ColorSplitButton would throw an exception if you clicked out side a color.
-	Fixed bug where IE9 wouldn't properly produce new paragraphs on enter if the current paragraph had formatting.
-	Fixed bug where multiple BR elements at end of block elements where removed.
-	Fixed bug where fullscreen plugin wouldn't correctly display the edit area on IE6 for long pages.
-	Fixed bug where paste plugin wouldn't properly encode raw entities when pasting in plain text mode.
-	Fixed bug where the search/replace plugin wouldn't work correctly on IE 9.
-	Fixed so the drop menus doesn't get an outline border visible when focused, patch contributed by Ephox.
-	Fixed so the values entered in the color picker are forced to hex values.
-	Removed dialog workaround for IE 9 beta since the RC is now out and people should upgrade.
-	Removed obsolete calls in various plugins to the mceBeginUndoLevel command.
-Version 3.4b3 (2011-02-10)
-	Added WAI-ARIA support for the main UI and dialogs this feature was contributed by Ephox.
-	Added iframe support to media plugin in order to handle the new YouTube HTML5 video formats.
-	Fixed bug where anchors would wrap the text contents after it due to a bug in the DomParser logic.
-	Fixed bug where the selected state wouldn't be removed on ListBox controls when a menu item was selected.
-	Fixed bug where IE could throw an unspecified error exception when the getBookmark logic was executed.
-	Fixed bug where IE would throw an invalid argument error when focus was applied to an empty editor instance.
-	Fixed bug where applying inline format wouldn't work if the start cell in the selection was empty.
-	Fixed bug where auto detection logic for YouTube and Google Video wouldn't work in the new media plugin.
-	Fixed bug where td elements would get a colspan/rowspan of 1 when created by the table plugin.
-	Fixed bug where removal/padding of empty elements wasn't handled correctly.
-	Fixed bug where internal elements would show up in element path.
-	Fixed bug where internal elements would get serialized as valid output.
-	Fixed bug where color wasn't correctly applied to anchor elements.
-	Fixed bug where float option in the style plugin dialog wouldn't be handled correctly on WebKit.
-	Fixed bug where the tinymce.dom.TreeWalker prev function wouldn't walk the DOM correctly.
-	Fixed bug where mceInsertContent command could produce empty block elements after the inserted content.
-	Fixed bug where mceInsertContent command wouldn't apply visual aids on tables and similar elements.
-	Fixed bug where empty block elements would get double br bogus elements in them.
-	Fixed bug where the color menu wouldn't apply the color correctly on IE when the viewport was to small.
-	Fixed bug where right clicking out side the body element of the editor iframe would prevent paste from working on IE.
-	Fixed bug where the onContextMenu event wouldn't fire correctly on IE if you clicked out side the body element.
-	Fixed bug where the onContextMenu event wouldn't fire correctly on modern Opera versions that now support it by default.
-	Fixed bug where legacy content wasn't converted correctly when inserted using mceInsertContent or through the source dialog.
-	Fixed bug where resizing images or tables wouldn't update the style attribute correctly or leave data-mce prefixed attributes.
-	Fixed bug where adding links wouldn't work correctly when using TinyMCE jQuery version with jQuery 1.5.
-	Fixed bug where single quotes inside param elements wasn't treated correctly by the media plugin.
-	Fixed bug where pasting plain text in WebKit wouldn't work correctly. It will now auto detect the WebKit bug and use plain text mode.
-	Fixed bug where the DomParser would fail to move out invalid elements within invalid elements on complex contents.
-	Fixed bug where paste as plain text would not decode html entities properly.
-	Fixed bug where large paragraphs would cause incorrect scrolling behavior if you would split them using enter.
-	Fixed bug where the SaxParser wouldn't properly parse some specific short ended elements.
-	Fixed so mceReplaceContent supports caret position and makes sure that the contents inserted gets validated.
-	Fixed so unnecessary traling br elements in blocks gets removed on Gecko/WebKit when using mceInsertContent command.
-	Moved some plugin css contents into the skin content css files to reduce the number of http requests.
-	Moved some plugin specific images into the theme img directory since they can then be shared.
-Version 3.4b2 (2011-01-13)
-	Added new custom flash player, this player supports mp4 and flv and has skin support.
-	Fixed so mceInsertContent handles context correctly to enforce valid nesting of elements.
-	Fixed bug where scrolling would become jerky on IE on some contents.
-	Fixed bug where paste as plain text would throw exception of missing entities setting.
-	Fixed bug where anchor nodes where removed by the new serializer engine.
-	Fixed bug where IE would crash if when backspace where used on some specific contents.
-	Fixed bug where pasting of plain text in WebKit would result in merging of text lines.
-	Fixed bug where it wasn't possible to delete images or tables using backspace on IE9.
-	Fixed bug where urls in styles would generate a JS error due to incorrect scope.
-	Fixed bug where copy paste from Java applications would produce extra contents in FF on Mac.
-	Fixed bug where the verify_html option wouldn't allow all elements and attributes.
-Version 3.4b1 (2010-12-20)
-	Added new serialization engine that increases performance and enforces valid output according to the specified schema settings.
-	Added new HTML parser logic used by the serialization engine and can handle malformed html contents.
-	Added new valid_children config option, enables more fine grain control of elements can be inside other elements.
-	Added new entities encoding logic boost performance and will only encode entities based on context i.e. attributes/text nodes.
-	Added new protect setting that enables users to protect template items from being removed by the serializer logic.
-	Added new {$caret} marker for the mceInsertContent command. Makes it possible to move the caret to a specific position when inserting contents.
-	Added new validation of anchor names. Only valid W3C names will be accepted.
-	Replaced the internal _mce_ prefixed attributes to the more standard HTML5 data-mce- prefix. This will also resolve future browser santiaztion issues.
-	Fixed bug where the paste plugin wouldn't convert Word lists with more than 9 items to real ol lists. Patch contributed by Mike (yogaboy).
-	Fixed bug where clicking on a format title would produce errors if the current selection didn't have any formats.
-	Fixed bug where paste of simple texts wouldn't work correctly in Gecko using the paste plugin since it keeps block formatting.
-	Fixed bug where confirm dialogs didn't display correctly due to resent IE9 fixes.
-	Fixed bug where spaces in URLs wouldn't be properly encoded to %20 if the user entered them in the link dialogs. Patch contributed by Ephox.
-	Fixed bug where the image alignment buttons wouldn't reposition the resize handles on FF due to a browser issue. Patch contributed by Ephox.
-	Fixed bug where the compareBoundaryPoints method of the IE Range class didn't work correctly. Patch contributed by Ephox.
-	Fixed bug where selection of elements using double click wouldn't select the clicked element but rather the parent node on FF. Patch contributed by Ephox.
-	Fixed bug where IE would scroll the user to the current selection causing parent document to scroll as well. Patch contributed by Ephox.
-	Fixed bug where style compression would incorrectly compress items with different values. It now only compresses if the values are the same. Patch contributed by Ephox.
-	Fixed bug where FF would add non breaking spaces outside TD elements if formatting was applied to table cells. Patch contributed by Ephox.
-	Fixed bug where the caret position would be lost on WebKit browsers if you pasted images multiple times. Patch contributed by Ephox.
-	Fixed bug where non word contents like * would be counted as words in the wordcount pluging. Patch contributed by David Balatero.
-	Fixed bug where the toggle absolute button in the layer plugin wouldn't remove the existing internal style attribute first.
-	Fixed bug where the autosave plugin would generate an exception on IE if the user had disabled userdata persistence.
-	Fixed bug where the paste plugin would remove dashed classes on IE since the regexps didn't include that character.
-	Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
-	Fixed bug where applying block formats to empty elements wouldn't render correctly on IE.
-	Fixed bug where the searchreplace plugin would add a f or r character when shortcuts where used on IE while using default dialogs.
-	Fixed bug where Opera wouldn't load scripts correctly since the onreadystate would fire even though the script wasn't loaded.
-	Fixed issue where &nbsp; wouldn't be handled correctly in the bbcode plugin if entity_encoding was set to raw.
-	Fixed issue where contents would flicker since the content css files where asynchronously loaded.
-	Fixed bug where WebKit wouldn't create links on images with a float style.
-Version 3.3.9.3 (2010-12-20)
-	Fixed issue where WebKit wouldn't correctly apply ins/del in xhtmlxtras plugin.
-	Fixed bug where paste as plaintext on WebKit wouldn't produce br and p elements correctly.
-	Fixed bug where the confirm dialog texts would be incorrectly placed due to recent IE 9 workarounds in the window.css.
-	Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
-Version 3.3.9.2 (2010-09-29)
-	Fixed bug where placing the caret in IE 9 beta 1 would not work correctly if you clicked out side the document body element.
-	Fixed bug where IE 9 beta 1 wouldn't resize the editor correctly since the events didn't fire as previous versions did.
-	Fixed bug where FF would produce an error message when being rendered inside a hidden div element.
-	Fixed bug where resize logic could produce a cookie with a width/height less than the size of the container.
-	Fixed bug where content_css wouldn't populate the styles dropdown correctly.
-Version 3.3.9.1 (2010-09-23)
-	Fixed bug where WebKit browsers wouldn't activate the image button when images where selected.
-	Fixed bug where Opera Presto 10.60 deletes elements when restoring bookmarks.
-	Fixed bug where IE9 beta1 doesn't handle regexp replacement values correctly.
-	Fixed bug where IE9 beta1 didn't render the inline dialogs correctly due to a bug with CSS clip.
-	Fixed bug where IE9 beta1 would produce error messages on load since they removed the document.recalc method.
-	Fixed bug where IE9 beta1 would produce <html xmlns=""> since they haven't implemented document.implementation.createDocument correctly.
-	Fixed bug where IE9 beta1 would searchreplace doesn't work since their native DOM Range doesn't have a find method.
-	Fixed bug where IE9 beta1 would render the source view incorrectly due to incorrect viewport size measurements.
-	Fixed bug where IE9 beta1 would crash when running the basic functionality unit tests.
-	Fixed bug where IE9 beta1 would wrap elements in blocks correctly due to changes to the selection object.
-	Fixed bug where IE9 beta1 would fail to insert contents since they havn't implemented the createContextualFragment method in their DOM Range.
-	Fixed bug where IE9 beta1 would fail to handle image selection since they currently doesn't support control selections in their DOM Range.
-	Fixed bug where IE9 beta1 would fail to load scripts since they fire the onload event before the scripts are parsed and executed.
-Version 3.3.9 (2010-09-08)
-	Fixed bug where inserting table rows into a table with subtable would produce an incorrect column count.
-	Fixed bug where the selection of cells in a table with subtables could produce invalid selections.
-	Fixed bug where the table plugin would produce a script error if you tried to move the caret before a first child table.
-	Fixed bug where the keep_styles feature on IE would move the caret to an incorrect location at the end of list blocks.
-	Fixed so attributes from legacy elements such as font gets retained when they get converted to spans.
-	Fixed minor issue where the select boxes wouldn't be set the not set by default in the table dialog.
-Version 3.3.8 (2010-06-30)
-	On IE8+ and FireFox 3.5+, dragging an image now correctly adds an undo
-	event.
-	Fixed bug where WebKit would not move the caret to a correct position after a paste operation.
-	Fixed bug where WebKit would produce a div wrapper element when pasting some contents.
-	Fixed bug where the visual chars and nonbreaking plugin wouldn't show nbsp elements correctly.
-	Fixed bug where the format states would be enabled even after the format was removed.
-	Fixed bug where the delete key would move the caret to an incorrect position.
-	Fixed bug where it wasn't possible to toggle of the current font size/family/style by clicking the title item.
-	Fixed bug where the abbr element wouldn't get serialized correctly on IE6.
-	Fixed so that the examples checks if they are executed from the local file system since that might not work properly.
-Version 3.3.7 (2010-06-10)
-	Fixed bug where context menu would produce an error on IE if you right clicked twice and left clicked once.
-	Fixed bug where resizing of the window on WebKit browsers in fullscreen mode wouldn't position the statusbar correctly.
-	Fixed bug where IE would produce an error if the editor was empty and you where undoing to that initial level.
-	Fixed bug where setting the table background on gecko would produce \" entities inside the url style property.
-	Fixed bug where the button states wouldn't be updated correctly on IE if you placed the caret inside the new element.
-	Fixed bug where undo levels wasn't properly added after applying styles or font sizes.
-	Fixed bug where IE would throw an error if you used "select all" on empty elements and applied formatting to that.
-	Fixed bug where IE could select one extra character when you did a bookmark call on a caret location.
-	Fixed bug where IE could produce a script error on delete since it would sometimes produce an invalid DOM.
-	Fixed bug where IE would return the wrong start element if the whole element was selected.
-	Fixed bug where formatting states wasn't updated on IE if you pressed enter at the end of a block with formatting.
-	Fixed bug where submenus for the context menu wasn't removed correctly when the editor was destroyed.
-	Fixed bug where Gecko could select the wrong element after applying format to multiple elements.
-	Fixed bug where Gecko would delete parts of the previous element if the selection range was a element selection.
-	Fixed bug where Gecko would not merge paragraph elements correctly if they contained br elements.
-	Fixed bug where the cleanup button could produce span artifacts if you pressed it twice in a row.
-	Fixed bug where the fullpage plugin header/footer would be have it's header reseted to it's initial state on undo.
-	Fixed bug where an empty paragraph would be collapsed if you performed a cleanup while having the caret inside it.
-	Fixed a few memory leaks on IE especially with drop menus in listboxes and the spellchecker.
-	Fixed so formats applied to the current caret gets merged to reduce the number of output elements.
-	Added the latest version of Sizzle for the CSS selector logic to fix a compatibility issue with prototype.
-Version 3.3.6 (2010-05-20)
-	Fixed bug where a editor.focus call could produce errors on IE in very specific scenarios.
-	Fixed bug where Gecko would produce an error if you unformatted text inside an empty element.
-	Fixed bug where IE would produce an error if the caret was placed before a table and you used the align buttons.
-	Fixed bug where the font size drop down didn't display the a preview correctly.
-	Fixed bug where the paste plugin wouldn't include all contents some times on WebKit browsers.
-	Fixed bug where the plain text mode toggle wouldn't work properly on WebKit.
-	Fixed bug where the editors statusbar would become invisible when you resized the window in fullscreen mode.
-Version 3.3.5.1 (2010-05-07)
-	Fixed a critical bug with the fullscreen plugin. Produced error messages when the state was toggled on/off.
-Version 3.3.5 (2010-05-06)
-	Added new merge_with_parents option to formats, enables the control of removal of elements with similar parents.
-	Fixed so the default behavior for applying classes isn't a toggle state but the old behavior from before the 3.3 release.
-	Fixed bug where selecting contents using double click on Gecko would produce errors when using removing format.
-	Fixed bug where the IE DOM could get messed up when non valid contents was pasted into the editor.
-	Fixed bug where merging selected table cells using the context menu didn't work as expected.
-	Fixed bug where some nestled formatting would be applied incorrectly.
-	Fixed bug with enter in list items when using the force_br_newlines mode on WebKit patch contributed by Ryan Koopmans.
-	Fixed bug where undo/redo could produce js errors on some specific operations.
-	Fixed bug where the theme_advanced_font_sizes didn't work as before 3.3 when complex settings where used.
-	Fixed bug where the table plugin would copy cell/row id attributes when making new rows/cells.
-Version 3.3.4 (2010-04-27)
-	Fixed bug where fullscreen plugin would add two editor instances to EditorManager collection.
-	Fixed bug where it was difficult to enter text on non western languages such as Japanese on IE.
-	Fixed bug where removing contents from nodes could result in an exception when using undo/redo.
-	Fixed bug with selection of images inside layers or other resizable containers on IE.
-	Fixed so editors isn't initialized on iPhone/iPad devices since they don't have caret support.
-Version 3.3.3 (2010-04-19)
-	Added new script_loaded callback function setting for the jQuery plugin.
-	Added various fixes and new rpc methods for the spellchecker plugin. Patch contributed by Michael Peters.
-	Removed some unnecessary inline style information from some of the dialogs.
-	Fixed some issues with the chaining for the TinyMCE jQuery plugin.
-	Fixed so any extra arguments passed to patched jQuery functions gets passed through. Patch contributed by Lee Henson.
-	Fixed so spellchecking/contextmenu can be toggled on/off if the browser has native spellchecker support.
-	Fixed bug where some texts in the new paste plugin wasn't placed in language pack.
-	Fixed bug where IE would produce an incorrect information message when cutting.
-	Fixed bug where removing items using the xhtmlxtras plugin wouldn't work correctly.
-	Fixed bug where setting table background images would add extra quotes on Gecko.
-	Fixed bug where shortcut for bold/italic/underline wouldn't work properly on WebKit.
-	Fixed bug where IE would produce an error message if only contents was an image tag and bold was used.
-	Fixed bug where the caret would move if alignment was applied to empty block elements.
-	Fixed bug where some shortcut key commands wouldn't apply formatting correctly.
-Version 3.3.2 (2010-03-25)
-	Fixed bug where it was possible to scale the editor iframe smaller than the editor UI.
-	Fixed bug where some of the resizing option didn't work with the new live resize.
-	Fixed bug where the format listbox didn't show nestled formats correctly.
-	Fixed bug where the native listboxes didn't work correctly.
-	Fixed bug where font size selection in using the legacyoutput plugin would produce errors.
-	Fixed so block and blockquote formats remove their matching element regardless of it's attributes.
-Version 3.3.1 (2010-03-18)
-	Added new live resize feature, the editor contents is now visible while resizing.
-	Fixed bug where some valid_element patterns would produce an unknown property error.
-	Fixed bug where it wasn't possible to toggle off blockquotes.
-	Fixed bug where an undo level wasn't produced when applying formatting using the styles dropdown.
-	Fixed bug where IE 6/7 wouldn't perform caret formatting due to a focus/event bug in IE.
-	Fixed bug where undo/redo wasn't restoring the previous selection correctly.
-	Fixed bug where the caret would become invisible if you resized the editor in latest Gecko.
-	Fixed bug where the class attribute wasn't completely removed in IE 6/7 when the removeClass function was used.
-	Fixed so the matchNode method of the Formatter class returns the matched format rule.
-	Fixed so it's possible to apply formatting to both blocks and as inline elements.
-Version 3.3 (2010-03-10)
-	Fixed bug where backspace on a table on IE would produce an empty tbody and some JS exceptions.
-	Fixed bug where some redundant children wasn't removed properly when applying inline styles to them.
-	Fixed bug where Chrome would produce incorect dialog sizes if the inlinepopups plugin wasn't used.
-	Fixed bug where spans with different classes would get merged if they where siblings to each other.
-	Fixed bug where IE 8 would crash if you used the spellchecker.
-	Fixed bug where Input Method for non western languages didn't work correctly.
-	Fixed bug where the UI would render incorrectly in FF 3.6 on Mac due to a bug n their rendering engine.
-	Fixed bug where WebKit wouldn't scroll down correctly if Shift+Enter was used. Patch contributed by Thomas Andersen.
-Version 3.3rc1 (2010-02-23)
-	Fixed bug with new legacyoutput plugin not working correctly on it's own.
-	Fixed bug some performance issues with removing text formats.
-	Fixed bug where TinyMCE specific attributes wasn't removed properly by remove format.
-	Fixed bug where it wasn't possible to align images within inline elements.
-	Fixed bug where Ctrl+Delete/Backspace would produce an invalid argument exception on IE.
-	Fixed bug where the search/replace logic could produce an infinite loop on IE for reverse searches.
-	Fixed bug where cloning formats in cells didn't work properly on IE.
-	Fixed bug where IE6 would produce a horizontal scroll bar.
-	Fixed so remove jQuery method removes the TinyMCE instance as well as the specified textarea.
-	Fixed so selected rows and cells gets updated using the row/cell properties dialogs.
-Version 3.3b2 (2010-02-04)
-	Fixed bug where sometimes img elements would be removed by split method in DOMUtils.
-	Fixed bug where merging of span elements could occur on bookmark nodes.
-	Fixed bug where classes wasn't properly removed when removeformat was used on IE 6.
-	Fixed bug where multiple calls to an tinyMCE.init with mode set to exact could produce the same unique ID.
-	Fixed bug with the IE selection implementation when it was feeded an document range.
-	Fixed bug where block elements formatting wasn't properly removed by removeformat on all browsers.
-	Fixed bug where selection location was lost if you performed a manual cleanup.
-	Fixed bug where removeformat wouldn't remove span elements within styled block elements.
-	Fixed bug where an error would be thrown if you clicked on the separator lines in menus.
-	Fixed bug with the jQuery plugin adding always adding a querystring value to other resources.
-	Fixed bug where IE would produce an error message if you had an empty editor instance.
-	Fixed bug where Shift+Enter didn't produce br elements on WebKit browsers.
-	Fixed bug where a temporary marker element wasn't removed by the paste plugin.
-	Fixed bug where inserting a table would produce two undo levels instead of one.
-Version 3.3b1 (2010-01-25)
-	Added new text formatting engine. Fixes a lot of browser quirks and adds new possibilities.
-	Added new advlist plugin that enables you to set the formats of list elements.
-	Added new paste plugin logic that enables you to retain style information from Office.
-	Added new autosave plugin logic that automatically saves contents in local storage.
-	Added new valid_styles option. Adds the possibility to restrict styles and their order.
-	Added new theme_advanced_runtime_fontsize option to display the runtime font size in font size select box.
-	Added new jquery plugin version that handles the gzip compressor amongst other things. Contributed by Speednet.
-	Added new $ function to tinymce namespace and editor instances for the jQuery build.
-	Added the possibility to get editors by index as well as name in the tinyMCE.editors collection.
-	Fixed so the contents inside the editor renders in standards mode by default.
-	Fixed bug where it wasn't possible to move the caret on short documents running in standards mode on IE.
-	Fixed bug where the decode method of the DOMUtils class could end up in an endless loop.
-	Fixed bug where it was possible to bypass the paste cleanup on non IE browsers if you clicked while pasting.
-	Fixed bug where some attributes wasn't serialized correctly on IE if wildcard attribute patters where used.
-	Fixed bug where entity decoding was performed on strings that didn't have any valid entities in them.
-	Fixed bugs with the insertNode method of the IE DOMRange implementation. Patch contributed by Scott McNaught.
-	Rewrote the getBookmark/moveToBookmark selection logic to boost performance on larger documents.
-	Rewrote the table plugin to include new cell selection logic and fixed various bugs and issues.
-	Merged the tinyMCE, tinymce and tinymce.EditorManager into the same instance makes more sense.
-	Removed browser setting since the browser support for TinyMCE is not far better than it was when that setting was introduced.
-	Changed the mce_ attribute prefix to the more standard _mce_ prefix. This is similar to browser vendors prefixes.
-	Optimized performance with named entities on Gecko. Regexp replace was executing very slowly probably due to a Gecko bug.
-	Optimized performance of the IE specific selection/range implementation.
-	Removed the safari plugin since we now replaced all text formatting logic to custom code.
-Version 3.2.7 (2009-09-22)
-	Fixed bug where uppercase paragraphs could still produce an invalid DOM tree on IE.
-	Fixed bug where split command didn't work on WebKit since the node serializer needs a real document to work with.
-	Fixed bug where it was impossible in Gecko to place the caret before a table if it was the first one.
-	Fixed bug where linking to urls like ../../ would produce an extra traling slash ../..//.
-	Fixed bug where the template cdate functionality was using an old 2.x API call. Patch contributed by vectorjohn.
-	Fixed bug where urls to the same site but different protocol would be converted when relative_urls where set to false. Patch contributed by Ted Rust.
-	Fixed bug where the paste plugin would remove mceItem prefixed classes.
-	Fixed bug where the paste plugin would sometimes add items in a reverse order on WebKit.
-	Fixed bug where the paste buttons would present an error message on Gecko even if you changed user.js. Patch contributed by Todd (teeaykay).
-	Fixed bug where Opera would crash if you had tables incorrectly placed inside paragraphs.
-	Fixed bug where styles elements wasn't properly processed if you had bad input HTML.
-	Fixed bug where style attributes wasn't properly forced into a specific format.
-	Fixed bug and issues with boolean attributes like checked, nowrap etc.
-	Fixed bug where input elements could override attributes on form elements.
-	Fixed bug where script or style elements could get modified by the DOMUtils processHTML method.
-	Fixed bug where the selected attribute could get lost when force root blocks logic got executed on IE. Patch contributed by Attila Mezei-Horvati.
-	Fixed bug where getAttribs method didn't handle boolean attributes correctly on IE.
-	Fixed so the paste from word dialog is presented if you paste content on an IE with to restrictive security settings.
-	Fixed so the paste_strip_class_attributes option is set to none by default in the paste plugin.
-	Removed default border=0 on tables for the default value of valid_elements.
-Version 3.2.6 (2009-08-19)
-	Added new wordcount plugin, this will display the number of typed words as you write. Contributed by Andrew Ozz.
-	Added new getNext and getPrev methods to DOM utils. These will return the first matching sibling.
-	Fixed bug where it was impossible to place the caret after a table on Gecko. It will now add a paragraph after tables.
-	Fixed bug where inline dialogs would fail if used in a window opened using a showModalDialog. Patch contributed by Derek Britt.
-	Fixed bug where IE could sometimes render a unknown runtime error on invalid input HTML.
-	Fixed bug where some incorrectly placed tables wouldn't be moved outside the paragraphs on IE.
-	Fixed bug where uppercase script/style element wouldn't be handled correctly and converted to valid lowercase.
-	Fixed bug where some WebKit versions on Mac OS X would produce issues with hidden select fields.
-	Fixed bug where the media plugin would fail on WebKit since the node wasn't properly imported to the right document.
-	Fixed bug where absolute URLs for the TinyMCE script using a base href element would cause loading problems in IE 6/7.
-	Fixed bug where pasting using the paste plugin wasn't possible on IE with to restrictive security settings.
-	Fixed bug where pasting of whitespace was impossible using the new custom paste method.
-	Fixed bug where pasting on some WebKit browsers would not work if you pasted specific contents due to a WebKit bug.
-	Fixed bug where doctypes with multiple lines would not be parsed correctly by the fullpage plugin. Patch contributed by Colin.
-	Fixed bug where the autoresize plugin would break the fullscreen functionality.
-	Fixed bug where tables would be chopped up running on IE using invalid contents and pasting paragraphs into a cell.
-	Fixed bug where the each method of jQuery build didn't iterate styleSheets. We now use the TinyMCE API one instead.
-	Fixed bug where auto switching to paragraphs after headers some times failed in Gecko.	
-	Fixed so all editor options gets passed to the Serializer class. Patch contributed by Jasper Mattsson.
-	Fixed so script/style blocks isn't wrapped in paragraphs as other inline elements.
-	Fixed so the XHR requests sends the X-Requested-With HTTP header.
-	Fixed so the data url scheme is handled in the tinymce.util.URI class.
-	Changed inline documentation to use moxiedoc style comments.
-	Removed the compat2x plugin people should have upgraded to the 3.x API by now. 3.0 was released more then a year ago.
-	Re-added Gecko specific message for users who doesn't understand the security concept regarding paste.
-Version 3.2.5 (2009-06-29)
-	Added new jQuery plugin for the jQuery specific package. This enables you to more easily load and use TinyMCE.
-	Added new autoresize plugin contributed by Peter Dekkers. This plugin will auto resize the editor to the size of the contents.
-	Fixed so all packages have the same directory structure. Previous releases had a different structure for the production package.
-	Fixed so the paste from word dialog forces the contents to be processed as word contents even if it's not.
-	Fixed so the jQuery build adapter build works. It's currently only excluding Sizzle.
-	Fixed so noscript element contents is retained during the editing process.
-	Fixed bug where the getBookmark method would need a "simple" string input when the documented way is a boolean.
-	Fixed bug where invalid contents could break the fix_table_elements logic.
-	Fixed bug where Sizzle specific attributes would be serialized if the valid_elements was set to *[*].
-	Fixed bug where IE would produce an error if you specified a relative content_css and opened the paste dialog.
-	Fixed bug where pasting images on IE would produce broken images if they came from an external site.
-	Fixed bug where memory was leaked if you add/remove controls dynamically. Some event handlers wasn't removed properly.
-	Fixed bug where domain relaxing wasn't treated correctly if you added it after the TinyMCE script element.
-	Fixed bug where the activeEditor wasn't set to null if the last editor instance was removed.
-	Fixed bug where IE was leaking memory on the onbeforeunload event due to some recently introduced logic. Patch contributed by Options.
-	Fixed bug where inserting tables in Safari 4 didn't work due to a new WebKit bug where some element names are reserved.
-	Fixed bug where URLs having a :// value in the query string would make it absolute regardless of URL settings.
-	Fixed the WebKit specific bug where DOM Ranges would fail if the node wasn't attached to something in a different way.
-	Removed the auto_resize option and the resizeToContent method from the tinymce.Editor class. Use the new autoresize plugin instead.
-Version 3.2.4.1 (2009-05-25)
-	Fixed bug where Gecko browsers would produce an extra space after for example strong when loaded from sub domains.
-	Fixed bug where script elements would be removed if they where placed inside a paragraph element.
-	Fixed bug where IE 8 would produce 1 item remaining when loading CSS files dynamically with an empty cache.
-	Fixed bug where bound events would be removed from other editor instances if a specific one was removed.
-	Fixed various bugs and issues with script and style elements inside the editor.
-	Fixed so all script contents gets wrapped in CDATA sections so that they can be parsed using a XML parser.
-	Fixed so it's impossible for elements marked as closed to have child nodes rendered in output.
-Version 3.2.4 (2009-05-21)
-	Added new paste_remove_styles/paste_remove_styles_if_webkit option to paste plugin concept contributed by Hadrien Gardeur.
-	Added new functionality to paste plugin contributed by Scott Eade aka monkeybrain.
-	Added new paste_block_drop option to the paste plugin this is disabled by default and will block any drag/drop event.
-	Added new bind/unbind methods to DOMUtils these works like Event.add/Event.remove but is easier to access.
-	Added new paste_dialog_width/paste_dialog_height options to paste pluign. Enables you to change the dialog sizes.
-	Fixed bug on IE 8 where it would sometimes produce a "1 item remaining" status message that would never finish.
-	Fixed bug on Safari 4 beta that would produce DOM Range exceptions on the DOMUtils split method since the browser has a bug.
-	Fixed bug where the paste plugin could accidentally think that some word sentences was supposed to be list elements.
-	Fixed bug where paste plugin would produce one extra empty undo level on some browsers.
-	Fixed bug where spans wasn't produced correctly on new line when the keep_styles option was enabled.
-	Fixed bug where the caret would be placed at the beginning of contents in IE 8 if you selected colors from the color pickers.
-	Fixed so the Event class is a normal class instead of a static one. The tinymce.dom.Event is now a global instance of that class.
-	Fixed so internal events for instances gets removed when the DOMUtils instance is removed.
-	Fixed so preventDefault and stopPropagation methods can be used on the event object in all browsers.
-Version 3.2.3.1 (2009-05-05)
-	Fixed bug where paragraphs containing form elements such as input or textarea would be removed.
-	Fixed bug where some IE versions would produce a wrapper function for events attributes.
-	Fixed bug where table cell contents could be removed if you pressed return/enter at the end of the cell contents.
-	Fixed bug where the paste plugin would remove a extra character if the selection range was collapsed.
-	Fixed bug where creating tables with % width wouldn't be handled correctly on WebKit browsers.
-Version 3.2.3 (2009-04-23)
-	Added new paste plugin logic. This new version will autodetect Word contents and clean it up.
-	Added a optional root element argument to getPos so you can tell it where to stop the calculation.
-	Added new DOM ready logic to remove the usage of document.write. We now use basically the same method as jQuery.
-	Fixed bug where WebKit browsers would fail when selecting all contents in the area using Ctrl+A.
-	Fixed bug where IE would produce paragraphs with empty inline style elements.
-	Fixed bug where WebKit browsers would fail when inserting tables with a non pixel width.
-	Fixed bug where block elements could get a redundant br element at the end of the element.
-	Fixed bug where the tabfocus plugin only worked with a single editor instance on page.
-	Fixed bug where IE 8 was loosing caret position if the selection was collapsed and a menu was clicked.
-	Fixed bug with application/xhtml+xml mode where menus wasn't working properly.
-	Fixed bug where the onstop workaround fix for IE would produce errors in an ASP update panel.
-	Fixed bug where the submit function override could produce errors if executed in the wrong scope.
-	Fixed bug where the area element wasn't closed by a short ending.
-	Fixed various number issues in the style plugins properties dialog. Contributed by datpaulchen.
-	Fixed issues with size suffix values in the style plugin dialog.
-	Fixed issue where hasDuplicate variable would leak out to the global space due to a bug in the Sizzle engine.
-	Fixed issue where the paste event would fire a dialog warning on IE since we extracted the text contents.
-	Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
-Version 3.2.2.3 (2009-03-26)
-	Fixed regression bug with the getPos method, it would return invalid if the view port was to small.
-Version 3.2.2.2 (2009-03-25)
-	Fixed so the DOMUtils getPos method can be used cross documents if needed.
-	Fixed bug where undo/redo wasn't working correctly in Gecko browsers.
-Version 3.2.2.1 (2009-03-19)
-	Added support for tel: URL prefixes. Even though this doesn't match any official RFC.
-	Fixed so the select method of the Selection class selects the first best suitable contents.
-	Fixed bug where the regexps for www. prefixes for link and advlink dialogs would match wwwX.

-	Fixed bug where editors wasn't converted in application/xhtml+xml mode due to an issue with Sizzle.
-	Fixed bug where alignment would fail if multiple lines where selected.
-	Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
-Version 3.2.2 (2009-03-05)
-	Added new CSS selector engine. Sizzle the same one that jQuery and other libraries are using.
-	Added new is and getParents methods to the DOMUtils class. These use the new Sizzle engine to select elements.
-	Added new removeformat_selector option, enables you to specify a CSS selector pattern of elements to remove when using removeformat.
-	Fixed so the getParent method can take CSS expressions when selecting it's parents.
-	Added new ant based build process, includes a new javabased preprocessor and a yuicompressor ant task.
-	Moved the tab_focus logic into a plugin called tabfocus, so the old tab_focus option has been removed from the core.
-	Replaced the TinyMCE custom unit testing framework with Qunit and rewrote all tests to match the new logic.
-	Moved the examples/testcases to a root directory called tests since it now includes slickspeed.
-	Fixed bug where nbsp wasn't replaced correctly in ForceBlocks.js. Patch contributed by thorn.
-	Fixed bug where an dom exception would be thrown in Gecko when the theme_advanced_path path was set to false under xml application mode.
-	Fixed bug where it was impossible to get out of a link at the end of a block element in Gecko.
-	Fixed bug where the latest WebKit nightly would fail when changing font size and font family.
-	Fixed bug where the latest WebKit nightly would fail when opening dialogs due to changes to the arguments object.
-	Fixed bug where paragraphs wasn't added to elements positioned absolute using classes.
-	Fixed bug where font size values with dot's like 1.4em would produce a class instead of the style value.
-	Fixed bug where IE 8 would return an incorrect position for elements.
-	Fixed bug where IE 8 would render colorpicker/filepicker icons incorrectly.
-	Fixed bug where trailing slashes for directories in URLs would be removed.
-	Fixed bug where autostart and other boolean values in the media dialog wouldn't be stored/parsed correctly.
-	Fixed bug where the repaint call for the media plugin wouldn't be executed due to a typo in the source.
-	Fixed bug where id attribute of object elements wasn't kept intact by the media plugin.
-	Fixed bug where preview of embeded elements when the media_use_script option was used would fail.
-	Fixed bug where inlinepopups could be rendered at an incorrect location on IE 6 while dragging.
-	Fixed bug where the blocker shim could be placed at an incorrect location on IE 6.
-	Fixed bug where the multiple and size attributes of select elements would produce incorrect values while running in IE.
-	Fixed bug where IE would loose the caret position is you selected a color from the color drop down.
-	Fixed bug where remove format wouldn't work on IE since it couldn't remove span elements that had style information.
-	Fixed bug where Opera was removing links when removing formatting from selected contents.
-	Fixed bug where paragraphs could be produced inside non positional elements styled with the CSS position value of static.
-	Fixed bug where removeformat wouldn't work if you selected part of a span in IE.
-	Fixed bug where media plugin didn't retain the style attribute on embed/object elements.
-	Fixed bug where auto focus on empty editor instances could produce strange results if you inserted an image into it.
-	Fixed bug where &nbsp; characters would be removed in FF when inserted with the mceInsertContent or selection.setContent methods.
-	Fixed bug where warning message of missing paste support wasn't displayed on WebKit browsers.
-	Fixed bug where anchor links could include other links. The selected range is now unlinked before adding news links to it.
-	Fixed memory leak when TinyMCE was used with prototype. Patch contributed by James Ots.
-	Fixed so the non documented fullpage_hide_in_source_view option for the fullpage plugin works again in the 3.x branch.
-	Fixed so tables doesn't get inserted into paragraphs by default since it's not W3C valid. Can be disabled by using the fix_table_elements option.
-	Fixed so the source view dialog sets a source_view state to the event object. Enables plugins to intercept the source view mode.
-	Fixed various validation issues with the html dialogs and pages.
-	Removed ask mode option since there is way better ways of doing this now. Use the add/remove control methods instead.
-	Removed logic for compatibility with Safari 2.x, this browser is no longer supported since no one is using it.
-	Removed the auto domain relaxing feature. If loading scripts cross sub domains it's better to specify the document.domain by hand.
-Version 3.2.1.1 (2008-11-27)

-	Fixed font style formatting compatibility issue with Adobe Air.
-	Fixed so legacy font elements get converted into spans even if cleanup_on_startup isn't enabled.
-	Fixed bug where pre elements could be incorrectly modified by an IE bug workaround. Patch contributed by hu vime.
-	Fixed bug where input elements inside inlinepopups wasn't editable in Firefox 2.
-	Fixed bug where the xhtmlxtras plugin wasn't replacing attribute values correctly.
-	Fixed bug where menu buttons in skin variants would look strange due to IE 8 fixes.
-	Fixed bug where WebKit browsers would on backspace take you back to the previous page if the editor was empty.
-	Fixed bug where DOMUtils decode method wouldn't handle strings larger than 4096kb due to node chunking.
-	Fixed bug where meta key wasn't handled as ctrl key on Mac OS X for custom keyboard short cuts.
-	Fixed bug where init event would get fired twice on WebKit on Mac OS X.
-Version 3.2.1 (2008-11-04)
-	Added support for custom icon image for drop menus. Use icon_src to set a custom image directly.
-	Added new media_strict option to media plugin. Enables you to control if the flash embed is strict or not. Enabled by default.
-	Fixed so the editors script files gets dynamically loaded without using XHR or eval.
-	Fixed so the media plugin outputs valid XHTML object elements for Flash movies. Can be disabled with the media_strict option.
-	Fixed so dynamic loading doesn't require eval calls on non IE browsers for better Air support.
-	Fixed bug where the editor wasn't treated as empty if the remaining paragraph had attributes.
-	Fixed bug where id's of elements was removed ones they got wrapped in paragraphs. Patch contributed by ChronoZ.
-	Fixed bug where WebKit browsers where placing list elements inside paragraph elements.
-	Fixed bug where inserting images or links would produce absolute urls on WebKit browsers.
-	Fixed bug where values for checked, readonly, disabled and selected attributes was incorrect on IE.
-	Fixed bug where positive values for checked, readonly, disabled and selected attributes wasn't forced to valid values.
-	Fixed bug where selecting the first option in a native select box would produce an undefined error.
-	Fixed bug where tabindex 32768 could be outputted on IE if element attributes where cloned.
-	Fixed bug where the media dialogs preview window would display incorrect contents due to duplicate clsid prefixes.
-	Fixed bug where non pixel or percent heights for textarea elements would produce errors on IE.
-	Fixed bug where cdata sections in script elements wasn't handled correctly.
-	Fixed bug where nowrap of table cells would produce a 65535 value output.
-	Fixed bug where media plugin would produce an error if you selected the first item in the items list.
-	Fixed bug where media plugin would modify links with the item _value in them.
-	Fixed so table width/height is better forced if inline_styles is enabled. Patch contributed by daKmoR.
-	Fixed css for IE 8 such as opacity and other rendering quirks.
-Version 3.2.0.2 (2008-10-02)
-	Fixed bug where the SelectBox and NativeSelectBox wasn't updated correctly if undefined was passed to them.
-	Fixed bug where the style dropdown wasn't correctly changed back to it's original state when element had no class.
-	Fixed bug where multiple pending font styles wasn't handled correctly.
-	Fixed so you can disable all auto css loading for dialogs by setting the popups_css option to false.
-Version 3.2.0.1 (2008-09-17)
-	Fixed bug where font sizes and faces wouldn't be changed correctly when there was a parent with a different style.
-	Fixed bug where adding fonts to the same selection would produce redundant spans.
-Version 3.2 (2008-09-11)
-	Added new text style support, it will now use span elements internally instead of font elements.
-	Added new improved support for the theme_advanced_font_sizes option, check the Wiki for details.
-	Added new keep_style setting that maintains the text style on return/enter on non IE browsers, enabled by default.
-	Added new onBeforeSetContent/onBeforeGetContent/onSetContent/onGetContent events to the Selection class.
-	Added new selectByIndex method to ListBox class. This enables you to select list items by an index instead of a value.
-	Added new possibility to the select method of the ListBox class. This can now have a selector function as it's value argument.
-	Added new possibility to skip the loading of popups css by setting the feature popup_css to the value false.
-	Added new possibility to skip translation of popups by setting the translate_i18n feature to false.
-	Added new element_format option enables you to produce HTML element endings instead of XHTML. But we are still in the XHTML is better camp.
-	Added missing allowfullscreen and quality options for flash elements, this will now get correctly stored.
-	Fixed bug where table cell dialog didn't close properly unless the accessibility_warnings option was set to false.
-	Fixed bug where the modal dialog blocker element for inlinepopups wasn't placed at a correct location if the page had scroll.
-	Fixed bug where non inline dialogs didn't close correctly if the inlinepopups plugin was used.
-	Fixed bug where non inline dialogs could make the modal dialog blocker to work incorrectly.
-	Fixed bug where style select wasn't populated correctly if you pressed the arrow. Patch by Hari Karam Singh.
-	Fixed bug where toggling the fullscreen mode didn't restore scrollbars on IE when the editor was inside a frame. Patch by Jacob Barrett.
-	Fixed bug where inserting flash contents using the template plugin didn't work correctly.
-	Fixed bug where inserting flash contents using the selection.setContent or mceInsertContent command didn't work correctly.
-	Fixed bug where IE would produce an exception if a comment started with -.
-	Fixed bug where the blockquote button would wrap lists incorrectly on non IE browsers.
-	Fixed bug where Opera would display BR elements in the element path.
-	Fixed bug where xhtmlxtras didn't insert elements correctly on IE.
-	Fixed bug where the buttons wasn't activated correctly in the xhtmlxtras plugin.
-	Fixed bug where adding an object as the style attribute for the dom setAttribs method wouldn't work.
-	Fixed bug where the background color would bleed out to parent container element in Gecko.
-	Fixed bug where the insert column actions for tables would fail if you did it in a thead or tfoot. Patch contributed by T Andersen (tan73).
-	Fixed bug where event blocker element wasn't positioned correctly for the inlinepopups plugin.
-	Fixed bug where pasting from Office 2007 would produce an odd comment in the contents.
-	Fixed bug where the paste as plain text could remove an extra character. Patch contributed by Speednet.
-	Fixed bug where some characters where missing for the paste_replace_list option. Patch contributed by Speednet.
-	Fixed bug where removing non existing editor instances by the mceRemoveControl command would produce an error.
-	Fixed bug where meta elements with the name description would produce errors in IE.
-	Fixed bug where color and background colors wouldn't be updated properly.
-	Fixed bug where the createMenuButton of tinymce.ControlManager didn't implement the last class argument.
-	Fixed bug where the editor_css option was relative from the TinyMCE installation directory not the current page.
-	Fixed bug where elements wouldn't be padded if the element contained bogus br elements. For example TD elements.
-	Fixed bug where parsing of <body > in fullpage plugin would produce an error.
-	Fixed bug where relative urls with just ./ would become an empty string.
-	Fixed bug where outdent button would be disabled if inline_styles where set to false.
-	Fixed bug where replace with an empty search string would produce an error on IE.
-	Fixed bug where restoring the overflow state of the body in fullscreen plugin running on IE would produce vertical scrollbars.
-	Fixed bug where pressing return/enter in list items would sometimes move the caret the to top of the content area in FF.
-	Fixed bug where the style listbox wouldn't be updated correctly if you used the use_native_selects option.
-	Fixed bug where WebKit browsers would produce a div element when ending list elements using return.
-	Fixed so translation of popup contents only occurs if it's needed.
-	Optimized the URI object in regards or converting absolute URIs to relative URIs.
-Version 3.1.1 (2008-08-18)
-	Added new getSize method to DOMUtils it will return the dimensions only of an element.
-	Added new alert/confirm methods to the tinyMCEPopup class to prevent focus problems and also to shorten method calls.
-	Added new plugin_preview_inline option to preview plugin to enable/disable native/inline dialogs.
-	Added new readonly option. If this is set the editor will only display the contents for the user.
-	Added missing tabindex and accesskey to input elements in the default valid_elements setup.
-	Updated firebug lite to 1.2, to enable it use the tiny_mce_dev.js?debug=1 on the development package.
-	Fixed so the preview dialog in the preview plugin uses inline dialogs/popups.
-	Fixed so CDATA sections remains intact through the serialization process of the DOM tree.
-	Fixed various issues with the getAttrib command. It will now return more correct values.
-	Fixed bug where the embed element wasn't properly parsed in the media plugin it now supports 3 formats.
-	Fixed bug where the noshade attribute was serialized incorrectly on IE.
-	Fixed bug where editing an existing link element didn't force it relative.
-	Fixed bug where image link creation fails on Safari if the image is aligned.
-	Fixed bug where it was possible to scroll the fullscreen mode in Opera 9.50.
-	Fixed bug where removal of center image alignment would fail. Patch contributed by Andrew Ozz.
-	Fixed bug where inlinedialogs didn't work properly if the doctype was incorrect in IE.
-	Fixed bug where cross domain loading didn't work correctly in Opera 9.50.
-	Fixed bug where breaking huge text blocks with return/enter key would scroll to end of block.
-	Fixed bug where replace button kept inserting the replacement text even if there is no more matches.
-	Fixed bug with fullpage plugin where value wasn't set correctly. Patch contributed by Pascal Chantelois.
-	Fixed bug where the dom utils setAttrib method call could produce an exception if the input was null/false.
-	Fixed bug where pressing backspace would sometimes remove one extra character in Gecko browsers.
-	Fixed bug where the native confirm/alert boxes would move focus to parent document if fired in dialogs.
-	Fixed bug where Opera 9.50 was telling you that the selection is collapsed even when it isn't.
-	Fixed bug where mceInsertContent would break up existing elements in Opera and Gecko.
-	Fixed bug where TinyMCE fails to detect some keyboard combos on Mac, contributed by MattyRob.
-	Fixed bug where replace all didn't move the caret to beginning of text before searching.
-	Fixed bug where the oninit callback wasn't executed correctly when the strict_loading_mode option was used, thanks goes to Nicholas Oxhoej.
-	Fixed bug where a access denied exception was thrown if some other script specified document.domain before loading TinyMCE.
-	Fixed so setting language to empty string will skip language loading if translations are made by some backend.
-	Fixed so dialog_type is automatically modal if you use the inlinepopups plugin use dialog_type : "window" to re-enable the old behavior.
-Version 3.1.0.1 (2008-06-18)
-	Fixed bug where the Opera line break fix didn't work correctly on Mac OS X and Unix.
-	Fixed bug where IE was producing the default value the maxlength attribute of input elements.
-Version 3.1.0 (2008-06-17)
-	Fixed bug where the paste as text didn't work correctly it encoded produced paragraphs and br elements.
-	Fixed bug where embed element in XHTML style didn't work correctly in the media plugin.
-	Fixed bug where style elements was forced empty in IE. The will now be wrapped in a comment just like script elements.
-	Fixed bug where some script elements wrapped in CDATA could fail to be serialized correctly.
-	Fixed bug where FF 3 produced -moz- internal styles in some style attributes.
-	Fixed bug where query strings and external URLs didn't work correctly in style attributes.
-	Fixed bug where shape attribute of area elements got serialized as rect regardless of it's initial value in IE 6.
-	Fixed bug where selection of elements inside layers would fail in IE since focus was moved to the document body.
-	Fixed bug where pressing enter/return in an editable select box would produce an __mce_add_custom__ class value.
-	Fixed bug where changing font size of text placed inside a colored text chunk would remove the parent node.
-	Fixed bug where Opera 9.5 final produced a strange line break behavior due to a workaround for previous Opera versions.
-	Fixed bug where text/background color would produce a strange focus problem when you tried to click on the body in IE.
-	Fixed issue where selecting the title of an listbox equals the old 2.x behavior of changing the value to an empty string.
-	Fixed issue where it was common for the media plugin to break if the _value attribute wasn't added for the param element.
-	Fixed issue where the wrong parent editor instance might be updated if you use fullscreen mode in an incorrect way.
-	Fixed issue where Safari was producing a warning about the base element not being closed correctly.
-	Removed redundant form element name matching from regexp in the DOMUtils class.
-Version 3.0.9 (2008-06-02)
-	Added new contextmenu_offset_x/contextmenu_offset_y options for the contextmenu plugin.
-	Added cite attribute to the default rule for the blockquote element.
-	Added support for using arrow keys for selection of items in listboxes.
-	Added support for using arrow keys for selection of items in dropmenus.
-	Fixed bug where blockformat change on elements with BR inside them didn't change correctly on Firefox.
-	Fixed bug where removing table rows inside thead or tfoot would remove the whole table if it was the last one.
-	Fixed bug where XHR synchronous mode didn't execute the callback handlers synchronously.
-	Fixed bug where setting border to 0 didn't add border: 0 to the style attribute when using the advimage dialog.
-	Fixed bug where the selection of images and table cells didn't work correctly when the editor is placed in a frame and running on IE.
-	Fixed bug where the store/restore of a selection didn't work correctly in non IE browsers.
-	Fixed bug where only the first element would be invalid for the invalid_elements option.
-	Fixed bug where paste as plain text didn't encode the characters correctly when they where inserted.
-	Fixed bug where HTML source window couldn't be maximized on Gecko when the maximizable feature was enabled.
-	Fixed bug where color selection using the color picker could produce exception in IE.
-	Fixed bug where font size changes could produce produce extra redundant elements.
-	Fixed bug where IE could produce unknown runtime error if you replaced a image with another image from a separate frame.
-	Fixed bug where the domLoaded state for the Event class wasn't set correctly if the editor was loaded dynamically using the gzip compressor.
-	Fixed bug where handling of the base element for a page would produce incorrect urls. Based on a patch contributed by John LeSueur.
-	Fixed bug where table constraint alert boxes was presented with an empty value and wasn't the skinned inline ones.
-	Fixed bug where the onChange event wasn't fired when the form was submitted. It's now also triggered when the save method is called.
-	Fixed bug where encoding set to xml didn't work as expected. It now encodes the contents into XML entities.
-	Fixed bug where numrows didn't work correctly for the merge cells dialog of the table plugin.
-	Fixed bug where the onGetContent event was fired even when the no_events flag was set.
-	Fixed bug where the preview panels for the advimage and the media plugin could overflow on Safari and FF 3.
-	Fixed bug where the editing and removal of abbr elements using the xhtmlxtras plugin working correctly on IE.
-	Fixed bug where save button in the save plugin didn't work correctly on IE.
-	Fixed bug where dragging layers didn't work as expected since it would snap back to it's original location if you saved.
-	Fixed bug where the description of the template plugin dialog wasn't updated correctly.
-	Fixed bug where the values for frame and rules in the table dialogs where swapped.
-	Fixed bug where the elements like ins, del, cite, acronym and abbr didn't have the default editing style as the old 2.x branch.
-	Fixed bug where ask mode would lock the focused textarea if you pressed cancel in the confirm dialog on FF 3.
-	Fixed bug where ask mode would produce contents for empty textareas if you reloaded the page.
-	Fixed so the onGetContent event gets the full pass through object just like the other events.
-	Fixed so attributes for block elements remains the same when you change format of a element.
-Version 3.0.8 (2008-04-30)
-	Fixed bug where IE would produce an error if textareas without names where converted.
-	Fixed bug where editor wasn't forced empty when there was only a single br or empty paragraph left.
-	Fixed bug where IE would produce an warning message if object elements where produced in the media plugins preview running on https.
-	Fixed bug where new addVer function didn't handle hash items correctly. Patch contributed by Mirek Burkon.
-	Fixed bug where font_size_style_values option wasn't applied correctly to fonts inside the editor.
-	Fixed bug where image selection could be lost if a image was edited using context menu on IE.
-	Fixed bug where style values wasn't updated properly due to an invalid regexp.
-	Fixed bug where IE 6 where displaying warning message about insecure items when inserting an image while using https. Patch contributed by Norifumi Sunaoka.
-	Fixed bug where IE was producing an auto save message if you selected a color from the color split button.
-	Fixed bug where backspace sometimes would move the caret to the end of the previous block in Gecko.
-	Fixed bug where the rowlayout manager didn't work as described in the documentation.
-	Fixed bug where the default options for the fullpage plugin wasn't applied correctly.
-	Fixed bug where selection would jump one character if you applied a styles to a words in non IE browsers.
-	Fixed bug where undo levels wasn't added correctly if you went back in undo history and added a new event.
-	Fixed bug where font size dropdown didn't mark the selected size in IE.
-	Fixed bug where the size of the editor was determined using clientWidth instead of offsetWidth.
-	Fixed so the onchange event doesn't fire on the initial undo level, it will also fire when the editor is blurred.
-	Fixed so the advhr plugin produces XHTML valid output instead of non standard attributes.
-	Fixed so blockquote gets converted into [quote] in when the bbcode plugin is enabled.
-	Fixed so theme_advanced_font_sizes can be named for example Font 1=1, Font 2=2 etc.
-	Fixed so editor_selector/editor_deselector can be regexps. By default only strings are allowed not part regexps like before.
-	Fixed so that the version suffix is optional. It still requires the build process so you need to export it manually.
-	Fixed so it's possible to tab to table cells in non Gecko browsers and also produce new rows if you tab at the end of a table. Contributed by Josh Peek.
-Version 3.0.7 (2008-04-14)
-	Added new version suffix to all internal GET requests to make sure that the users cache gets cleared correctly.
-	Fixed issue with isDirty returning true event if it wasn't dirty on IE due to changes in tables during initialization.
-	Fixed memory leak in IE where if a page was unloaded before all images on the page was loaded it would leak.
-	Fixed bug in IE where underline and strikethrough could produce an exception error message.
-	Fixed bug where inserting paragraphs in totally empty table cells would produce odd effects.
-	Fixed bug where layer style data wasn't updated correctly due to some performance enhancements with the DOM serializer.
-	Fixed bug where it would convert the wrong element if there was two elements with the same name and id on the page.
-	Fixed bug where it was possible to add style information to the body element using the style plugin.
-	Fixed bug where Gecko would add an extra undo level some times due to the blur event.
-	Fixed bug where the underline icon would get active if the caret was inside a link element.

-	Fixed bug where forecolorpicker and backcolorpicker buttons where rendered incorrectly when the o2k7 skin was used.
-	Fixed bug where comment couldn't contain -- since it's invalid markup. It will now at least not break on those invalid comments.
-	Fixed bug where apos wasn't handled correctly in IE. It will now convert apos to &#39; on IE since that browser doesn't support that entity.
-	Fixed bug where entities wasn't encoded correctly inside pre elements since they where protected from whitespace removal.
-	Fixed bug where color split buttons where rendered incorrectly on IE6 when using the non default theme.
-	Fixed so caret is placed after links ones they are created, to improve usability of the editor.
-	Fixed so you can select tables by clicking on it's borders in non IE browsers to normalize the behavior.
-	Fixed so the menus can be toggled by clicking once more on the icon in listboxes, menubuttons and splitbuttons based on code contributed by Josh Peek.
-	Fixed so buttons can be labeled, currently only works with the default skin, so it's kind of experimental. Patch contributed by Daniel Insley.
-	Fixed so forecolorpicker and backcolorpicker remembers the last selected color. Patch contributed by Shane Tomlinson.
-	Fixed so that you can only execute the mceAddEditor command once for the same instance name.
-	Fixed so command functions added with addCommand can pass though the call to default handles if it returns true.
-Version 3.0.6.2 (2008-04-07)
-	Fixed bug where empty tables couldn't be edited correctly on non IE browsers if they where loaded into the editor.
-	Fixed bug where it was impossible to resize layers correctly in IE since it thought it was an image.
-	Fixed bug where an editor instance was stealing focus in IE resulting in a scroll to the editor on page reloads.
-	Fixed bug where Safari was crashing on Mac OS X if you closed dialogs using the Esc key.
-Version 3.0.6.1 (2008-04-04)
-	Added support for the missing mceAddFrameControl command. The input for this command has changed so consult the Wiki.
-	Fixed bug where sub menus for the drop menus would leave an empty element behind.
-	Fixed memory leak in IE if the editor was placed in a frame or iframe.
-Version 3.0.6 (2008-04-03)
-	Added elements to the default value of valid_elements option. It now contains all XHTML strict elements and a few transitional.
-	Added more accessibility fixes, it's now possible to navigate and close list boxes and split button menus with the keyboard.
-	Added missing getInfo method to the contextmenu and safari plugin, this caused problems for the Drupal module.
-	Added new inlinepopups_zindex option to the inlinepopups plugin so that you can configure the default start z-index.
-	Added new setControlType method to the tinymce.ControlManager class. This method enables you to override the default classes.
-	Added ability to specific an optional control class to use instead of the default one for the ControlManager methods. Based on concept by Josh Peek.
-	Fixed bug where attribute rules for the DOM Serializer couldn't contain - or _ characters in their names.
-	Fixed bug where inlinepopups event blocker and modal dialog blocker elements produced vertical scrollbars.
-	Fixed bug where there was a rendering issue with quirks mode in Safari moving the resize handle to an incorrect position.
-	Fixed bug with forecolor/backcolor controls on IE. Sometimes elements positioned relative will generate display errors.
-	Fixed bug where a p2 was leaking out in the global name space when you selected a color from the forecolor/backcolor controls.
-	Fixed bug where empty paragraphs didn't work as expected in browsers other than IE.
-	Fixed bug where the load method of the tinymce.dom.ScriptLoader didn't check if the file was already loaded.
-	Fixed bug where the load method for the PluginManager and ThemeManager didn't check if a plugin/theme by a specific name was all ready loaded.
-	Fixed bug where the theme_advanced_link_targets option didn't work correctly with the advanced themes link dialog. Patch contributed by Arnold B.
-	Fixed bug where the style command would merge classes into empty span elements.
-	Fixed bug where the style command would remove empty span elements outside the current selection.
-	Fixed bug where the fix for the Safari backspace bug removed all editor contents if it was filled with empty paragraphs.
-	Fixed bug where alert and confirm boxes opened by the inlinepopups plugin would produce an exception if domain relaxing was used.
-	Fixed bug where Safari was adding style attributes to all elements when you paste them into the editor.
-	Fixed bug where the spellchecker menus was visually incorrect since the space for the non existing icon was still there.
-	Fixed bug where remove_linebreaks option didn't remove line breaks inside the text contents of a element.
-	Fixed bug where Safari 3.1 was introducing _mc_tmp into paragraphs due to the new querySelectorAll and a TinyMCE specific workaround.
-	Fixed bug where getParam method in the Editor class was returning incorrect objects and would mess up the font drop down. Patch contributed by speednet.
-	Fixed bug where the table dialog would produce an exception in IE when you edited tables since it tried to place focus in a disabled field.
-	Fixed bug where class attribute on some span elements was removed on cleanup.
-	Fixed bug where resizing the editor in IE could produce an exception if the editor width/height got to be a negative value.
-	Fixed bug where wmv files wouldn't play since the src param was used instead of the url param.
-	Fixed bug where br elements would be added here and there in Gecko. Geckos internal _moz_dirty br elements where serialized as well.
-	Fixed bug where editing named anchors would produce two anchors instead of one updated one.
-	Fixed bug where arrow and function keys didn't work when an noneditable element was focused within the editor.
-	Fixed bug where the dispatcher could produce an exception if the listener list was altered inside an event callback.
-	Fixed bug where it was impossible to totally empty the editor contents on Safari due to an mistreatment of nbsp as whitespace. Patch contributed by Andrew Ozz.
-	Fixed bug where TinyMCE would not convert textareas with the same name attribute value. It will now generate an unique id for those textareas.
-	Fixed bug where backspace/delete key was deleting td elements inside tables while running on Gecko.
-	Fixed bug where Firefox 3.0b4 and Opera 9.26 where scrolling to the top of document when pressing return/enter.
-	Fixed bug where the template plugin wasn't just inserting the mceTmpl tagged element.
-	Fixed bug where the alert method of the default WindowManager implementation didn't translate input language strings like the inlinepopups dialog does.
-	Fixed bugs with the backspace behavior in Gecko. The caret was placed on incorrect locations in the DOM sometimes.
-	Fixed so advimage dialog and table dialogs has support for editable select boxes for the class value.
-	Fixed so the media, pagebreak and spellchecker doesn't load it's default content.css file if the content_css option is set to false.
-	Fixed so the paste_use_dialog option works again it's enabled by default but can be disabled on IE. Patch contributed by Speednet.
-	Fixed so that the fullscreen editor is focused when switching fullscreen editing on.
-	Fixed so it's possible to edit images and links inside tables using the context menu.
-	Fixed so table dialogs and the advanced image dialog doesn't loose selection in IE if the dialogs where navigated/submitted with the keyboard.
-	Fixed so the theme_advanced_blockformats options can have named items for example title 1=h1;title 2=h2.
-	Fixed so it's possible to add a custom editor_css for the simple theme.
-	Fixed quirks with directionality rtl, patch contributed by Andrew Ozz.
-	Fixed so the inlinepopups default start zIndex is 300000.
-	Fixed typo in media plugin Shockware is now replaced with Shockwave.
-	Fixed psuedo memory leak in IE with the replaceChild method inside the DOMUtils.replace method.
-	Fixed so memory is released when an editor instance is removed from page.
-	Optimized the color split button menus so that they use less event handlers.
-	Removed the util/mclayer.js file since it's no longer used by any of the TinyMCE dialogs and is considered deprecated.
-Version 3.0.5 (2008-03-12)
-	Added new black skin variant to the o2k7 skin contributed by Stefan Moonen.
-	Added new explode method to the tinymce core class. This does a split but removed whitespace it also defaults to a , delimiter.
-	Added new detection logic for IE 8 standards mode into the DOMUtils class strMode can now be checked to see if that mode is on/off.
-	Added new noscale option value for the scale select box for Flash in the media plugin.
-	Fixed bug where the menu for the ColorSplitButton wasn't removed when the editor was removed.
-	Fixed bug where font colors couldn't be edited correctly since the style of the element didn't get updated correctly.
-	Fixed bug where class of elements would get lost when TinyMCE was fixing incorrect HTML markup.
-	Fixed bug where table editing would produce double height values.
-	Fixed bug where width style value wouldn't be removed if you switched width unit from cm/em to pixels or percent.
-	Fixed bug where the search/replace input box wasn't auto focused like the other dialogs.
-	Fixed bug where the old mceAddControl command would use the fullscreen settings next time it created an instance.
-	Fixed bug where multiple lines where added to the target cell if you merged multiple empty cells.
-	Fixed bug where drop down menus would be incorrectly positioned inside scrollable divs.
-	Fixed bug where the separators of the silver skin variant didn't display correctly in IE 6.
-	Fixed bug where createStyleSheet seems to load scripts at opposite order in some IE versions.
-	Fixed bug where directionality could produce odd results for the UI and the dialogs.
-	Fixed bug where the DOM serializer wouldn't serialize custom namespaced attributes in IE 6 using the *[*] valid elements rule.
-	Fixed bug where table caption would be inserted after the thead element if you swapped a tr to be inside the thead.
-	Fixed bug where the youtube detection logic for the media plugin was to generic.
-	Fixed so the deprecated and undocumented theme_advanced_path_location set to none won't hide the whole statusbar.
-	Fixed so most input lists can have whitespace in them they are now split using the new tinymce.explode method.
-	Fixed so the popup_css and popup_css_add URLs are relative to where the current document is located.
-	Fixed various bugs and quirks with the store/restore selection logic.
-	Fixed so the editor starts in IE 8 standards mode but still that browser is very very buggy.
-	Fixed so dialog_type set to modal will block the background and other inline windows and only give access to the front most window.
-Version 3.0.4.1 (2008-03-08)
-	Fixed critical bug where it was impossible to edit images when inlinepopups where used due to lost selection in IE.
-Version 3.0.4 (2008-03-07)
-	Added new option constrain_menus, this enables you to force view port constraints on all menus. Contributed by Shane Tomlinson.
-	Fixed bug where table background wasn't visible inside the editor due to a default CSS rule overriding the style attribute.
-	Fixed bug where links would get a null class added if no styles was used in IE.
-	Fixed bug where spellchecker was auto focusing the editor in IE.
-	Fixed bug where document.domain would produce invalid argument if the editor was loaded in IE6 over a network UNC path.
-	Fixed bug where table height attribute was used, this is deprecated in XHTML so it now adds it as an style.
-	Fixed bug where textareas with style values would produce error in IE.
-	Fixed so the first element in each dialog is focused by default to enhance keyboard usage.
-	Fixed so you can add a mceFocus class to elements to make it auto focused.
-	Fixed so you can close dialogs using the esc key.
-	Fixed so you can press return/enter to submit the action of each dialog.
-	Fixed so tabbing inside an inline popups wont focus the resize anchor elements.
-	Fixed so you can press ok in inline alert messages using the return/enter key.
-	Fixed so textareas can be set to non px or % sizes for example em, cm, pt etc.
-	Fixed so non pixel values can be used in width/height properties for tables.
-	Fixed so the custom context menu can be disabled by holding down ctrl key while clicking.
-	Fixed so the layout for the o2k7 skin looks better if you don't have separators before and after list boxes.
-	Fixed so the sub classes get a copy of the super class constructor function to ease up type checking.
-	Fixed so font sizes for the format block previews are normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
-	Fixed so font sizes for h1-h6 in the default content.css is normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
-Version 3.0.3 (2008-03-03)
-	Fixed bug where an error about document.domain would be thrown if TinyMCE was loaded using a different port.
-	Fixed bug where mode exact would convert textareas without id or name if the elements option was omitted.
-	Fixed bug where the caret could be placed at an incorrect location when backspace was used in Gecko.
-	Fixed bug where local file:// URLs where converted into absolute domain URLs.
-	Fixed bug where an error was produced if a editor was removed inside an editor command.
-	Fixed bug where force_p_newlines didn't effect the paste plugin correctly.
-	Fixed bug where the paste plugin was producing an exception on IE if you pasted contents with middots.
-	Fixed bug where delete key could produce exceptions in Gecko sometimes due to the fix for the table cell bug.
-	Fixed bug where the layer plugin would produce an visual add class called mceVisualAid this one is now renamed to mceItemVisualAid to mark it internal.
-	Fixed bug where TinyMCE wouldn't initialize properly if ActiveX controls was disabled in IE.
-	Fixed bug where tables and other elements that had visual aids on them would produce an extra space after any custom class names.
-	Fixed bug where search with an empty string would produce some odd "invalid pointer" error in IE.
-	Fixed bug where elements like menus where placed at incorrect positions in Opera 9.26.
-	Fixed bug where IE was loosing focus of the editor when you clicked some dropmenu and if it was placed in a frame or iframe.
-	Fixed bug where focus of images could be lost in IE if you focused the accessibility confirm dialog in the advimage plugin.
-	Fixed bug where nestled font elements would produce odd output like missing font elements.
-	Fixed bug where text colors and styles got removed if invalid_elements included the font element.
-	Fixed bug where text-decoration set to underline or line-through would remove other styles from span elements.
-	Fixed bug where editor contents like \n\n would be incorrectly handled and processed as real line feeds.
-	Fixed bug where incorrectly encoded urls with ampersands in them would be decoded incorrectly.
-	Optimized the DOMUtils decode method to be a lot faster if the string doesn't have any entities to decode.
-Version 3.0.2.1 (2008-02-26)
-	Fixed alert/confirm dialogs so they display correctly.
-Version 3.0.2 (2008-02-26)


-	Added new CSS class to the default content.css files mceForceColors that forces white background and black text can be used with the body_class option.
-	Added new type parameter to the Editor.getParam function to reduce redundant logic for parsing hash tables.
-	Added new isDone method to the ScriptLoaded class, this enables you to check if a script has been loaded or not.
-	Added new resizeTo and resizeBy methods for the advanced theme. Can be called using tinyMCE.activeEditor.theme.resizeTo(w, h);
-	Added new skin_variant option this can be used to extend existing skins with slight modifications like color.
-	Added new variant of the o2k7 skin called "silver" based on a contribution made by Stefan Moonen.
-	Fixed bug where the template plugin might produce errors if the template_mdate_classes wasn't configured.
-	Fixed bug where the media plugin didn't convert the URLs for movies once they where inserted.
-	Fixed bug where the style field for the advlink dialog didn't work correctly if you edited an existing link.
-	Fixed bug where alignment of toolbars would fail in editor was uses in a quirks mode on IE, fix contributed by Peter Wood & Art Lawry.
-	Fixed bug where initialization of multiple editors at the same time using the mceAddControl method would produce errors.
-	Fixed bug where initialization of editors using mceAddControl command or new tinymce.Editor calls would fail during page load.
-	Fixed bug where the check for domain relaxing could fail if the document.domain property was changed by another script.
-	Fixed bug where textareas couldn't be named description or any other name that matches the meta elements in IE and Opera.
-	Fixed bug where the element path would fail sometimes in IE due to "unknown runtime error" on innerHTML.
-	Fixed bug where Safari would crash if you was hiding the editor before serializing the contents.
-	Fixed bug where the editor wasn't scaled propertly in fullscreen mode using the old fullscreen_new_window option.
-	Fixed bug where render method didn't load language packs in IE and Opera if you rendered an editor during page load.
-	Fixed bug where resizing the browser window in fullscreen didn't resize the editor.
-	Fixed bug where the blockquote command didn't move the caret inside the new empty blockquote if you used it on an empty document.
-	Fixed bug where auto in a style width/height for the textarea would produce an editor with the size value of 100. Fix contributed by Shane Tomlinson.
-	Fixed bug where restoration of selection at the beginning of an element could fail in Gecko.
-	Fixed bug where caret restoration after a cleanup could place the it at an incorrect location.
-	Fixed bug where delete key inside td elements would delete the cell in Gecko.
-	Fixed so the blockquote button toggles individual lines. This behavior is a bit more like the old indentation behavior in the 2.x branch.
-	Fixed so the dialog language packs only gets loaded the first time you open a dialog.
-	Fixed so all classes in the whole UI is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
-	Fixed so all classes in the inlinepopups logic is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
-	Fixed so that the window in fullscreen mode can be resized when fullscreen_new_window option is enabled.
-	Fixed so blockquote elements are formatted in the source output with an linefeed before and after it.
-	Optimized the editor initialization by reducing the number of calls to getBookmark/moveToBookmark.
-Version 3.0.1 (2008-02-21)
-	Added spellchecker plugin into the main package, but without any backend can be specified with the spellchecker_rpc_url option.
-	Added src attribute for script elements to the default valid_elements option value.
-	Added extra parameter to the class_filter callback it can now also filter out classes based on the whole CSS rule.
-	Added support for domain relaxing, TinyMCE can now be loaded from an remote domain as long as they are on the same root domain.
-	Added support for custom elements the new custom_elements option enables you to add non HTML elements to the editor.
-	Added support for the W3C Selectors API that was added to latest nightly build of WebKit.
-	Fixed bug where some object param element wasn't stored correctly using the media plugin.
-	Fixed bug where Opera was scrolling to top of page is drop menus on list boxes where displayed.
-	Fixed bug where IE6 was crashing if a format block was used on a container with anchor elements.
-	Fixed bug where spans with font sizes wasn't handled correctly when editor was loading contents.
-	Fixed bug where mode exact couldn't convert editors with name only. Id is no longer required but recommended.
-	Fixed bug where the mceInsertRawHTML command produced an extra undo level.
-	Fixed bug where the specific_textareas mode didn't work correctly this is the same thing as textareas now.
-	Fixed bug where the values of input elements in the HTML page of dialogs pages where changed in IE.
-	Fixed bug where fullscreen and fullpage plugins didn't work well together.
-	Fixed bug where embed elements wasn't handled properly in the media plugin.
-	Fixed bug where style information on span elements gets munged when fonts are converted to spans.
-	Fixed bug where some entities in element attributes where encoded incorrectly in the latest WebKit build.
-	Fixed bug where initialization would fail in IE if there where two input elements with the name submit in the form.
-	Fixed bug where fullscreen mode didn't work correctly in IE when the fullscreen_new_window option was used.
-	Fixed bug where invalid contents like an ul inside a p element would produce odd results in IE.
-	Fixed bug where Opera 9.2x was placing the drop menus at incorrect locations if the editor was placed in a table.
-	Fixed bug where Opera was producing odd results if enter/return was pressed while having forced_root_blocks disabled.
-	Fixed bug where layer plugin was stealing focus in IE on initialization.
-	Fixed bug where body attributes wasn't set properly in the fullpage plugin, fix contributed by Hiroaki Kawai.
-	Fixed bug where insert image and insert link dialogs where producing an extra level in the undo history.
-	Fixed bug where Gecko would produce an error if empty elements like <div></div> where inserted using mceInsertContent.
-	Fixed bug where center alignment of images produced odd results inside table cells.
-	Fixed bug where center alignment of images couldn't be toggled correctly.
-	Fixed bug where alignment of images inside tables would produce double float style items in IE if the fix_table_elements option was enabled.
-	Fixed bug where a variable called 'v' was polluting the global namespace. Objects tinymce and tinyMCE are the only ones allowed to be global.
-	Fixed bug where insert table from context menu couldn't insert new tables inside existing tables.
-	Fixed bug where Safari wouldn't produce br elements on enter when the force_br_newlines option was enabled.
-	Fixed bug where switching cell type in table cell dialog would produce odd attributes in IE.
-	Fixed bug where Gecko was outputting internal attributes if valid_elements where set to "*[*]".
-	Fixed bug where the style plugin would produce non hex colors inside the dialog when running on Gecko.
-	Fixed bug where an empty src value for insert image would remove the currently selected image if it wasn't and image element.
-	Fixed bug where hidden input elements would break the logic for the tab_focus option.
-	Fixed bug where save button wasn't working correctly in fullscreen mode.
-	Fixed bug where the editor was forced to be placed in a form element if the save_onsavecallback option was used.
-	Fixed bug where upper case param attributes wasn't parsed correctly in the media plugin.
-	Fixed bug where render method of tinymce.Editor class would produce an exception if the strict_loading_mode option was omitted.
-	Fixed bug where nodeChanged event could be fired while the editor was loading and there for produce an exception in FF.
-	Fixed bug where no undo levels where added if the user created new table rows using the tab key on Gecko.
-	Fixed bug where tables would be broken if you selected a different block format for contents withing an table cell.
-	Fixed bug where the render method of the tinymce.Editor class didn't setup the tinymce.EditorManager.settings object correctly.
-	Fixed bug where the advanced image dialog would go to the first tab if the alternative image was changed using the file browser link.
-	Fixed bug where the forced_root_block option would produce BR elements inside empty blocks if the block wasn't a paragraph.
-	Fixed bug where the forced_root_block doesn't work correctly on IE if the specified element was something else than paragraphs.
-	Fixed bug where selection of images would get lost if user selected something from the context menu in IE.
-	Fixed bug where the context menu plugin would pollute the global namespace with two variables p1 and p2.
-	Fixed compatibility issue with Mootools, it is destroying document.getElementById on unload in IE. (Mantra: You don't own the internal objects).
-	Fixed bugs where dialogs/tabs and other UI elements where rendered incorrectly in Firefox 3.
-	Fixed so the auto CSS class importer is compatible with 2.x.
-	Fixed so the editor UI and inlinedialogs works correctly with the YUI CSS reset package.
-	Fixed so header and footer elements are forced to lower case when the fullpage plugin is used.
-	Fixed so load prefixes "-" for plugins and themes isn't required if the plugin/theme was loaded by the ThemeManager/PluginManager.
-	Fixed so the JSONRequest uses application/json content type to make Ruby on rails happy.
-	Fixed so the CSS rule is more exact for the body in the default content.css files. Body is now defined as "body.mceContentBody" instead of just "body".
-	Fixed so the tiny_mce_dev.js uses XHR instead of document.write to load scripts to resolve an issue with Opera 9.50.
-	Fixed so language pack loading can be disabled by setting the language option to false. Can be useful for systems with their own language pack management.
-Version 3.0 (2008-01-30)
-	Added map and area elements to the default valid_elements list and also some indentation rules.
-	Fixed bug where empty paragraphs wasn't padded when loading contents.
-	Fixed bug where the RowLayout manager didn't work at all.
-	Fixed bug where style attribute data would get messed up in advimage dialog.
-	Fixed bug where the table dialogs class select wasn't updated correctly.
-	Fixed bug where elements would get extra whitespace around on insert when body was present in valid_elements.
-	Fixed bug where coords attribute of the area element wasn't handled properly in IE.
-	Fixed bug where Safari didn't produce BR elements on shift+return.
-	Fixed bug where force blocks would cast odd invalid attribute exception in IE.
-	Fixed bug where media plugin would produce extra whitespace before and after objects.
-	Fixed bug where cleanup_callback could break the contents of the editor. But use the new event system instead of this option.
-	Fixed bug where the tab_focus option didn't work between editor instanced. You can now tab between editors.
-	Fixed bug where the load function of the ScriptLoader class didn't load single files without the load que as it was supposed to.
-	Fixed bug where the execcommand_callback parameter order was incorrect. Recommendation use the new addCommand method.
-	Fixed bug where range.select calls sometimes failed on some IE versions.
-	Fixed bug where Safari was scrolling to top of document when enter/returned was pressed.
-	Fixed bug where fullscreen_new_window option didn't work correctly.
-	Fixed bug where the nonbreaking plugin inserted an space instead of an non breaking space the first time.
-	Fixed bug where the visualization of non breaking spaces where visual in element path.
-	Fixed so the focus is restored to the editor after inserting an custom character.
-	Fixed so the isNotDirty state is set to false if a new undo level is added.
-	Fixed so pointless style information for borders gets removed in IE.
-	Fixed so the resize button has a se-resize cursor css value.
-Version 3.0rc2 (2008-01-18)
-	Added new fix_nesting option to fix bug #1867292, this is disabled by default.
-	Added new indentation option enables you to specify how much each indent/outdent call will add/remove.
-	Added easier support for enabling/disabling icon columns on drop menues.
-	Added new menu button control class. This control is very similar to the splitbutton but without any onclick action.
-	Added support for previous tab focus (shift+tab). The tab_focus setting now takes two items next and previous element.
-	Fixed bug where iframes inside the editor got removed in Firefox on initial load.
-	Fixed bug where the CSS for abbr elements wasn't applied correctly in IE.
-	Fixed bug where mceAddControl on element inside a hidden container produced errors.
-	Fixed bug where closed anchors like <a /> produced strange results.
-	Fixed bug where caret would jump to the top of the editor if enter was pressed a the end of a list.
-	Fixed bug where remove editor failed if the editor wasn't properly initialized.
-	Fixed bug where render call on for a non existing element produced exception.
-	Fixed bug where parent window was hidden when the color picker was used in a non inlinepopups setup.
-	Fixed bug where onchange event wasn't fired correctly on IE when color picker was used in dialogs.
-	Fixed bug where save plugin could not save contents if the converted element wasn't an textarea.
-	Fixed bug where events might be fired even after an editor instance was removed such as blur events.
-	Fixed bug where an exception about undefined undo levels could be throwed sometimes.
-	Fixed bug where the plugin_preview_pageurl option didn't work.
-	Fixed bug where adding/removing an editor instance very fast could produce problems.
-	Fixed bug where the link button was highlighted when an anchor element was selected.
-	Fixed bug where the selected contents where removed if a new anchor element was added.
-	Fixed bug where splitbuttons where rendered one pixel down in the default theme.
-	Fixed bug where some buttons where placed at incorrect positions in the o2k7 theme.
-	Fixed bug that made it impossible to visually disable a custom button that used an image instead of CSS sprites.
-	Fixed bug where it wasn't possible to press delete/backspace if the editor was added+removed and re-added due to a FF bug.
-	Fixed bug where an entities option with only 38,amp,60,lt,62,gt would fail in IE.
-	Fixed bug where innerHTML sometimes generated unknown runtime error on IE.
-	Fixed bug where content_css files wasn't loaded in the template preview iframe.
-	Fixed bug where scroll position was incorrect when toggling fullscreen mode.
-	Fixed bug where restoration of overflow didn't work correctly when disabling fullscreen mode in Opera.
-	Fixed bug where drop menus where places at incorrect locations if the editor was placed in a scrollable container element.
-	Fixed bug where hideMenu didn't hide sub menus correctly. It will now hide all menus recursively.
-	Fixed so theme_advanced_path_location can be used in init options for compatibility reasons.
-	Fixed so the drop menu colors matches the rest of o2k7 theme.
-	Fixed so the preview example.html file is updated to the new 3.x API.
-	Fixed so the margins are the same by default inside the editable area between IE and other browsers.
-	Fixed so editor contents gets stored before it the onSubmit event is fired.
-Version 3.0rc1 (2008-01-08)
-	Added new classes for toolbar rows in advanced theme mceToolbarRow1..n enabled you to change appearance of individual rows.
-	Added auto detection for the strict_loading_mode option when running in application/xhtml+xml mode on Gecko.
-	Optimized the HTML serializer by bundling some post process methods together.
-	Fixed so that the toolbars have unique IDs, enables you to alter the toolbars using the ControlManager and the DOM.
-	Fixed bug where delta values for dialog sizes in language packs didn't work correctly due to missing string to number casting.
-	Fixed bug where paragraph generation logic didn't handle hr or table elements correctly if they where the only element.
-	Fixed bug where some elements got extra linebreaks added after or before it in HTML output.
-	Fixed bug where it was hard to modify existing style data on table rows and table cells.
-	Fixed bug where the dom.getRect method didn't handle non pixel values correctly.
-	Fixed bug where strikethrough and underline couldn't be toggled on existing span elements.
-	Fixed bug where the postprocessor searched for nsbp instead of nbsp entities.
-	Fixed bug where it was impossible to edit links that had child elements within them.
-	Fixed bug where it was possible to click on the parent item of a submenu.
-	Fixed bug where mouseover/mouseout images couldn't be removed in advimage dialog.
-	Fixed bug where drop menus didn't work when running in application/xhtml+xml mode.
-	Fixed bug where Opera added doctype to output in application/xhtml+xml mode.
-	Fixed bug where some DOM methods didn't work correctly in the application/xhtml+xml mode.
-	Fixed bug where the inlinepopups didn't work correctly in the application/xhtml+xml mode.
-	Fixed bug where the ColorSplitButton didn't display correctly in the application/xhtml+xml mode.
-	Fixed bug where the UI layout was incorrect on Gecko browsers when running in application/xhtml+xml mode.
-	Fixed bug where the word paste plugin produced exception while running in application/xhtml+xml mode.
-	Fixed bug where there wasn't any hidden input element generated for divs while running in application/xhtml+xml mode.
-	Fixed bug where indentation of script/style/pre elements where incorrect.
-	Fixed bug where script element contents was removed in IE.
-	Fixed bug where script element contents got entity encoded.
-	Fixed bug where you couldn't edit existing element styles using the styles plugin.
-	Fixed bug where styles wasn't updated properly sometimes due to an performance enhancement.
-	Fixed bug where font sizes couldn't be changed using the style plugin.
-	Fixed bug where an error was produced in Gecko browsers when switching back from fullscreen mode.
-	Fixed bug where Opera was producing br elements after elements like h3.
-	Fixed bug where TinyMCE couldn't be loaded on a page using - characters in it's URL.
-	Fixed bug where the editor container element was forced to have a specific name.
-	Fixed bug with force_br_newlines option on Firefox, even though it should never be used (Read FAQ).
-	Fixed bug where onclick event had an return true; prefix added when creating an popup.
-	Fixed bug where the theme_advanced_statusbar_location option couldn't handle the value "none".
-	Fixed issue with URLs with multiple at characters for example an Zope URI.
-	Fixed so simple and advanced themes doesn't collide.
-	Fixed so a elements gets removed when the href field is left empty, the href attribute is required in a link after all.
-	Fixed so img elements gets removed when the src field is left empty, the src attribute is required for all images after all.
-	Removed the indent and encode methods from the tinymce.dom.Serializer class due to performance enhancement and reduction of the API size.
-Version 3.0b3 (2007-12-14)
-	Added new getElement method to Editor class, returns the element that was replaced with the editor instance.
-	Added new unavailable prefix for disabled controls for accessibility reasons.
-	Fixed bug where regexp patterns couldn't be used for the editor_selector/editor_deselector options.
-	Fixed bug where the DOM wasn't properly initialized before the onInit event was executed in popups.
-	Fixed bug where font sizes where reduced by font size actions on previous spans in Safari.
-	Fixed bug where HR elements got places at the wrong location in IE.
-	Fixed bug where align/justify didn't work correctly on multiple paragraphs.
-	Fixed bug with missing translation for cell scope settings.
-	Fixed bug where selection/caret position was lost on some table actions.
-	Fixed bug where editor instances couldn't be added to hidden div elements.
-	Fixed bug where list elements in Safari would get an odd ID attribute.
-	Fixed bug where IE would return <html/> when the editor was completely empty.
-	Fixed bug where accessibility title attribute for access keys wasn't setup properly.
-	Fixed bug where forecolorpicker and backcolorpicker control names wasn't working.
-	Fixed bug where inserting template content didn't work in Safari due to selection exception.
-	Fixed bug where absolute URLs to remote hosts couldn't be used for background images.
-	Fixed bug where mysterious span elements where produced in Safari when injecting HTML contents.
-	Fixed bug where the media plugin didn't work correctly on the latest Opera 9.24.
-	Fixed bug where indentation of HTML output wasn't applied to all block elements.
-	Fixed bug where Safari was production DOM exception if you pressed enter in an empty editor.
-	Fixed bug where media plugin didn't parse script tags correctly patch contributed by Mathieu Campagna.
-	Fixed bug where the drop menus of list boxes like blockformat could produce scrolling of the page.
-	Fixed bug where the drop menus where placed at an incorrect location if TinyMCE was placed in a scrollable div.
-	Fixed bug where submit buttons couldn't be named submit, it's not recommended to name submit buttons submit anyway.
-	Fixed bug where the stylelistbox produced an exception if there was only one class in the list box.
-	Fixed bug where the stylelistbox wasn't updated correctly when the current class was removed.
-	Fixed bug where the formatblock command sometimes removed the body element.
-	Fixed bug where fullscreen switching in IE sometimes produced an exception when the spellchecker plugin was enabled.
-	Fixed issue where FF produced an empty paragraph when the editor was completely empty.
-	Fixed issue with size of image dialog in the advanced theme.
-	Fixed issues with the bbcode plugin it now also handles spans and the [font] rule.
-	Fixed so the style compression feature is a bit smarter to resolve issues with Opera.
-	Reintroduced the remove_linebreaks option, this is enabled by default.
-Version 3.0b2 (2007-11-29)
-	Added type and compact attributes to the default valid_elements list for the ul and ol elements.
-	Added missing accessibility support to native list boxes in both the toolbar and dialogs.
-	Added missing access key for the element path for accessibility reasons.
-	Fixed support for loading themes from external URLs.
-	Fixed bug where setOuterHTML didn't work correctly when multiple elements where passed to it.
-	Fixed bug with visualchars plugin was moving elements around in the DOM.
-	Fixed bug with DIV elements that got converted into editors on IE.
-	Fixed bug with paste plugin using the old event API.
-	Fixed bug where the spellchecker was removing the word when it was ignored.
-	Fixed bug where fullscreen wasn't working properly.
-	Fixed bug where the base href element and attribute was ignored.
-	Fixed bug where redo function didn't work in IE.
-	Fixed bug where content_css didn't work as previous 2.x branch.
-	Fixed bug where preview dialog was throwing errors if the content_css wasn't defined.
-	Fixed bug where the theme_advanced_path option didn't work like the 2.x branch.
-	Fixed bug where the theme_advanced_statusbar_location was called theme_advanced_status_location.
-	Fixed bug where the strict_loading_mode option didn't work if you created editors dynamically without using the EditorManager.
-	Fixed bug where some language values wasn't translated such as insert and update in dialogs.
-	Fixed bug where some image attributes wasn't stored correctly when inserting an image.
-	Fixed bug where fullscreen mode didn't restore scrollbars when disabled.
-	Fixed bug where there was no visual representation for tab focus in toolbars on IE.
-	Fixed bug where HR elements wasn't treated as block elements so forced_root_block would fail on these.
-	Fixed bug where autosave presented warning message even when the form was submitted normally.
-	Fixed typo of openBrower it's now openBrowser in form_utils.js.
-	Fixed various HTML problems like missing TD elements and duplicated doctypes.
-	Fixed default values for theme_advanced_resize_horizontal, theme_advanced_resizing_use_cookie to be 2.x compatible.
-	Moved spellchecker JS files into the development package.
-	Removed support for theme_advanced_path_location since the theme_advanced_statusbar_location is the correct option name.
-Version 3.0b1 (2007-11-21)
-	Added new tab_focus option, that enables you to specify a element id or that the next element to be focused on tab key down.
-	Added new addQueryValueHandler method to the tinymce.Editor class.
-	Added new class_filter option, this enables you to specify a function that can filter out CSS classes for the styles list box.
-	Added support form [url=url]title[/url] to the bbcode plugin.
-	Renamed the addCommandQueryState method in the tinymce.Editor class to addQueryStateHandler.
-	Renamed loadQue to loadQueue, to correct spelling.
-	Removed the createDOM method from the window manager and replace it with a createInstance method.
-	Removed the add to beginning of class attribute parameter of the DOMUtils.addClass method.
-	Fixed bug with the forced_root_block option, didn't work correctly with multiple inline elements.
-	Fixed bug where image dialogs replaced the current image element with a new one even when it was updated.
-	Fixed bug where the submit trigger wasn't executed when divs where converted into editor instances.
-	Fixed bug where div elements that got converted into editors didn't get a hidden input element generated for them.
-	Fixed bug where the the media_use_script option for the media plugin wasn't working correctly.
-	Fixed bug where the font size and font family listboxes wasn't updated correctly on Safari.
-	Fixed bug where the height of the fieldset in default image dialog for the advanced theme was to small.
-	Fixed bug where the font sizes behaved incorrectly after a cleanup on Safari.
-	Fixed bug where formatblock didn't work correctly in Safari on some elements.
-	Fixed bug where template plugin didn't insert content correctly unless some options where specified.
-	Fixed bug where charmap on Safari produced scrollbars.
-	Fixed bug where there was white artifacts in some dialogs due to missing background color.
-	Fixed bug where port was added to all external URLs if the editor was loaded from a custom port.
-	Fixed bug where the context menus got duplicated on Safari 3.0.4 on Mac OS X.
-	Fixed bug where dialogs like paste from word was huge on Firefox.
-	Fixed bug with media plugin not working with windows media objects.
-	Fixed bug where a forever loop was created if multiple instances where submitted using form.submit.
-	Fixed bug with editing a table produce error in IE when inlinepopups where used.
-	Fixed bug where the style plugin generated ugly looking style information in IE.
-	Fixed bug where the inline dialogs that got opened while in fullscreen mode wasn't visible.
-	Fixed bug where it was difficult to place the caret inside the word paste dialog.
-	Fixed bug where Opera produced strange border in the word paste dialog.
-	Fixed bug where viewport constraints could move a inlinepopup to a negative x, y position if the viewport was to small.
-	Fixed bug where template plugin was producing an error due to a deprecated API call.
-	Fixed bug where drag drop of images failed in Gecko if a document_base_url was specified.
-	Fixed bug where Firefox 3 failed to apply block formats like H1-H6 it still breaks on DIVs this has been reported to bugzilla.
-	Fixed bug where IE was producing a warning dialog about non secure items when running TinyMCE over HTTPS.
-	Fixed bug where the onbeforeunload event was triggered when menus or dialogs where opened.
-	Fixed bug where the fullscreen mode of the HTML view source box threw an error.
-	Fixed bug where the mceFocus command didn't work correctly.
-	Fixed bug where the selection could get lost in IE using inlinepopups.
-	Fixed so the body of the editor area has the mceContentBody class just like the 2.x branch. 
-	Fixed so the media icon gets active when a media element is selected.
-Version 3.0a3 (2007-11-13)
-	Added new experimental jQuery and Prototype framework adapters to the development package.
-	Added new translation.html file for the development package. Helps with the internationalization of TinyMCE.
-	Added new setup callback option, use this callback to add events to TinyMCE. This method is recommended over the old callbacks.
-	Added new API documetation to all classes, functions, events, properties to the Wiki with examples etc.
-	Added new init method to all plugins and themes, since it's shorter to write and it mimics interface capable languages better.
-	Fixed various CSS issues in the default skin such as alignment of split buttons and separators.
-	Fixed issues with mod_security. It didn't like that a content type of text/javascript was forced in a XHR.
-	Fixed all events so that they now pass the sender object as it's first argument.
-	Fixed some DOM methods so they now can take an array as input.
-	Fixed so addButton and the methods of the ControlManager uses less arguments and it now uses a settings object instead.
-	Fixed various issues with the tinymce.util.URI class.
-	Fixed bug in IE and Safari and the on demand gzip loading feature.
-	Fixed bug with moving inline windows sometimes failed in IE6.
-	Fixed bug where save_callback function wasn't executed at all.
-	Fixed bug where inlinepopups produces scrollbars if windows where moved to the corners of the browser.
-	Fixed bug where view HTML source failed when inserting a embedded media object.
-	Fixed bug where the listbox menus didn't display correctly on IE6.
-	Fixed bug where undo level wasn't added when editor was blurred.
-	Fixed bug where spellchecker wasn't disabled when fullscreen mode was enabled.
-	Fixed bug where Firefox could crash some times when the user switched to fullscreen mode.
-	Fixed bug where tinymce.ui.DropMenu didn't remove all item data when an item was removed from the menu.
-	Fixed bug where anchor list in advlink dialog wasn't populated correctly in Safari.
-	Fixed bug where it wasn't possible to edit tables in IE when inlinepopups was enabled.
-	Fixed bug where it wasn't possible to change the table width of an existing table.
-	Fixed bug where xhtmlxtras like abbr didn't work correctly on IE.
-	Fixed bug where IE6 had some graphics rendering issues with the inlinepopups.
-	Fixed bug where inlinepopup windows where moved incorrectly when they were boundary checked for min width.
-	Fixed bug where textareas without id or name couldn't be converted into editor instances.
-	Fixed bug where TinyMCE was stealing element focus on IE.
-	Fixed bug where the getParam method didn't handle false values correctly.
-	Fixed bug where inlinepopups was clipped by other TinyMCE instances or relative elements in IE.
-	Fixed bug where the contextmenu was clipped by other TinyMCE instances or relative elements in IE.
-	Fixed bug where listbox menus was clipped by other TinyMCE instances or relative elements in IE.
-	Fixed bug where listboxes wasn't updated correctly when the a value wasn't found by select.
-	Fixed various CSS issues that produced odd rendering bugs in IE.
-	Fixed issues with tinymce.ui.DropMenu class, it required some optional settings to be specified.
-	Fixed so multiple blockquotes can be removed with a easier method than before.
-	Optimized some of the core API to boost performance.
-	Removed some functions from the core API that wasn't needed.
-Version 3.0a2 (2007-11-02)
-	Fixed critical bug where IE generaded an error on a hasAttribute call in the serialization engine.
-	Fixed critical bug where some dialogs didn't open in the non dev package.
-	Fixed bug when using the theme_advanced_styles option. Error was thrown in some dialogs.
-	Fixed bug where the close buttons produced an error when native windows where used.
-	Fixed bug in default skin so that split buttons gets activated correctly.
-	Fixed so plugins can be loaded from external urls outsite the plugins directory.
-Version 3.0a1 (2007-11-01)
-	Rewrote the core and most of the plugins and themes from scratch.
-	Added new and improved serialization engine, faster and more powerful.
-	Added new internal event system, things like editor.onClick.add(func).
-	Added new inlinepopups plugin, the dialogs are now skinnable and uses clearlooks2 as default.
-	Added new contextmenu plugin, context menus can now have submenus and plugins can add items on the fly.
-	Added new skin support for the simple and advanced themes you can alter the whole UI using CSS.
-	Added new o2k7 skin for the simple and advanced themes.
-	Added new custom list boxes for font size/format/style etc with preview support.
-	Added new UI management, enabled plugins to create controls like splitbuttons or menus easier.
-	Added new JSON parser/serializer and JSON-RPC class to the core API.
-	Added new cookie utility class to the core API.
-	Added new Unit testing class to the core API only available in dev mode.
-	Added new firebug lite integration when loading the dev version of TinyMCE.
-	Added new Safari plugin, fixes lots compatibility of issues with Safari 3.x.
-	Added new URI/URL parsing it now handles the hole RFC and even some exceptions.
-	Added new pagebreak plugin, enables you to insert pagebreak comments like <!-- pagebreak -->
-	Added new on demand loading of plugins and themes. Enables you to load and init TinyMCE at any time.
-	Added new throbber/progress visualization a plugin can show/hide this when it's needed.
-	Added new blockquote button. Enables you to wrap paragraphs in blockquotes.
-	Added new compat2x plugin. Will provide a TinyMCE 2.x API for older plugins.
-	Added new theme_advanced_resizing_min_width, theme_advanced_resizing_min_height options.
-	Added new theme_advanced_resizing_max_height, theme_advanced_resizing_max_height options.
-	Added new use_native_selects option. Enables you to toggle native listboxes on and off.
-	Added new docs_url option enables you to specify where the TinyMCE user documentation is located.
-	Added new frame and rules options for the table dialog.
-	Added new global rule for valid_elements/extended_valid_elements enables you to specify global attributes for all elements.
-	Added new deny attribute rule characher so it's possible to deny global attribute rules on specific elements.
-	Added new unit tests in the dev package of TinyMCE. Runs tests on the core API, commands and settings of the editor.
-	Readded the inline_styles option and enabled it by default so deprecated attributes are no longer used.
-	Removed all button images and replaced them with CSS sprite images. Reduces the number of requests needed.
-	Removed lots of language files and merged them into the base language files. Reduces the number of requests needed.
-	Removed lots of unnecessary files and merged many of them together to reduce requests and improve loading speed.
-	Reduced the over all script size by 33% and the number of files/requests by 75% so it loads a lot faster.
-	Fixed so convert_fonts_to_spans are enabled by default. So no more font tags.
-	Fixed so underline and strikethrough uses spans instread of deprecated U and STRIKE elements.
-	Fixed so indent/outdent adds/removed margin-left instead of blockquotes.
-	Fixed so alignment of paragraphs results in a text-align style value instead of the deprecated align attribute.
-	Fixed so alignment of images uses float or vertical-align style values instead of the deprecated align attribute.
-	Fixed so all classes from @import stylesheets gets imported into the editor.
-	Fixed so the directionality can toggle the dir attribute on and off.
-	Fixed so the fullscreen_settings can be used for all types of fullscreen modes.
-	Fixed so the advanced HR dialog gets displayed when inserting a HR not only on edit.
-	Fixed bug where word wrap didn't work in the source editor on Safari.
-	Fixed so non HTML elements can be used within the editor such as <myns:tag>
-	Fixed various memory leaks in IE and reduced the unload cleanups needed.
-	Fixed so the preformatted option adds an invisible container pre tag inside the editor.
-	Renamed the _template plugin to example and updated it to use the new 3.x API.
 

file:a/tinymce/index.php (deleted)
--- a/tinymce/index.php
+++ /dev/null

file:a/tinymce/init.php (deleted)
--- a/tinymce/init.php
+++ /dev/null
@@ -1,49 +1,1 @@
-<?php
 
-echo "
-<script language=\"javascript\" type=\"text/javascript\"><!--";
-		$tinymessage = dbquery("SELECT message_text FROM " . TABLEPREFIX . "fanfiction_messages WHERE message_name = 'tinyMCE' LIMIT 1");
-		list($tinysettings) = dbrow($tinymessage);
-		if (!empty($tinysettings) && $current != "adminarea")
-		{
-			echo $tinysettings;
-		}
-		else
-		{
-			echo "
-	tinyMCE.init({ 
-		theme: 'advanced',
-		height: '250',
-		language: '$language',
-		convert_urls: 'false',
-		mode: 'textareas',
-		extended_valid_elements: 'a[name|href|target|title]',
-		plugins: 'advhr,advimage,advlink,searchreplace,contextmenu,preview,fullscreen,paste" . ($current == "adminarea" ? ",codeprotect" : "") . "',
-		theme_advanced_buttons1_add: 'fontsizeselect',
-		theme_advanced_buttons2_add: 'separator,pasteword,pastetext',
-		theme_advanced_buttons3_add_before: 'tablecontrols,separator',
-		theme_advanced_buttons3_add: 'advhr',
-		theme_advanced_toolbar_align: 'center',
-		theme_advanced_statusbar_location: 'bottom',
-		theme_advanced_path: 'false',
-		editor_deselector: 'mceNoEditor',
-";
-			if (USERUID)
-				echo "		external_image_list_url : '" . STORIESPATH . "/" . USERUID . "/images/imagelist.js',";
-			echo "
-		theme_advanced_resizing: true," . ($current == "adminarea" ? "\n\t\tentity_encoding: 'raw'" : "\n\t\tinvalid_elements: 'script,object,applet,iframe'") . "
-   });
-";
-		}
-		echo "
-var tinyMCEmode = true;
-	function toogleEditorMode(id) {
-		var elm = document.getElementById(id);
-
-		if (tinyMCE.getInstanceById(id) == null)
-			tinyMCE.execCommand('mceAddControl', false, id);
-		else
-			tinyMCE.execCommand('mceRemoveControl', false, id);
-	}
-";
-		echo " --></script>";

--- a/tinymce/jscripts/index.php
+++ /dev/null

--- a/tinymce/jscripts/tiny_mce/blank.htm
+++ /dev/null
@@ -1,10 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-	<title>blank_page</title>
-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body class="mceContentBody">
 
-</body>
-</html>
-

--- a/tinymce/jscripts/tiny_mce/index.htm
+++ /dev/null
@@ -1,11 +1,1 @@
-<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
-<html>
-<head>
-<title>blank_page</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body>
 
-</body>
-</html>
-

--- a/tinymce/jscripts/tiny_mce/index.php
+++ /dev/null

--- a/tinymce/jscripts/tiny_mce/langs/en.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n({en:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","popup_blocked":"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Emotions"},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode_stick":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"warning_message":"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}});
+

--- a/tinymce/jscripts/tiny_mce/license.txt
+++ /dev/null
@@ -1,505 +1,1 @@
-		  GNU LESSER GENERAL PUBLIC LICENSE

-		       Version 2.1, February 1999

-

- Copyright (C) 1991, 1999 Free Software Foundation, Inc.

- 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

- Everyone is permitted to copy and distribute verbatim copies

- of this license document, but changing it is not allowed.

-

-[This is the first released version of the Lesser GPL.  It also counts

- as the successor of the GNU Library Public License, version 2, hence

- the version number 2.1.]

-

-			    Preamble

-

-  The licenses for most software are designed to take away your

-freedom to share and change it.  By contrast, the GNU General Public

-Licenses are intended to guarantee your freedom to share and change

-free software--to make sure the software is free for all its users.

-

-  This license, the Lesser General Public License, applies to some

-specially designated software packages--typically libraries--of the

-Free Software Foundation and other authors who decide to use it.  You

-can use it too, but we suggest you first think carefully about whether

-this license or the ordinary General Public License is the better

-strategy to use in any particular case, based on the explanations below.

-

-  When we speak of free software, we are referring to freedom of use,

-not price.  Our General Public Licenses are designed to make sure that

-you have the freedom to distribute copies of free software (and charge

-for this service if you wish); that you receive source code or can get

-it if you want it; that you can change the software and use pieces of

-it in new free programs; and that you are informed that you can do

-these things.

-

-  To protect your rights, we need to make restrictions that forbid

-distributors to deny you these rights or to ask you to surrender these

-rights.  These restrictions translate to certain responsibilities for

-you if you distribute copies of the library or if you modify it.

-

-  For example, if you distribute copies of the library, whether gratis

-or for a fee, you must give the recipients all the rights that we gave

-you.  You must make sure that they, too, receive or can get the source

-code.  If you link other code with the library, you must provide

-complete object files to the recipients, so that they can relink them

-with the library after making changes to the library and recompiling

-it.  And you must show them these terms so they know their rights.

-

-  We protect your rights with a two-step method: (1) we copyright the

-library, and (2) we offer you this license, which gives you legal

-permission to copy, distribute and/or modify the library.

-

-  To protect each distributor, we want to make it very clear that

-there is no warranty for the free library.  Also, if the library is

-modified by someone else and passed on, the recipients should know

-that what they have is not the original version, so that the original

-author's reputation will not be affected by problems that might be

-introduced by others.

-

-  Finally, software patents pose a constant threat to the existence of

-any free program.  We wish to make sure that a company cannot

-effectively restrict the users of a free program by obtaining a

-restrictive license from a patent holder.  Therefore, we insist that

-any patent license obtained for a version of the library must be

-consistent with the full freedom of use specified in this license.

-

-  Most GNU software, including some libraries, is covered by the

-ordinary GNU General Public License.  This license, the GNU Lesser

-General Public License, applies to certain designated libraries, and

-is quite different from the ordinary General Public License.  We use

-this license for certain libraries in order to permit linking those

-libraries into non-free programs.

-

-  When a program is linked with a library, whether statically or using

-a shared library, the combination of the two is legally speaking a

-combined work, a derivative of the original library.  The ordinary

-General Public License therefore permits such linking only if the

-entire combination fits its criteria of freedom.  The Lesser General

-Public License permits more lax criteria for linking other code with

-the library.

-

-  We call this license the "Lesser" General Public License because it

-does Less to protect the user's freedom than the ordinary General

-Public License.  It also provides other free software developers Less

-of an advantage over competing non-free programs.  These disadvantages

-are the reason we use the ordinary General Public License for many

-libraries.  However, the Lesser license provides advantages in certain

-special circumstances.

-

-  For example, on rare occasions, there may be a special need to

-encourage the widest possible use of a certain library, so that it becomes

-a de-facto standard.  To achieve this, non-free programs must be

-allowed to use the library.  A more frequent case is that a free

-library does the same job as widely used non-free libraries.  In this

-case, there is little to gain by limiting the free library to free

-software only, so we use the Lesser General Public License.

-

-  In other cases, permission to use a particular library in non-free

-programs enables a greater number of people to use a large body of

-free software.  For example, permission to use the GNU C Library in

-non-free programs enables many more people to use the whole GNU

-operating system, as well as its variant, the GNU/Linux operating

-system.

-

-  Although the Lesser General Public License is Less protective of the

-users' freedom, it does ensure that the user of a program that is

-linked with the Library has the freedom and the wherewithal to run

-that program using a modified version of the Library.

-

-  The precise terms and conditions for copying, distribution and

-modification follow.  Pay close attention to the difference between a

-"work based on the library" and a "work that uses the library".  The

-former contains code derived from the library, whereas the latter must

-be combined with the library in order to run.

-

-		  GNU LESSER GENERAL PUBLIC LICENSE

-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

-

-  0. This License Agreement applies to any software library or other

-program which contains a notice placed by the copyright holder or

-other authorized party saying it may be distributed under the terms of

-this Lesser General Public License (also called "this License").

-Each licensee is addressed as "you".

-

-  A "library" means a collection of software functions and/or data

-prepared so as to be conveniently linked with application programs

-(which use some of those functions and data) to form executables.

-

-  The "Library", below, refers to any such software library or work

-which has been distributed under these terms.  A "work based on the

-Library" means either the Library or any derivative work under

-copyright law: that is to say, a work containing the Library or a

-portion of it, either verbatim or with modifications and/or translated

-straightforwardly into another language.  (Hereinafter, translation is

-included without limitation in the term "modification".)

-

-  "Source code" for a work means the preferred form of the work for

-making modifications to it.  For a library, complete source code means

-all the source code for all modules it contains, plus any associated

-interface definition files, plus the scripts used to control compilation

-and installation of the library.

-

-  Activities other than copying, distribution and modification are not

-covered by this License; they are outside its scope.  The act of

-running a program using the Library is not restricted, and output from

-such a program is covered only if its contents constitute a work based

-on the Library (independent of the use of the Library in a tool for

-writing it).  Whether that is true depends on what the Library does

-and what the program that uses the Library does.

-  

-  1. You may copy and distribute verbatim copies of the Library's

-complete source code as you receive it, in any medium, provided that

-you conspicuously and appropriately publish on each copy an

-appropriate copyright notice and disclaimer of warranty; keep intact

-all the notices that refer to this License and to the absence of any

-warranty; and distribute a copy of this License along with the

-Library.

-

-  You may charge a fee for the physical act of transferring a copy,

-and you may at your option offer warranty protection in exchange for a

-fee.

-

-  2. You may modify your copy or copies of the Library or any portion

-of it, thus forming a work based on the Library, and copy and

-distribute such modifications or work under the terms of Section 1

-above, provided that you also meet all of these conditions:

-

-    a) The modified work must itself be a software library.

-

-    b) You must cause the files modified to carry prominent notices

-    stating that you changed the files and the date of any change.

-

-    c) You must cause the whole of the work to be licensed at no

-    charge to all third parties under the terms of this License.

-

-    d) If a facility in the modified Library refers to a function or a

-    table of data to be supplied by an application program that uses

-    the facility, other than as an argument passed when the facility

-    is invoked, then you must make a good faith effort to ensure that,

-    in the event an application does not supply such function or

-    table, the facility still operates, and performs whatever part of

-    its purpose remains meaningful.

-

-    (For example, a function in a library to compute square roots has

-    a purpose that is entirely well-defined independent of the

-    application.  Therefore, Subsection 2d requires that any

-    application-supplied function or table used by this function must

-    be optional: if the application does not supply it, the square

-    root function must still compute square roots.)

-

-These requirements apply to the modified work as a whole.  If

-identifiable sections of that work are not derived from the Library,

-and can be reasonably considered independent and separate works in

-themselves, then this License, and its terms, do not apply to those

-sections when you distribute them as separate works.  But when you

-distribute the same sections as part of a whole which is a work based

-on the Library, the distribution of the whole must be on the terms of

-this License, whose permissions for other licensees extend to the

-entire whole, and thus to each and every part regardless of who wrote

-it.

-

-Thus, it is not the intent of this section to claim rights or contest

-your rights to work written entirely by you; rather, the intent is to

-exercise the right to control the distribution of derivative or

-collective works based on the Library.

-

-In addition, mere aggregation of another work not based on the Library

-with the Library (or with a work based on the Library) on a volume of

-a storage or distribution medium does not bring the other work under

-the scope of this License.

-

-  3. You may opt to apply the terms of the ordinary GNU General Public

-License instead of this License to a given copy of the Library.  To do

-this, you must alter all the notices that refer to this License, so

-that they refer to the ordinary GNU General Public License, version 2,

-instead of to this License.  (If a newer version than version 2 of the

-ordinary GNU General Public License has appeared, then you can specify

-that version instead if you wish.)  Do not make any other change in

-these notices.

-

-  Once this change is made in a given copy, it is irreversible for

-that copy, so the ordinary GNU General Public License applies to all

-subsequent copies and derivative works made from that copy.

-

-  This option is useful when you wish to copy part of the code of

-the Library into a program that is not a library.

-

-  4. You may copy and distribute the Library (or a portion or

-derivative of it, under Section 2) in object code or executable form

-under the terms of Sections 1 and 2 above provided that you accompany

-it with the complete corresponding machine-readable source code, which

-must be distributed under the terms of Sections 1 and 2 above on a

-medium customarily used for software interchange.

-

-  If distribution of object code is made by offering access to copy

-from a designated place, then offering equivalent access to copy the

-source code from the same place satisfies the requirement to

-distribute the source code, even though third parties are not

-compelled to copy the source along with the object code.

-

-  5. A program that contains no derivative of any portion of the

-Library, but is designed to work with the Library by being compiled or

-linked with it, is called a "work that uses the Library".  Such a

-work, in isolation, is not a derivative work of the Library, and

-therefore falls outside the scope of this License.

-

-  However, linking a "work that uses the Library" with the Library

-creates an executable that is a derivative of the Library (because it

-contains portions of the Library), rather than a "work that uses the

-library".  The executable is therefore covered by this License.

-Section 6 states terms for distribution of such executables.

-

-  When a "work that uses the Library" uses material from a header file

-that is part of the Library, the object code for the work may be a

-derivative work of the Library even though the source code is not.

-Whether this is true is especially significant if the work can be

-linked without the Library, or if the work is itself a library.  The

-threshold for this to be true is not precisely defined by law.

-

-  If such an object file uses only numerical parameters, data

-structure layouts and accessors, and small macros and small inline

-functions (ten lines or less in length), then the use of the object

-file is unrestricted, regardless of whether it is legally a derivative

-work.  (Executables containing this object code plus portions of the

-Library will still fall under Section 6.)

-

-  Otherwise, if the work is a derivative of the Library, you may

-distribute the object code for the work under the terms of Section 6.

-Any executables containing that work also fall under Section 6,

-whether or not they are linked directly with the Library itself.

-

-  6. As an exception to the Sections above, you may also combine or

-link a "work that uses the Library" with the Library to produce a

-work containing portions of the Library, and distribute that work

-under terms of your choice, provided that the terms permit

-modification of the work for the customer's own use and reverse

-engineering for debugging such modifications.

-

-  You must give prominent notice with each copy of the work that the

-Library is used in it and that the Library and its use are covered by

-this License.  You must supply a copy of this License.  If the work

-during execution displays copyright notices, you must include the

-copyright notice for the Library among them, as well as a reference

-directing the user to the copy of this License.  Also, you must do one

-of these things:

-

-    a) Accompany the work with the complete corresponding

-    machine-readable source code for the Library including whatever

-    changes were used in the work (which must be distributed under

-    Sections 1 and 2 above); and, if the work is an executable linked

-    with the Library, with the complete machine-readable "work that

-    uses the Library", as object code and/or source code, so that the

-    user can modify the Library and then relink to produce a modified

-    executable containing the modified Library.  (It is understood

-    that the user who changes the contents of definitions files in the

-    Library will not necessarily be able to recompile the application

-    to use the modified definitions.)

-

-    b) Use a suitable shared library mechanism for linking with the

-    Library.  A suitable mechanism is one that (1) uses at run time a

-    copy of the library already present on the user's computer system,

-    rather than copying library functions into the executable, and (2)

-    will operate properly with a modified version of the library, if

-    the user installs one, as long as the modified version is

-    interface-compatible with the version that the work was made with.

-

-    c) Accompany the work with a written offer, valid for at

-    least three years, to give the same user the materials

-    specified in Subsection 6a, above, for a charge no more

-    than the cost of performing this distribution.

-

-    d) If distribution of the work is made by offering access to copy

-    from a designated place, offer equivalent access to copy the above

-    specified materials from the same place.

-

-    e) Verify that the user has already received a copy of these

-    materials or that you have already sent this user a copy.

-

-  For an executable, the required form of the "work that uses the

-Library" must include any data and utility programs needed for

-reproducing the executable from it.  However, as a special exception,

-the materials to be distributed need not include anything that is

-normally distributed (in either source or binary form) with the major

-components (compiler, kernel, and so on) of the operating system on

-which the executable runs, unless that component itself accompanies

-the executable.

-

-  It may happen that this requirement contradicts the license

-restrictions of other proprietary libraries that do not normally

-accompany the operating system.  Such a contradiction means you cannot

-use both them and the Library together in an executable that you

-distribute.

-

-  7. You may place library facilities that are a work based on the

-Library side-by-side in a single library together with other library

-facilities not covered by this License, and distribute such a combined

-library, provided that the separate distribution of the work based on

-the Library and of the other library facilities is otherwise

-permitted, and provided that you do these two things:

-

-    a) Accompany the combined library with a copy of the same work

-    based on the Library, uncombined with any other library

-    facilities.  This must be distributed under the terms of the

-    Sections above.

-

-    b) Give prominent notice with the combined library of the fact

-    that part of it is a work based on the Library, and explaining

-    where to find the accompanying uncombined form of the same work.

-

-  8. You may not copy, modify, sublicense, link with, or distribute

-the Library except as expressly provided under this License.  Any

-attempt otherwise to copy, modify, sublicense, link with, or

-distribute the Library is void, and will automatically terminate your

-rights under this License.  However, parties who have received copies,

-or rights, from you under this License will not have their licenses

-terminated so long as such parties remain in full compliance.

-

-  9. You are not required to accept this License, since you have not

-signed it.  However, nothing else grants you permission to modify or

-distribute the Library or its derivative works.  These actions are

-prohibited by law if you do not accept this License.  Therefore, by

-modifying or distributing the Library (or any work based on the

-Library), you indicate your acceptance of this License to do so, and

-all its terms and conditions for copying, distributing or modifying

-the Library or works based on it.

-

-  10. Each time you redistribute the Library (or any work based on the

-Library), the recipient automatically receives a license from the

-original licensor to copy, distribute, link with or modify the Library

-subject to these terms and conditions.  You may not impose any further

-restrictions on the recipients' exercise of the rights granted herein.

-You are not responsible for enforcing compliance by third parties with

-this License.

-

-  11. If, as a consequence of a court judgment or allegation of patent

-infringement or for any other reason (not limited to patent issues),

-conditions are imposed on you (whether by court order, agreement or

-otherwise) that contradict the conditions of this License, they do not

-excuse you from the conditions of this License.  If you cannot

-distribute so as to satisfy simultaneously your obligations under this

-License and any other pertinent obligations, then as a consequence you

-may not distribute the Library at all.  For example, if a patent

-license would not permit royalty-free redistribution of the Library by

-all those who receive copies directly or indirectly through you, then

-the only way you could satisfy both it and this License would be to

-refrain entirely from distribution of the Library.

-

-If any portion of this section is held invalid or unenforceable under any

-particular circumstance, the balance of the section is intended to apply,

-and the section as a whole is intended to apply in other circumstances.

-

-It is not the purpose of this section to induce you to infringe any

-patents or other property right claims or to contest validity of any

-such claims; this section has the sole purpose of protecting the

-integrity of the free software distribution system which is

-implemented by public license practices.  Many people have made

-generous contributions to the wide range of software distributed

-through that system in reliance on consistent application of that

-system; it is up to the author/donor to decide if he or she is willing

-to distribute software through any other system and a licensee cannot

-impose that choice.

-

-This section is intended to make thoroughly clear what is believed to

-be a consequence of the rest of this License.

-

-  12. If the distribution and/or use of the Library is restricted in

-certain countries either by patents or by copyrighted interfaces, the

-original copyright holder who places the Library under this License may add

-an explicit geographical distribution limitation excluding those countries,

-so that distribution is permitted only in or among countries not thus

-excluded.  In such case, this License incorporates the limitation as if

-written in the body of this License.

-

-  13. The Free Software Foundation may publish revised and/or new

-versions of the Lesser General Public License from time to time.

-Such new versions will be similar in spirit to the present version,

-but may differ in detail to address new problems or concerns.

-

-Each version is given a distinguishing version number.  If the Library

-specifies a version number of this License which applies to it and

-"any later version", you have the option of following the terms and

-conditions either of that version or of any later version published by

-the Free Software Foundation.  If the Library does not specify a

-license version number, you may choose any version ever published by

-the Free Software Foundation.

-

-  14. If you wish to incorporate parts of the Library into other free

-programs whose distribution conditions are incompatible with these,

-write to the author to ask for permission.  For software which is

-copyrighted by the Free Software Foundation, write to the Free

-Software Foundation; we sometimes make exceptions for this.  Our

-decision will be guided by the two goals of preserving the free status

-of all derivatives of our free software and of promoting the sharing

-and reuse of software generally.

-

-			    NO WARRANTY

-

-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO

-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.

-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR

-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY

-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE

-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE

-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME

-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

-

-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN

-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY

-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU

-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR

-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE

-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING

-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A

-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF

-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH

-DAMAGES.

-

-		     END OF TERMS AND CONDITIONS

-

-           How to Apply These Terms to Your New Libraries

-

-  If you develop a new library, and you want it to be of the greatest

-possible use to the public, we recommend making it free software that

-everyone can redistribute and change.  You can do so by permitting

-redistribution under these terms (or, alternatively, under the terms of the

-ordinary General Public License).

-

-  To apply these terms, attach the following notices to the library.  It is

-safest to attach them to the start of each source file to most effectively

-convey the exclusion of warranty; and each file should have at least the

-"copyright" line and a pointer to where the full notice is found.

-

-    <one line to give the library's name and a brief idea of what it does.>

-    Copyright (C) <year>  <name of author>

-

-    This library is free software; you can redistribute it and/or

-    modify it under the terms of the GNU Lesser General Public

-    License as published by the Free Software Foundation; either

-    version 2.1 of the License, or (at your option) any later version.

-

-    This library is distributed in the hope that it will be useful,

-    but WITHOUT ANY WARRANTY; without even the implied warranty of

-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

-    Lesser General Public License for more details.

-

-    You should have received a copy of the GNU Lesser General Public

-    License along with this library; if not, write to the Free Software

-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

-

-Also add information on how to contact you by electronic and paper mail.

-

-You should also get your employer (if you work as a programmer) or your

-school, if any, to sign a "copyright disclaimer" for the library, if

-necessary.  Here is a sample; alter the names:

-

-  Yoyodyne, Inc., hereby disclaims all copyright interest in the

-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

-

-  <signature of Ty Coon>, 1 April 1990

-  Ty Coon, President of Vice

-

-That's all there is to it!

-

-

 

--- a/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css
+++ /dev/null
@@ -1,6 +1,1 @@
-input.radio {border:1px none #000; background:transparent; vertical-align:middle;}

-.panel_wrapper div.current {height:80px;}

-#width {width:50px; vertical-align:middle;}

-#width2 {width:50px; vertical-align:middle;}

-#size {width:100px;}

 

--- a/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js
+++ /dev/null
@@ -1,57 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.AdvancedHRPlugin', {

-		init : function(ed, url) {

-			// Register commands

-			ed.addCommand('mceAdvancedHr', function() {

-				ed.windowManager.open({

-					file : url + '/rule.htm',

-					width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),

-					height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			// Register buttons

-			ed.addButton('advhr', {

-				title : 'advhr.advhr_desc',

-				cmd : 'mceAdvancedHr'

-			});

-

-			ed.onNodeChange.add(function(ed, cm, n) {

-				cm.setActive('advhr', n.nodeName == 'HR');

-			});

-

-			ed.onClick.add(function(ed, e) {

-				e = e.target;

-

-				if (e.nodeName === 'HR')

-					ed.selection.select(e);

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Advanced HR',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js
+++ /dev/null
@@ -1,44 +1,1 @@
-var AdvHRDialog = {

-	init : function(ed) {

-		var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;

-

-		w = dom.getAttrib(n, 'width');

-		f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');

-		f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';

-		f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');

-		selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');

-	},

-

-	update : function() {

-		var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';

-

-		h = '<hr';

-

-		if (f.size.value) {

-			h += ' size="' + f.size.value + '"';

-			st += ' height:' + f.size.value + 'px;';

-		}

-

-		if (f.width.value) {

-			h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';

-			st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';

-		}

-

-		if (f.noshade.checked) {

-			h += ' noshade="noshade"';

-			st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';

-		}

-

-		if (ed.settings.inline_styles)

-			h += ' style="' + tinymce.trim(st) + '"';

-

-		h += ' />';

-

-		ed.execCommand("mceInsertContent", false, h);

-		tinyMCEPopup.close();

-	}

-};

-

-tinyMCEPopup.requireLangPack();

-tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.advhr_dlg',{size:"Height",noshade:"No Shadow",width:"Width",normal:"Normal",widthunits:"Units"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm
+++ /dev/null
@@ -1,59 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advhr.advhr_desc}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/rule.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<link href="css/advhr.css" rel="stylesheet" type="text/css" />

-</head>

-<body role="application">

-<form onsubmit="AdvHRDialog.update();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-					<tr role="group" aria-labelledby="width_label">

-						<td><label id="width_label" for="width">{#advhr_dlg.width}</label></td>

-						<td class="nowrap">

-							<input id="width" name="width" type="text" value="" class="mceFocus" />

-							<span style="display:none;" id="width_unit_label">{#advhr_dlg.widthunits}</span>

-							<select name="width2" id="width2" aria-labelledby="width_unit_label">

-								<option value="">px</option>

-								<option value="%">%</option>

-							</select>

-						</td>

-					</tr>

-					<tr>

-						<td><label for="size">{#advhr_dlg.size}</label></td>

-						<td><select id="size" name="size">

-							<option value="">{#advhr_dlg.normal}</option>

-							<option value="1">1</option>

-							<option value="2">2</option>

-							<option value="3">3</option>

-							<option value="4">4</option>

-							<option value="5">5</option>

-						</select></td>

-					</tr>

-					<tr>

-						<td><label for="noshade">{#advhr_dlg.noshade}</label></td>

-						<td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>

-					</tr>

-			</table>

-		</div>

-	</div>

-

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#insert}" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css
+++ /dev/null
@@ -1,14 +1,1 @@
-#src_list, #over_list, #out_list {width:280px;}

-.mceActionPanel {margin-top:7px;}

-.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}

-.checkbox {border:0;}

-.panel_wrapper div.current {height:305px;}

-#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}

-#align, #classlist {width:150px;}

-#width, #height {vertical-align:middle; width:50px; text-align:center;}

-#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}

-#class_list {width:180px;}

-input {width: 280px;}

-#constrain, #onmousemovecheck {width:auto;}

-#id, #dir, #lang, #usemap, #longdesc {width:200px;}

 

--- a/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js
+++ /dev/null
@@ -1,50 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.AdvancedImagePlugin', {

-		init : function(ed, url) {

-			// Register commands

-			ed.addCommand('mceAdvImage', function() {

-				// Internal image object like a flash placeholder

-				if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1)

-					return;

-

-				ed.windowManager.open({

-					file : url + '/image.htm',

-					width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),

-					height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			// Register buttons

-			ed.addButton('image', {

-				title : 'advimage.image_desc',

-				cmd : 'mceAdvImage'

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Advanced image',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm
+++ /dev/null
@@ -1,236 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advimage_dlg.dialog_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/image.js"></script>

-	<link href="css/advimage.css" rel="stylesheet" type="text/css" />

-</head>

-<body id="advimage" style="display: none" role="application" aria-labelledby="app_title">

-	<span id="app_title" style="display:none">{#advimage_dlg.dialog_title}</span>

-	<form onsubmit="ImageDialog.insert();return false;" action="#"> 

-		<div class="tabs">

-			<ul>

-				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>

-				<li id="appearance_tab" aria-controls="appearance_panel"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>

-				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="general_panel" class="panel current">

-				<fieldset>

-						<legend>{#advimage_dlg.general}</legend>

-

-						<table role="presentation" class="properties">

-							<tr>

-								<td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>

-								<td colspan="2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr> 

-										<td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td> 

-										<td id="srcbrowsercontainer">&nbsp;</td>

-									</tr>

-								</table></td>

-							</tr>

-							<tr>

-								<td><label for="src_list">{#advimage_dlg.image_list}</label></td>

-								<td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>

-							</tr>

-							<tr> 

-								<td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td> 

-								<td colspan="2"><input id="alt" name="alt" type="text" value="" /></td> 

-							</tr> 

-							<tr> 

-								<td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td> 

-								<td colspan="2"><input id="title" name="title" type="text" value="" /></td> 

-							</tr>

-						</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#advimage_dlg.preview}</legend>

-					<div id="prev"></div>

-				</fieldset>

-			</div>

-

-			<div id="appearance_panel" class="panel">

-				<fieldset>

-					<legend>{#advimage_dlg.tab_appearance}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr> 

-							<td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td> 

-							<td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();"> 

-									<option value="">{#not_set}</option> 

-									<option value="baseline">{#advimage_dlg.align_baseline}</option>

-									<option value="top">{#advimage_dlg.align_top}</option>

-									<option value="middle">{#advimage_dlg.align_middle}</option>

-									<option value="bottom">{#advimage_dlg.align_bottom}</option>

-									<option value="text-top">{#advimage_dlg.align_texttop}</option>

-									<option value="text-bottom">{#advimage_dlg.align_textbottom}</option>

-									<option value="left">{#advimage_dlg.align_left}</option>

-									<option value="right">{#advimage_dlg.align_right}</option>

-								</select> 

-							</td>

-							<td rowspan="6" valign="top">

-								<div class="alignPreview">

-									<img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />

-									Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam

-									nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum

-									edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam

-									erat volutpat.

-								</div>

-							</td>

-						</tr>

-

-						<tr role="group" aria-labelledby="widthlabel">

-							<td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>

-							<td class="nowrap">

-								<span style="display:none" id="width_voiceLabel">{#advimage_dlg.width}</span>

-								<input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" aria-labelledby="width_voiceLabel" /> x 

-								<span style="display:none" id="height_voiceLabel">{#advimage_dlg.height}</span>

-								<input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" aria-labelledby="height_voiceLabel" /> px

-							</td>

-						</tr>

-

-						<tr>

-							<td>&nbsp;</td>

-							<td><table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>

-										<td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>

-									</tr>

-								</table></td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td> 

-							<td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" />

-							</td>

-						</tr>

-

-						<tr> 

-							<td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td> 

-							<td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td> 

-							<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td> 

-						</tr>

-

-						<tr>

-							<td><label for="class_list">{#class_name}</label></td>

-							<td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td> 

-							<td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td> 

-						</tr>

-

-						<!-- <tr>

-							<td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td> 

-							<td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td> 

-						</tr> -->

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="advanced_panel" class="panel">

-				<fieldset>

-					<legend>{#advimage_dlg.swap_image}</legend>

-

-					<input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" aria-controls="onmouseoversrc onmouseoutsrc" />

-					<label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">

-							<tr>

-								<td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td> 

-								<td><table role="presentation" border="0" cellspacing="0" cellpadding="0"> 

-									<tr> 

-										<td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td> 

-										<td id="onmouseoversrccontainer">&nbsp;</td>

-									</tr>

-								</table></td>

-							</tr>

-							<tr>

-								<td><label for="over_list">{#advimage_dlg.image_list}</label></td>

-								<td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>

-							</tr>

-							<tr> 

-								<td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td> 

-								<td class="column2"><table role="presentation" border="0" cellspacing="0" cellpadding="0"> 

-									<tr> 

-										<td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td> 

-										<td id="onmouseoutsrccontainer">&nbsp;</td>

-									</tr> 

-								</table></td> 

-							</tr>

-							<tr>

-								<td><label for="out_list">{#advimage_dlg.image_list}</label></td>

-								<td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>

-							</tr>

-					</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#advimage_dlg.misc}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td> 

-							<td><input id="id" name="id" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td> 

-							<td>

-								<select id="dir" name="dir" onchange="ImageDialog.changeAppearance();"> 

-										<option value="">{#not_set}</option> 

-										<option value="ltr">{#advimage_dlg.ltr}</option> 

-										<option value="rtl">{#advimage_dlg.rtl}</option> 

-								</select>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td> 

-							<td>

-								<input id="lang" name="lang" type="text" value="" />

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td> 

-							<td>

-								<input id="usemap" name="usemap" type="text" value="" />

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>

-							<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input id="longdesc" name="longdesc" type="text" value="" /></td>

-										<td id="longdesccontainer">&nbsp;</td>

-									</tr>

-							</table></td> 

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<input type="submit" id="insert" name="insert" value="{#insert}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body> 

-</html> 

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js
+++ /dev/null
@@ -1,463 +1,1 @@
-var ImageDialog = {

-	preInit : function() {

-		var url;

-

-		tinyMCEPopup.requireLangPack();

-

-		if (url = tinyMCEPopup.getParam("external_image_list_url"))

-			document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

-	},

-

-	init : function(ed) {

-		var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList');

-

-		tinyMCEPopup.resizeToInnerSize();

-		this.fillClassList('class_list');

-		this.fillFileList('src_list', fl);

-		this.fillFileList('over_list', fl);

-		this.fillFileList('out_list', fl);

-		TinyMCE_EditableSelects.init();

-

-		if (n.nodeName == 'IMG') {

-			nl.src.value = dom.getAttrib(n, 'src');

-			nl.width.value = dom.getAttrib(n, 'width');

-			nl.height.value = dom.getAttrib(n, 'height');

-			nl.alt.value = dom.getAttrib(n, 'alt');

-			nl.title.value = dom.getAttrib(n, 'title');

-			nl.vspace.value = this.getAttrib(n, 'vspace');

-			nl.hspace.value = this.getAttrib(n, 'hspace');

-			nl.border.value = this.getAttrib(n, 'border');

-			selectByValue(f, 'align', this.getAttrib(n, 'align'));

-			selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);

-			nl.style.value = dom.getAttrib(n, 'style');

-			nl.id.value = dom.getAttrib(n, 'id');

-			nl.dir.value = dom.getAttrib(n, 'dir');

-			nl.lang.value = dom.getAttrib(n, 'lang');

-			nl.usemap.value = dom.getAttrib(n, 'usemap');

-			nl.longdesc.value = dom.getAttrib(n, 'longdesc');

-			nl.insert.value = ed.getLang('update');

-

-			if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))

-				nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');

-

-			if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))

-				nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');

-

-			if (ed.settings.inline_styles) {

-				// Move attribs to styles

-				if (dom.getAttrib(n, 'align'))

-					this.updateStyle('align');

-

-				if (dom.getAttrib(n, 'hspace'))

-					this.updateStyle('hspace');

-

-				if (dom.getAttrib(n, 'border'))

-					this.updateStyle('border');

-

-				if (dom.getAttrib(n, 'vspace'))

-					this.updateStyle('vspace');

-			}

-		}

-

-		// Setup browse button

-		document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');

-		if (isVisible('srcbrowser'))

-			document.getElementById('src').style.width = '260px';

-

-		// Setup browse button

-		document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');

-		if (isVisible('overbrowser'))

-			document.getElementById('onmouseoversrc').style.width = '260px';

-

-		// Setup browse button

-		document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');

-		if (isVisible('outbrowser'))

-			document.getElementById('onmouseoutsrc').style.width = '260px';

-

-		// If option enabled default contrain proportions to checked

-		if (ed.getParam("advimage_constrain_proportions", true))

-			f.constrain.checked = true;

-

-		// Check swap image if valid data

-		if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)

-			this.setSwapImage(true);

-		else

-			this.setSwapImage(false);

-

-		this.changeAppearance();

-		this.showPreviewImage(nl.src.value, 1);

-	},

-

-	insert : function(file, title) {

-		var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];

-

-		if (f.src.value === '') {

-			if (ed.selection.getNode().nodeName == 'IMG') {

-				ed.dom.remove(ed.selection.getNode());

-				ed.execCommand('mceRepaint');

-			}

-

-			tinyMCEPopup.close();

-			return;

-		}

-

-		if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {

-			if (!f.alt.value) {

-				tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {

-					if (s)

-						t.insertAndClose();

-				});

-

-				return;

-			}

-		}

-

-		t.insertAndClose();

-	},

-

-	insertAndClose : function() {

-		var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;

-

-		tinyMCEPopup.restoreSelection();

-

-		// Fixes crash in Safari

-		if (tinymce.isWebKit)

-			ed.getWin().focus();

-

-		if (!ed.settings.inline_styles) {

-			args = {

-				vspace : nl.vspace.value,

-				hspace : nl.hspace.value,

-				border : nl.border.value,

-				align : getSelectValue(f, 'align')

-			};

-		} else {

-			// Remove deprecated values

-			args = {

-				vspace : '',

-				hspace : '',

-				border : '',

-				align : ''

-			};

-		}

-

-		tinymce.extend(args, {

-			src : nl.src.value.replace(/ /g, '%20'),

-			width : nl.width.value,

-			height : nl.height.value,

-			alt : nl.alt.value,

-			title : nl.title.value,

-			'class' : getSelectValue(f, 'class_list'),

-			style : nl.style.value,

-			id : nl.id.value,

-			dir : nl.dir.value,

-			lang : nl.lang.value,

-			usemap : nl.usemap.value,

-			longdesc : nl.longdesc.value

-		});

-

-		args.onmouseover = args.onmouseout = '';

-

-		if (f.onmousemovecheck.checked) {

-			if (nl.onmouseoversrc.value)

-				args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";

-

-			if (nl.onmouseoutsrc.value)

-				args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";

-		}

-

-		el = ed.selection.getNode();

-

-		if (el && el.nodeName == 'IMG') {

-			ed.dom.setAttribs(el, args);

-		} else {

-			tinymce.each(args, function(value, name) {

-				if (value === "") {

-					delete args[name];

-				}

-			});

-

-			ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});

-			ed.undoManager.add();

-		}

-

-		tinyMCEPopup.editor.execCommand('mceRepaint');

-		tinyMCEPopup.editor.focus();

-		tinyMCEPopup.close();

-	},

-

-	getAttrib : function(e, at) {

-		var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;

-

-		if (ed.settings.inline_styles) {

-			switch (at) {

-				case 'align':

-					if (v = dom.getStyle(e, 'float'))

-						return v;

-

-					if (v = dom.getStyle(e, 'vertical-align'))

-						return v;

-

-					break;

-

-				case 'hspace':

-					v = dom.getStyle(e, 'margin-left')

-					v2 = dom.getStyle(e, 'margin-right');

-

-					if (v && v == v2)

-						return parseInt(v.replace(/[^0-9]/g, ''));

-

-					break;

-

-				case 'vspace':

-					v = dom.getStyle(e, 'margin-top')

-					v2 = dom.getStyle(e, 'margin-bottom');

-					if (v && v == v2)

-						return parseInt(v.replace(/[^0-9]/g, ''));

-

-					break;

-

-				case 'border':

-					v = 0;

-

-					tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {

-						sv = dom.getStyle(e, 'border-' + sv + '-width');

-

-						// False or not the same as prev

-						if (!sv || (sv != v && v !== 0)) {

-							v = 0;

-							return false;

-						}

-

-						if (sv)

-							v = sv;

-					});

-

-					if (v)

-						return parseInt(v.replace(/[^0-9]/g, ''));

-

-					break;

-			}

-		}

-

-		if (v = dom.getAttrib(e, at))

-			return v;

-

-		return '';

-	},

-

-	setSwapImage : function(st) {

-		var f = document.forms[0];

-

-		f.onmousemovecheck.checked = st;

-		setBrowserDisabled('overbrowser', !st);

-		setBrowserDisabled('outbrowser', !st);

-

-		if (f.over_list)

-			f.over_list.disabled = !st;

-

-		if (f.out_list)

-			f.out_list.disabled = !st;

-

-		f.onmouseoversrc.disabled = !st;

-		f.onmouseoutsrc.disabled  = !st;

-	},

-

-	fillClassList : function(id) {

-		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

-

-		if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {

-			cl = [];

-

-			tinymce.each(v.split(';'), function(v) {

-				var p = v.split('=');

-

-				cl.push({'title' : p[0], 'class' : p[1]});

-			});

-		} else

-			cl = tinyMCEPopup.editor.dom.getClasses();

-

-		if (cl.length > 0) {

-			lst.options.length = 0;

-			lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');

-

-			tinymce.each(cl, function(o) {

-				lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);

-			});

-		} else

-			dom.remove(dom.getParent(id, 'tr'));

-	},

-

-	fillFileList : function(id, l) {

-		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

-

-		l = typeof(l) === 'function' ? l() : window[l];

-		lst.options.length = 0;

-

-		if (l && l.length > 0) {

-			lst.options[lst.options.length] = new Option('', '');

-

-			tinymce.each(l, function(o) {

-				lst.options[lst.options.length] = new Option(o[0], o[1]);

-			});

-		} else

-			dom.remove(dom.getParent(id, 'tr'));

-	},

-

-	resetImageData : function() {

-		var f = document.forms[0];

-

-		f.elements.width.value = f.elements.height.value = '';

-	},

-

-	updateImageData : function(img, st) {

-		var f = document.forms[0];

-

-		if (!st) {

-			f.elements.width.value = img.width;

-			f.elements.height.value = img.height;

-		}

-

-		this.preloadImg = img;

-	},

-

-	changeAppearance : function() {

-		var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');

-

-		if (img) {

-			if (ed.getParam('inline_styles')) {

-				ed.dom.setAttrib(img, 'style', f.style.value);

-			} else {

-				img.align = f.align.value;

-				img.border = f.border.value;

-				img.hspace = f.hspace.value;

-				img.vspace = f.vspace.value;

-			}

-		}

-	},

-

-	changeHeight : function() {

-		var f = document.forms[0], tp, t = this;

-

-		if (!f.constrain.checked || !t.preloadImg) {

-			return;

-		}

-

-		if (f.width.value == "" || f.height.value == "")

-			return;

-

-		tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;

-		f.height.value = tp.toFixed(0);

-	},

-

-	changeWidth : function() {

-		var f = document.forms[0], tp, t = this;

-

-		if (!f.constrain.checked || !t.preloadImg) {

-			return;

-		}

-

-		if (f.width.value == "" || f.height.value == "")

-			return;

-

-		tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;

-		f.width.value = tp.toFixed(0);

-	},

-

-	updateStyle : function(ty) {

-		var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});

-

-		if (tinyMCEPopup.editor.settings.inline_styles) {

-			// Handle align

-			if (ty == 'align') {

-				dom.setStyle(img, 'float', '');

-				dom.setStyle(img, 'vertical-align', '');

-

-				v = getSelectValue(f, 'align');

-				if (v) {

-					if (v == 'left' || v == 'right')

-						dom.setStyle(img, 'float', v);

-					else

-						img.style.verticalAlign = v;

-				}

-			}

-

-			// Handle border

-			if (ty == 'border') {

-				b = img.style.border ? img.style.border.split(' ') : [];

-				bStyle = dom.getStyle(img, 'border-style');

-				bColor = dom.getStyle(img, 'border-color');

-

-				dom.setStyle(img, 'border', '');

-

-				v = f.border.value;

-				if (v || v == '0') {

-					if (v == '0')

-						img.style.border = isIE ? '0' : '0 none none';

-					else {

-						if (b.length == 3 && b[isIE ? 2 : 1])

-							bStyle = b[isIE ? 2 : 1];

-						else if (!bStyle || bStyle == 'none')

-							bStyle = 'solid';

-						if (b.length == 3 && b[isIE ? 0 : 2])

-							bColor = b[isIE ? 0 : 2];

-						else if (!bColor || bColor == 'none')

-							bColor = 'black';

-						img.style.border = v + 'px ' + bStyle + ' ' + bColor;

-					}

-				}

-			}

-

-			// Handle hspace

-			if (ty == 'hspace') {

-				dom.setStyle(img, 'marginLeft', '');

-				dom.setStyle(img, 'marginRight', '');

-

-				v = f.hspace.value;

-				if (v) {

-					img.style.marginLeft = v + 'px';

-					img.style.marginRight = v + 'px';

-				}

-			}

-

-			// Handle vspace

-			if (ty == 'vspace') {

-				dom.setStyle(img, 'marginTop', '');

-				dom.setStyle(img, 'marginBottom', '');

-

-				v = f.vspace.value;

-				if (v) {

-					img.style.marginTop = v + 'px';

-					img.style.marginBottom = v + 'px';

-				}

-			}

-

-			// Merge

-			dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');

-		}

-	},

-

-	changeMouseMove : function() {

-	},

-

-	showPreviewImage : function(u, st) {

-		if (!u) {

-			tinyMCEPopup.dom.setHTML('prev', '');

-			return;

-		}

-

-		if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))

-			this.resetImageData();

-

-		u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);

-

-		if (!st)

-			tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');

-		else

-			tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');

-	}

-};

-

-ImageDialog.preInit();

-tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","missing_alt":"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css
+++ /dev/null
@@ -1,9 +1,1 @@
-.mceLinkList, .mceAnchorList, #targetlist {width:280px;}

-.mceActionPanel {margin-top:7px;}

-.panel_wrapper div.current {height:320px;}

-#classlist, #title, #href {width:280px;}

-#popupurl, #popupname {width:200px;}

-#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}

-#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}

-#events_panel input {width:200px;}

 

--- a/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js
+++ /dev/null
@@ -1,61 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.AdvancedLinkPlugin', {

-		init : function(ed, url) {

-			this.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceAdvLink', function() {

-				var se = ed.selection;

-

-				// No selection and not in link

-				if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))

-					return;

-

-				ed.windowManager.open({

-					file : url + '/link.htm',

-					width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),

-					height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			// Register buttons

-			ed.addButton('link', {

-				title : 'advlink.link_desc',

-				cmd : 'mceAdvLink'

-			});

-

-			ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');

-

-			ed.onNodeChange.add(function(ed, cm, n, co) {

-				cm.setDisabled('link', co && n.nodeName != 'A');

-				cm.setActive('link', n.nodeName == 'A' && !n.name);

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Advanced link',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js
+++ /dev/null
@@ -1,540 +1,1 @@
-/* Functions for the advlink plugin popup */

-

-tinyMCEPopup.requireLangPack();

-

-var templates = {

-	"window.open" : "window.open('${url}','${target}','${options}')"

-};

-

-function preinit() {

-	var url;

-

-	if (url = tinyMCEPopup.getParam("external_link_list_url"))

-		document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

-}

-

-function changeClass() {

-	var f = document.forms[0];

-

-	f.classes.value = getSelectValue(f, 'classlist');

-}

-

-function init() {

-	tinyMCEPopup.resizeToInnerSize();

-

-	var formObj = document.forms[0];

-	var inst = tinyMCEPopup.editor;

-	var elm = inst.selection.getNode();

-	var action = "insert";

-	var html;

-

-	document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');

-	document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');

-	document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');

-

-	// Link list

-	html = getLinkListHTML('linklisthref','href');

-	if (html == "")

-		document.getElementById("linklisthrefrow").style.display = 'none';

-	else

-		document.getElementById("linklisthrefcontainer").innerHTML = html;

-

-	// Anchor list

-	html = getAnchorListHTML('anchorlist','href');

-	if (html == "")

-		document.getElementById("anchorlistrow").style.display = 'none';

-	else

-		document.getElementById("anchorlistcontainer").innerHTML = html;

-

-	// Resize some elements

-	if (isVisible('hrefbrowser'))

-		document.getElementById('href').style.width = '260px';

-

-	if (isVisible('popupurlbrowser'))

-		document.getElementById('popupurl').style.width = '180px';

-

-	elm = inst.dom.getParent(elm, "A");

-	if (elm == null) {

-		var prospect = inst.dom.create("p", null, inst.selection.getContent());

-		if (prospect.childNodes.length === 1) {

-			elm = prospect.firstChild;

-		}

-	}

-

-	if (elm != null && elm.nodeName == "A")

-		action = "update";

-

-	formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); 

-

-	setPopupControlsDisabled(true);

-

-	if (action == "update") {

-		var href = inst.dom.getAttrib(elm, 'href');

-		var onclick = inst.dom.getAttrib(elm, 'onclick');

-

-		// Setup form data

-		setFormValue('href', href);

-		setFormValue('title', inst.dom.getAttrib(elm, 'title'));

-		setFormValue('id', inst.dom.getAttrib(elm, 'id'));

-		setFormValue('style', inst.dom.getAttrib(elm, "style"));

-		setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));

-		setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));

-		setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));

-		setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));

-		setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));

-		setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));

-		setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));

-		setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));

-		setFormValue('type', inst.dom.getAttrib(elm, 'type'));

-		setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));

-		setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));

-		setFormValue('onclick', onclick);

-		setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));

-		setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));

-		setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));

-		setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));

-		setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));

-		setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));

-		setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));

-		setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));

-		setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));

-		setFormValue('target', inst.dom.getAttrib(elm, 'target'));

-		setFormValue('classes', inst.dom.getAttrib(elm, 'class'));

-

-		// Parse onclick data

-		if (onclick != null && onclick.indexOf('window.open') != -1)

-			parseWindowOpen(onclick);

-		else

-			parseFunction(onclick);

-

-		// Select by the values

-		selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));

-		selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));

-		selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));

-		selectByValue(formObj, 'linklisthref', href);

-

-		if (href.charAt(0) == '#')

-			selectByValue(formObj, 'anchorlist', href);

-

-		addClassesToList('classlist', 'advlink_styles');

-

-		selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);

-		selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);

-	} else

-		addClassesToList('classlist', 'advlink_styles');

-}

-

-function checkPrefix(n) {

-	if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))

-		n.value = 'mailto:' + n.value;

-

-	if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))

-		n.value = 'http://' + n.value;

-}

-

-function setFormValue(name, value) {

-	document.forms[0].elements[name].value = value;

-}

-

-function parseWindowOpen(onclick) {

-	var formObj = document.forms[0];

-

-	// Preprocess center code

-	if (onclick.indexOf('return false;') != -1) {

-		formObj.popupreturn.checked = true;

-		onclick = onclick.replace('return false;', '');

-	} else

-		formObj.popupreturn.checked = false;

-

-	var onClickData = parseLink(onclick);

-

-	if (onClickData != null) {

-		formObj.ispopup.checked = true;

-		setPopupControlsDisabled(false);

-

-		var onClickWindowOptions = parseOptions(onClickData['options']);

-		var url = onClickData['url'];

-

-		formObj.popupname.value = onClickData['target'];

-		formObj.popupurl.value = url;

-		formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');

-		formObj.popupheight.value = getOption(onClickWindowOptions, 'height');

-

-		formObj.popupleft.value = getOption(onClickWindowOptions, 'left');

-		formObj.popuptop.value = getOption(onClickWindowOptions, 'top');

-

-		if (formObj.popupleft.value.indexOf('screen') != -1)

-			formObj.popupleft.value = "c";

-

-		if (formObj.popuptop.value.indexOf('screen') != -1)

-			formObj.popuptop.value = "c";

-

-		formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";

-		formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";

-		formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";

-		formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";

-		formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";

-		formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";

-		formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";

-

-		buildOnClick();

-	}

-}

-

-function parseFunction(onclick) {

-	var formObj = document.forms[0];

-	var onClickData = parseLink(onclick);

-

-	// TODO: Add stuff here

-}

-

-function getOption(opts, name) {

-	return typeof(opts[name]) == "undefined" ? "" : opts[name];

-}

-

-function setPopupControlsDisabled(state) {

-	var formObj = document.forms[0];

-

-	formObj.popupname.disabled = state;

-	formObj.popupurl.disabled = state;

-	formObj.popupwidth.disabled = state;

-	formObj.popupheight.disabled = state;

-	formObj.popupleft.disabled = state;

-	formObj.popuptop.disabled = state;

-	formObj.popuplocation.disabled = state;

-	formObj.popupscrollbars.disabled = state;

-	formObj.popupmenubar.disabled = state;

-	formObj.popupresizable.disabled = state;

-	formObj.popuptoolbar.disabled = state;

-	formObj.popupstatus.disabled = state;

-	formObj.popupreturn.disabled = state;

-	formObj.popupdependent.disabled = state;

-

-	setBrowserDisabled('popupurlbrowser', state);

-}

-

-function parseLink(link) {

-	link = link.replace(new RegExp('&#39;', 'g'), "'");

-

-	var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");

-

-	// Is function name a template function

-	var template = templates[fnName];

-	if (template) {

-		// Build regexp

-		var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));

-		var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";

-		var replaceStr = "";

-		for (var i=0; i<variableNames.length; i++) {

-			// Is string value

-			if (variableNames[i].indexOf("'${") != -1)

-				regExp += "'(.*)'";

-			else // Number value

-				regExp += "([0-9]*)";

-

-			replaceStr += "$" + (i+1);

-

-			// Cleanup variable name

-			variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");

-

-			if (i != variableNames.length-1) {

-				regExp += "\\s*,\\s*";

-				replaceStr += "<delim>";

-			} else

-				regExp += ".*";

-		}

-

-		regExp += "\\);?";

-

-		// Build variable array

-		var variables = [];

-		variables["_function"] = fnName;

-		var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');

-		for (var i=0; i<variableNames.length; i++)

-			variables[variableNames[i]] = variableValues[i];

-

-		return variables;

-	}

-

-	return null;

-}

-

-function parseOptions(opts) {

-	if (opts == null || opts == "")

-		return [];

-

-	// Cleanup the options

-	opts = opts.toLowerCase();

-	opts = opts.replace(/;/g, ",");

-	opts = opts.replace(/[^0-9a-z=,]/g, "");

-

-	var optionChunks = opts.split(',');

-	var options = [];

-

-	for (var i=0; i<optionChunks.length; i++) {

-		var parts = optionChunks[i].split('=');

-

-		if (parts.length == 2)

-			options[parts[0]] = parts[1];

-	}

-

-	return options;

-}

-

-function buildOnClick() {

-	var formObj = document.forms[0];

-

-	if (!formObj.ispopup.checked) {

-		formObj.onclick.value = "";

-		return;

-	}

-

-	var onclick = "window.open('";

-	var url = formObj.popupurl.value;

-

-	onclick += url + "','";

-	onclick += formObj.popupname.value + "','";

-

-	if (formObj.popuplocation.checked)

-		onclick += "location=yes,";

-

-	if (formObj.popupscrollbars.checked)

-		onclick += "scrollbars=yes,";

-

-	if (formObj.popupmenubar.checked)

-		onclick += "menubar=yes,";

-

-	if (formObj.popupresizable.checked)

-		onclick += "resizable=yes,";

-

-	if (formObj.popuptoolbar.checked)

-		onclick += "toolbar=yes,";

-

-	if (formObj.popupstatus.checked)

-		onclick += "status=yes,";

-

-	if (formObj.popupdependent.checked)

-		onclick += "dependent=yes,";

-

-	if (formObj.popupwidth.value != "")

-		onclick += "width=" + formObj.popupwidth.value + ",";

-

-	if (formObj.popupheight.value != "")

-		onclick += "height=" + formObj.popupheight.value + ",";

-

-	if (formObj.popupleft.value != "") {

-		if (formObj.popupleft.value != "c")

-			onclick += "left=" + formObj.popupleft.value + ",";

-		else

-			onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";

-	}

-

-	if (formObj.popuptop.value != "") {

-		if (formObj.popuptop.value != "c")

-			onclick += "top=" + formObj.popuptop.value + ",";

-		else

-			onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";

-	}

-

-	if (onclick.charAt(onclick.length-1) == ',')

-		onclick = onclick.substring(0, onclick.length-1);

-

-	onclick += "');";

-

-	if (formObj.popupreturn.checked)

-		onclick += "return false;";

-

-	// tinyMCE.debug(onclick);

-

-	formObj.onclick.value = onclick;

-

-	if (formObj.href.value == "")

-		formObj.href.value = url;

-}

-

-function setAttrib(elm, attrib, value) {

-	var formObj = document.forms[0];

-	var valueElm = formObj.elements[attrib.toLowerCase()];

-	var dom = tinyMCEPopup.editor.dom;

-

-	if (typeof(value) == "undefined" || value == null) {

-		value = "";

-

-		if (valueElm)

-			value = valueElm.value;

-	}

-

-	// Clean up the style

-	if (attrib == 'style')

-		value = dom.serializeStyle(dom.parseStyle(value), 'a');

-

-	dom.setAttrib(elm, attrib, value);

-}

-

-function getAnchorListHTML(id, target) {

-	var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";

-

-	for (i=0, len=nodes.length; i<len; i++) {

-		if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")

-			html += '<option value="#' + name + '">' + name + '</option>';

-	}

-

-	if (html == "")

-		return "";

-

-	html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"'

-		+ ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"'

-		+ '>'

-		+ '<option value="">---</option>'

-		+ html

-		+ '</select>';

-

-	return html;

-}

-

-function insertAction() {

-	var inst = tinyMCEPopup.editor;

-	var elm, elementArray, i;

-

-	elm = inst.selection.getNode();

-	checkPrefix(document.forms[0].href);

-

-	elm = inst.dom.getParent(elm, "A");

-

-	// Remove element if there is no href

-	if (!document.forms[0].href.value) {

-		i = inst.selection.getBookmark();

-		inst.dom.remove(elm, 1);

-		inst.selection.moveToBookmark(i);

-		tinyMCEPopup.execCommand("mceEndUndoLevel");

-		tinyMCEPopup.close();

-		return;

-	}

-

-	// Create new anchor elements

-	if (elm == null) {

-		inst.getDoc().execCommand("unlink", false, null);

-		tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});

-

-		elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});

-		for (i=0; i<elementArray.length; i++)

-			setAllAttribs(elm = elementArray[i]);

-	} else

-		setAllAttribs(elm);

-

-	// Don't move caret if selection was image

-	if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {

-		inst.focus();

-		inst.selection.select(elm);

-		inst.selection.collapse(0);

-		tinyMCEPopup.storeSelection();

-	}

-

-	tinyMCEPopup.execCommand("mceEndUndoLevel");

-	tinyMCEPopup.close();

-}

-

-function setAllAttribs(elm) {

-	var formObj = document.forms[0];

-	var href = formObj.href.value.replace(/ /g, '%20');

-	var target = getSelectValue(formObj, 'targetlist');

-

-	setAttrib(elm, 'href', href);

-	setAttrib(elm, 'title');

-	setAttrib(elm, 'target', target == '_self' ? '' : target);

-	setAttrib(elm, 'id');

-	setAttrib(elm, 'style');

-	setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));

-	setAttrib(elm, 'rel');

-	setAttrib(elm, 'rev');

-	setAttrib(elm, 'charset');

-	setAttrib(elm, 'hreflang');

-	setAttrib(elm, 'dir');

-	setAttrib(elm, 'lang');

-	setAttrib(elm, 'tabindex');

-	setAttrib(elm, 'accesskey');

-	setAttrib(elm, 'type');

-	setAttrib(elm, 'onfocus');

-	setAttrib(elm, 'onblur');

-	setAttrib(elm, 'onclick');

-	setAttrib(elm, 'ondblclick');

-	setAttrib(elm, 'onmousedown');

-	setAttrib(elm, 'onmouseup');

-	setAttrib(elm, 'onmouseover');

-	setAttrib(elm, 'onmousemove');

-	setAttrib(elm, 'onmouseout');

-	setAttrib(elm, 'onkeypress');

-	setAttrib(elm, 'onkeydown');

-	setAttrib(elm, 'onkeyup');

-

-	// Refresh in old MSIE

-	if (tinyMCE.isMSIE5)

-		elm.outerHTML = elm.outerHTML;

-}

-

-function getSelectValue(form_obj, field_name) {

-	var elm = form_obj.elements[field_name];

-

-	if (!elm || elm.options == null || elm.selectedIndex == -1)

-		return "";

-

-	return elm.options[elm.selectedIndex].value;

-}

-

-function getLinkListHTML(elm_id, target_form_element, onchange_func) {

-	if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)

-		return "";

-

-	var html = "";

-

-	html += '<select id="' + elm_id + '" name="' + elm_id + '"';

-	html += ' class="mceLinkList" onfoc2us="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';

-	html += 'this.options[this.selectedIndex].value;';

-

-	if (typeof(onchange_func) != "undefined")

-		html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';

-

-	html += '"><option value="">---</option>';

-

-	for (var i=0; i<tinyMCELinkList.length; i++)

-		html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';

-

-	html += '</select>';

-

-	return html;

-

-	// tinyMCE.debug('-- image list start --', html, '-- image list end --');

-}

-

-function getTargetListHTML(elm_id, target_form_element) {

-	var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');

-	var html = '';

-

-	html += '<select id="' + elm_id + '" name="' + elm_id + '" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';

-	html += 'this.options[this.selectedIndex].value;">';

-	html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';

-	html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';

-	html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';

-	html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';

-

-	for (var i=0; i<targets.length; i++) {

-		var key, value;

-

-		if (targets[i] == "")

-			continue;

-

-		key = targets[i].split('=')[0];

-		value = targets[i].split('=')[1];

-

-		html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';

-	}

-

-	html += '</select>';

-

-	return html;

-}

-

-// While loading

-preinit();

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm
+++ /dev/null
@@ -1,339 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advlink_dlg.title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="js/advlink.js"></script>

-	<link href="css/advlink.css" rel="stylesheet" type="text/css" />

-</head>

-<body id="advlink" style="display: none" role="application" onload="javascript:mcTabs.displayTab('general_tab','general_panel', true);" aria-labelledby="app_label">

-	<span class="mceVoiceLabel" id="app_label" style="display:none;">{#advlink_dlg.title}</span>

-	<form onsubmit="insertAction();return false;" action="#">

-		<div class="tabs" role="presentation">

-			<ul>

-				<li id="general_tab" class="current" aria-controls="general_panel" ><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>

-				<li id="popup_tab" aria-controls="popup_panel" ><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>

-				<li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>

-				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper" role="presentation">

-			<div id="general_panel" class="panel current">

-				<fieldset>

-					<legend>{#advlink_dlg.general_props}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0" role="presentation">

-						<tr>

-							<td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>

-								<td><table border="0" cellspacing="0" cellpadding="0">

-							<tr>

-								<td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" aria-required="true" /></td>

-								<td id="hrefbrowsercontainer">&nbsp;</td>

-							</tr>

-							</table></td>

-						</tr>

-						<tr id="linklisthrefrow">

-							<td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>

-							<td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>

-						</tr>

-						<tr id="anchorlistrow">

-							<td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>

-							<td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>

-						</tr>

-						<tr>

-							<td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>

-							<td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>

-							<td><input id="title" name="title" type="text" value="" /></td>

-						</tr>

-						<tr>

-							<td><label id="classlabel" for="classlist">{#class_name}</label></td>

-							<td>

-								 <select id="classlist" name="classlist" onchange="changeClass();">

-									<option value="" selected="selected">{#not_set}</option>

-								 </select>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="popup_panel" class="panel">

-				<fieldset>

-					<legend>{#advlink_dlg.popup_props}</legend>

-

-					<input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />

-					<label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>

-

-					<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

-						<tr>

-							<td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>

-							<td>

-								<table border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>

-										<td id="popupurlbrowsercontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>

-							<td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>

-						</tr>

-						<tr role="group" aria-labelledby="popup_size_label">

-							<td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label>&nbsp;</td>

-							<td class="nowrap">

-								<span style="display:none" id="width_voiceLabel">{#advlink_dlg.width}</span>

-								<input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" aria-labelledby="width_voiceLabel" /> x

-								<span style="display:none" id="height_voiceLabel">{#advlink_dlg.height}</span>

-								<input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" aria-labelledby="height_voiceLabel" /> px

-							</td>

-						</tr>

-						<tr role="group" aria-labelledby="popup_position_label center_hint">

-							<td class="nowrap" id="labelleft"><label id="popup_position_label">{#advlink_dlg.popup_position}</label>&nbsp;</td>

-							<td class="nowrap">

-								<span style="display:none" id="x_voiceLabel">X</span>

-								<input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" aria-labelledby="x_voiceLabel" /> /                                

-								<span style="display:none" id="y_voiceLabel">Y</span>

-								<input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" aria-labelledby="y_voiceLabel" /> <span id="center_hint">(c /c = center)</span>

-							</td>

-						</tr>

-					</table>

-

-					<fieldset>

-						<legend>{#advlink_dlg.popup_opts}</legend>

-

-						<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

-							<tr>

-								<td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>

-								<td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>

-								<td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>

-								<td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>

-							</tr>

-							<tr>

-								<td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>

-								<td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>

-								<td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>

-								<td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>

-							</tr>

-							<tr>

-								<td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>

-								<td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>

-								<td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>

-								<td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>

-							</tr>

-							<tr>

-								<td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>

-								<td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>

-								<td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>

-								<td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>

-							</tr>

-						</table>

-					</fieldset>

-				</fieldset>

-			</div>

-

-			<div id="advanced_panel" class="panel">

-			<fieldset>

-					<legend>{#advlink_dlg.advanced_props}</legend>

-

-					<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

-						<tr>

-							<td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td> 

-							<td><input id="id" name="id" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>

-							<td><input type="text" id="style" name="style" value="" /></td>

-						</tr>

-

-						<tr>

-							<td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>

-							<td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>

-						</tr>

-

-						<tr>

-							<td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>

-							<td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td> 

-							<td>

-								<select id="dir" name="dir"> 

-										<option value="">{#not_set}</option> 

-										<option value="ltr">{#advlink_dlg.ltr}</option> 

-										<option value="rtl">{#advlink_dlg.rtl}</option> 

-								</select>

-							</td> 

-						</tr>

-

-						<tr>

-							<td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>

-							<td><input type="text" id="hreflang" name="hreflang" value="" /></td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td> 

-							<td>

-								<input id="lang" name="lang" type="text" value="" />

-							</td> 

-						</tr>

-

-						<tr>

-							<td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>

-							<td><input type="text" id="charset" name="charset" value="" /></td>

-						</tr>

-

-						<tr>

-							<td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>

-							<td><input type="text" id="type" name="type" value="" /></td>

-						</tr>

-

-						<tr>

-							<td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>

-							<td><select id="rel" name="rel"> 

-									<option value="">{#not_set}</option> 

-									<option value="lightbox">Lightbox</option> 

-									<option value="alternate">Alternate</option> 

-									<option value="designates">Designates</option> 

-									<option value="stylesheet">Stylesheet</option> 

-									<option value="start">Start</option> 

-									<option value="next">Next</option> 

-									<option value="prev">Prev</option> 

-									<option value="contents">Contents</option> 

-									<option value="index">Index</option> 

-									<option value="glossary">Glossary</option> 

-									<option value="copyright">Copyright</option> 

-									<option value="chapter">Chapter</option> 

-									<option value="subsection">Subsection</option> 

-									<option value="appendix">Appendix</option> 

-									<option value="help">Help</option> 

-									<option value="bookmark">Bookmark</option>

-									<option value="nofollow">No Follow</option>

-									<option value="tag">Tag</option>

-								</select> 

-							</td>

-						</tr>

-

-						<tr>

-							<td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>

-							<td><select id="rev" name="rev"> 

-									<option value="">{#not_set}</option> 

-									<option value="alternate">Alternate</option> 

-									<option value="designates">Designates</option> 

-									<option value="stylesheet">Stylesheet</option> 

-									<option value="start">Start</option> 

-									<option value="next">Next</option> 

-									<option value="prev">Prev</option> 

-									<option value="contents">Contents</option> 

-									<option value="index">Index</option> 

-									<option value="glossary">Glossary</option> 

-									<option value="copyright">Copyright</option> 

-									<option value="chapter">Chapter</option> 

-									<option value="subsection">Subsection</option> 

-									<option value="appendix">Appendix</option> 

-									<option value="help">Help</option> 

-									<option value="bookmark">Bookmark</option> 

-								</select> 

-							</td>

-						</tr>

-

-						<tr>

-							<td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>

-							<td><input type="text" id="tabindex" name="tabindex" value="" /></td>

-						</tr>

-

-						<tr>

-							<td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td>

-							<td><input type="text" id="accesskey" name="accesskey" value="" /></td>

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="events_panel" class="panel">

-			<fieldset>

-					<legend>{#advlink_dlg.event_props}</legend>

-

-					<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

-						<tr>

-							<td class="column1"><label for="onfocus">onfocus</label></td> 

-							<td><input id="onfocus" name="onfocus" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onblur">onblur</label></td> 

-							<td><input id="onblur" name="onblur" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onclick">onclick</label></td> 

-							<td><input id="onclick" name="onclick" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="ondblclick">ondblclick</label></td> 

-							<td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onmousedown">onmousedown</label></td> 

-							<td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onmouseup">onmouseup</label></td> 

-							<td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onmouseover">onmouseover</label></td> 

-							<td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onmousemove">onmousemove</label></td> 

-							<td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onmouseout">onmouseout</label></td> 

-							<td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onkeypress">onkeypress</label></td> 

-							<td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onkeydown">onkeydown</label></td> 

-							<td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="onkeyup">onkeyup</label></td> 

-							<td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> 

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<input type="submit" id="insert" name="insert" value="{#insert}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js
+++ /dev/null
@@ -1,176 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var each = tinymce.each;

-

-	tinymce.create('tinymce.plugins.AdvListPlugin', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			function buildFormats(str) {

-				var formats = [];

-

-				each(str.split(/,/), function(type) {

-					formats.push({

-						title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),

-						styles : {

-							listStyleType : type == 'default' ? '' : type

-						}

-					});

-				});

-

-				return formats;

-			};

-

-			// Setup number formats from config or default

-			t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");

-			t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");

-

-			if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent))

-				t.isIE7 = true;

-		},

-

-		createControl: function(name, cm) {

-			var t = this, btn, format, editor = t.editor;

-

-			if (name == 'numlist' || name == 'bullist') {

-				// Default to first item if it's a default item

-				if (t[name][0].title == 'advlist.def')

-					format = t[name][0];

-

-				function hasFormat(node, format) {

-					var state = true;

-

-					each(format.styles, function(value, name) {

-						// Format doesn't match

-						if (editor.dom.getStyle(node, name) != value) {

-							state = false;

-							return false;

-						}

-					});

-

-					return state;

-				};

-

-				function applyListFormat() {

-					var list, dom = editor.dom, sel = editor.selection;

-

-					// Check for existing list element

-					list = dom.getParent(sel.getNode(), 'ol,ul');

-

-					// Switch/add list type if needed

-					if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))

-						editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');

-

-					// Append styles to new list element

-					if (format) {

-						list = dom.getParent(sel.getNode(), 'ol,ul');

-						if (list) {

-							dom.setStyles(list, format.styles);

-							list.removeAttribute('data-mce-style');

-						}

-					}

-

-					editor.focus();

-				};

-

-				btn = cm.createSplitButton(name, {

-					title : 'advanced.' + name + '_desc',

-					'class' : 'mce_' + name,

-					onclick : function() {

-						applyListFormat();

-					}

-				});

-

-				btn.onRenderMenu.add(function(btn, menu) {

-					menu.onHideMenu.add(function() {

-						if (t.bookmark) {

-							editor.selection.moveToBookmark(t.bookmark);

-							t.bookmark = 0;

-						}

-					});

-

-					menu.onShowMenu.add(function() {

-						var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList;

-

-						if (list || format) {

-							fmtList = t[name];

-

-							// Unselect existing items

-							each(menu.items, function(item) {

-								var state = true;

-

-								item.setSelected(0);

-

-								if (list && !item.isDisabled()) {

-									each(fmtList, function(fmt) {

-										if (fmt.id == item.id) {

-											if (!hasFormat(list, fmt)) {

-												state = false;

-												return false;

-											}

-										}

-									});

-

-									if (state)

-										item.setSelected(1);

-								}

-							});

-

-							// Select the current format

-							if (!list)

-								menu.items[format.id].setSelected(1);

-						}

-	

-						editor.focus();

-

-						// IE looses it's selection so store it away and restore it later

-						if (tinymce.isIE) {

-							t.bookmark = editor.selection.getBookmark(1);

-						}

-					});

-

-					menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);

-

-					each(t[name], function(item) {

-						// IE<8 doesn't support lower-greek, skip it

-						if (t.isIE7 && item.styles.listStyleType == 'lower-greek')

-							return;

-

-						item.id = editor.dom.uniqueId();

-

-						menu.add({id : item.id, title : item.title, onclick : function() {

-							format = item;

-							applyListFormat();

-						}});

-					});

-				});

-

-				return btn;

-			}

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Advanced lists',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;if(tinyMCE.isIE){return}a.onKeyDown.add(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng().cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f-2);a.setEnd(n,f-1);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
+++ /dev/null
@@ -1,173 +1,1 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2011, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
 
-(function() {
-	tinymce.create('tinymce.plugins.AutolinkPlugin', {
-	/**
-	* Initializes the plugin, this will be executed after the plugin has been created.
-	* This call is done before the editor instance has finished it's initialization so use the onInit event
-	* of the editor instance to intercept that event.
-	*
-	* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
-	* @param {string} url Absolute URL to where the plugin is located.
-	*/
-
-	init : function(ed, url) {
-		var t = this;
-
-		// Internet Explorer has built-in automatic linking
-		if (tinyMCE.isIE)
-			return;
-
-		// Add a key down handler
-		ed.onKeyDown.add(function(ed, e) {
-			if (e.keyCode == 13)
-				return t.handleEnter(ed);
-			});
-
-		ed.onKeyPress.add(function(ed, e) {
-			if (e.which == 41)
-				return t.handleEclipse(ed);
-		});
-
-		// Add a key up handler
-		ed.onKeyUp.add(function(ed, e) {
-			if (e.keyCode == 32)
-				return t.handleSpacebar(ed);
-			});
-	       },
-
-		handleEclipse : function(ed) {
-			this.parseCurrentLine(ed, -1, '(', true);
-		},
-
-		handleSpacebar : function(ed) {
-			 this.parseCurrentLine(ed, 0, '', true);
-		 },
-
-		handleEnter : function(ed) {
-			this.parseCurrentLine(ed, -1, '', false);
-		},
-
-		parseCurrentLine : function(ed, end_offset, delimiter, goback) {
-			var r, end, start, endContainer, bookmark, text, matches, prev, len;
-
-			// We need at least five characters to form a URL,
-			// hence, at minimum, five characters from the beginning of the line.
-			r = ed.selection.getRng().cloneRange();
-			if (r.startOffset < 5) {
-				// During testing, the caret is placed inbetween two text nodes. 
-				// The previous text node contains the URL.
-				prev = r.endContainer.previousSibling;
-				if (prev == null) {
-					if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
-						return;
-
-					prev = r.endContainer.firstChild.nextSibling;
-				}
-				len = prev.length;
-				r.setStart(prev, len);
-				r.setEnd(prev, len);
-
-				if (r.endOffset < 5)
-					return;
-
-				end = r.endOffset;
-				endContainer = prev;
-			} else {
-				endContainer = r.endContainer;
-
-				// Get a text node
-				if (endContainer.nodeType != 3 && endContainer.firstChild) {
-					while (endContainer.nodeType != 3 && endContainer.firstChild)
-						endContainer = endContainer.firstChild;
-
-					r.setStart(endContainer, 0);
-					r.setEnd(endContainer, endContainer.nodeValue.length);
-				}
-
-				if (r.endOffset == 1)
-					end = 2;
-				else
-					end = r.endOffset - 1 - end_offset;
-			}
-
-			start = end;
-
-			do
-			{
-				// Move the selection one character backwards.
-				r.setStart(endContainer, end - 2);
-				r.setEnd(endContainer, end - 1);
-				end -= 1;
-
-				// Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
-			} while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
-
-			if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
-				r.setStart(endContainer, end);
-				r.setEnd(endContainer, start);
-				end += 1;
-			} else if (r.startOffset == 0) {
-				r.setStart(endContainer, 0);
-				r.setEnd(endContainer, start);
-			}
-			else {
-				r.setStart(endContainer, end);
-				r.setEnd(endContainer, start);
-			}
-
-			text = r.toString();
-			matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)(.+)$/i);
-
-			if (matches) {
-				if (matches[1] == 'www.') {
-					matches[1] = 'http://www.';
-				}
-
-				bookmark = ed.selection.getBookmark();
-
-				ed.selection.setRng(r);
-				tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
-				ed.selection.moveToBookmark(bookmark);
-
-				// TODO: Determine if this is still needed.
-				if (tinyMCE.isWebKit) {
-					// move the caret to its original position
-					ed.selection.collapse(false);
-					var max = Math.min(endContainer.length, start + 1);
-					r.setStart(endContainer, max);
-					r.setEnd(endContainer, max);
-					ed.selection.setRng(r);
-				}
-			}
-		},
-
-		/**
-		* Returns information about the plugin as a name/value array.
-		* The current keys are longname, author, authorurl, infourl and version.
-		*
-		* @return {Object} Name/value array containing information about the plugin.
-		*/
-		getInfo : function() {
-			return {
-				longname : 'Autolink',
-				author : 'Moxiecode Systems AB',
-				authorurl : 'http://tinymce.moxiecode.com',
-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
-				version : tinymce.majorVersion + "." + tinymce.minorVersion
-			};
-		}
-	});
-
-	// Register plugin
-	tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
-})();
-

--- a/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onLoad.add(b);a.onLoadContent.add(b)}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
+++ /dev/null
@@ -1,120 +1,1 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
 
-(function() {
-	/**
-	 * Auto Resize
-	 *
-	 * This plugin automatically resizes the content area to fit its content height.
-	 * It will retain a minimum height, which is the height of the content area when
-	 * it's initialized.
-	 */
-	tinymce.create('tinymce.plugins.AutoResizePlugin', {
-		/**
-		 * Initializes the plugin, this will be executed after the plugin has been created.
-		 * This call is done before the editor instance has finished it's initialization so use the onInit event
-		 * of the editor instance to intercept that event.
-		 *
-		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
-		 * @param {string} url Absolute URL to where the plugin is located.
-		 */
-		init : function(ed, url) {
-			var t = this, oldSize = 0;
-
-			if (ed.getParam('fullscreen_is_enabled'))
-				return;
-
-			/**
-			 * This method gets executed each time the editor needs to resize.
-			 */
-			function resize() {
-				var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
-
-				// Get height differently depending on the browser used
-				myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight);
-
-				// Don't make it smaller than the minimum height
-				if (myHeight > t.autoresize_min_height)
-					resizeHeight = myHeight;
-
-				// If a maximum height has been defined don't exceed this height
-				if (t.autoresize_max_height && myHeight > t.autoresize_max_height) {
-					resizeHeight = t.autoresize_max_height;
-					body.style.overflowY = "auto";
-					de.style.overflowY = "auto"; // Old IE
-				} else {
-					body.style.overflowY = "hidden";
-					de.style.overflowY = "hidden"; // Old IE
-					body.scrollTop = 0;
-				}
-
-				// Resize content element
-				if (resizeHeight !== oldSize) {
-					deltaSize = resizeHeight - oldSize;
-					DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
-					oldSize = resizeHeight;
-
-					// WebKit doesn't decrease the size of the body element until the iframe gets resized
-					// So we need to continue to resize the iframe down until the size gets fixed
-					if (tinymce.isWebKit && deltaSize < 0)
-						resize();
-				}
-			};
-
-			t.editor = ed;
-
-			// Define minimum height
-			t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight));
-
-			// Define maximum height
-			t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0));
-
-			// Add padding at the bottom for better UX
-			ed.onInit.add(function(ed){
-				ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px');
-			});
-
-			// Add appropriate listeners for resizing content area
-			ed.onChange.add(resize);
-			ed.onSetContent.add(resize);
-			ed.onPaste.add(resize);
-			ed.onKeyUp.add(resize);
-			ed.onPostRender.add(resize);
-
-			if (ed.getParam('autoresize_on_init', true)) {
-				ed.onLoad.add(resize);
-				ed.onLoadContent.add(resize);
-			}
-
-			// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
-			ed.addCommand('mceAutoResize', resize);
-		},
-
-		/**
-		 * Returns information about the plugin as a name/value array.
-		 * The current keys are longname, author, authorurl, infourl and version.
-		 *
-		 * @return {Object} Name/value array containing information about the plugin.
-		 */
-		getInfo : function() {
-			return {
-				longname : 'Auto Resize',
-				author : 'Moxiecode Systems AB',
-				authorurl : 'http://tinymce.moxiecode.com',
-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
-				version : tinymce.majorVersion + "." + tinymce.minorVersion
-			};
-		}
-	});
-
-	// Register plugin
-	tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
-})();
-

--- a/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();try{m.save("TinyMCE")}catch(o){}},getItem:function(l){var m=i.getElement();try{m.load("TinyMCE");return m.getAttribute(l)}catch(n){return null}},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,j=h.storage,i;if(j){i=j.getItem(h.key);if(i){h.editor.setContent(i);h.onRestoreDraft.dispatch(h,{content:i})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()<i.getTime()){return b}h.removeDraft()}else{return b}}}return false},removeDraft:function(){var h=this,k=h.storage,i=h.key,j;if(k){j=k.getItem(i);k.removeItem(i);k.removeItem(i+"_expires");if(j){h.onRemoveDraft.dispatch(h,{content:j})}}},"static":{_beforeUnloadHandler:function(h){var i;e.each(tinyMCE.editors,function(j){if(j.plugins.autosave){j.plugins.autosave.storeDraft()}if(j.getParam("fullscreen_is_enabled")){return}if(!i&&j.isDirty()&&j.getParam("autosave_ask_before_unload")){i=j.getLang("autosave.unload_msg")}});return i}}});e.PluginManager.add("autosave",e.plugins.AutoSave)})(tinymce);
+

--- a/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js
+++ /dev/null
@@ -1,432 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- *

- * Adds auto-save capability to the TinyMCE text editor to rescue content

- * inadvertently lost. This plugin was originally developed by Speednet

- * and that project can be found here: http://code.google.com/p/tinyautosave/

- *

- * TECHNOLOGY DISCUSSION:

- * 

- * The plugin attempts to use the most advanced features available in the current browser to save

- * as much content as possible.  There are a total of four different methods used to autosave the

- * content.  In order of preference, they are:

- * 

- * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain

- * on the client computer. Data stored in the localStorage area has no expiration date, so we must

- * manage expiring the data ourselves.  localStorage is fully supported by IE8, and it is supposed

- * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers.  As

- * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,

- * localStorage is stored in the following folder:

- * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]

- * 

- * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,

- * except it is designed to expire after a certain amount of time.  Because the specification

- * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and

- * manage the expiration ourselves.  sessionStorage has similar storage characteristics to

- * localStorage, although it seems to have better support by Firefox 3 at the moment.  (That will

- * certainly change as Firefox continues getting better at HTML 5 adoption.)

- * 

- * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a

- * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client

- * computer.  The feature is available for IE 5+, which makes it available for every version of IE

- * supported by TinyMCE.  The content is persistent across browser restarts and expires on the

- * date/time specified, just like a cookie.  However, the data is not cleared when the user clears

- * cookies on the browser, which makes it well-suited for rescuing autosaved content.  UserData,

- * like other Microsoft IE browser technologies, is implemented as a behavior attached to a

- * specific DOM object, so in this case we attach the behavior to the same DOM element that the

- * TinyMCE editor instance is attached to.

- */

-

-(function(tinymce) {

-	// Setup constants to help the compressor to reduce script size

-	var PLUGIN_NAME = 'autosave',

-		RESTORE_DRAFT = 'restoredraft',

-		TRUE = true,

-		undefined,

-		unloadHandlerAdded,

-		Dispatcher = tinymce.util.Dispatcher;

-

-	/**

-	 * This plugin adds auto-save capability to the TinyMCE text editor to rescue content

-	 * inadvertently lost. By using localStorage.

-	 *

-	 * @class tinymce.plugins.AutoSave

-	 */

-	tinymce.create('tinymce.plugins.AutoSave', {

-		/**

-		 * Initializes the plugin, this will be executed after the plugin has been created.

-		 * This call is done before the editor instance has finished it's initialization so use the onInit event

-		 * of the editor instance to intercept that event.

-		 *

-		 * @method init

-		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.

-		 * @param {string} url Absolute URL to where the plugin is located.

-		 */

-		init : function(ed, url) {

-			var self = this, settings = ed.settings;

-

-			self.editor = ed;

-

-			// Parses the specified time string into a milisecond number 10m, 10s etc.

-			function parseTime(time) {

-				var multipels = {

-					s : 1000,

-					m : 60000

-				};

-

-				time = /^(\d+)([ms]?)$/.exec('' + time);

-

-				return (time[2] ? multipels[time[2]] : 1) * parseInt(time);

-			};

-

-			// Default config

-			tinymce.each({

-				ask_before_unload : TRUE,

-				interval : '30s',

-				retention : '20m',

-				minlength : 50

-			}, function(value, key) {

-				key = PLUGIN_NAME + '_' + key;

-

-				if (settings[key] === undefined)

-					settings[key] = value;

-			});

-

-			// Parse times

-			settings.autosave_interval = parseTime(settings.autosave_interval);

-			settings.autosave_retention = parseTime(settings.autosave_retention);

-

-			// Register restore button

-			ed.addButton(RESTORE_DRAFT, {

-				title : PLUGIN_NAME + ".restore_content",

-				onclick : function() {

-					if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {

-						// Show confirm dialog if the editor isn't empty

-						ed.windowManager.confirm(

-							PLUGIN_NAME + ".warning_message",

-							function(ok) {

-								if (ok)

-									self.restoreDraft();

-							}

-						);

-					} else

-						self.restoreDraft();

-				}

-			});

-

-			// Enable/disable restoredraft button depending on if there is a draft stored or not

-			ed.onNodeChange.add(function() {

-				var controlManager = ed.controlManager;

-

-				if (controlManager.get(RESTORE_DRAFT))

-					controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());

-			});

-

-			ed.onInit.add(function() {

-				// Check if the user added the restore button, then setup auto storage logic

-				if (ed.controlManager.get(RESTORE_DRAFT)) {

-					// Setup storage engine

-					self.setupStorage(ed);

-

-					// Auto save contents each interval time

-					setInterval(function() {

-						self.storeDraft();

-						ed.nodeChanged();

-					}, settings.autosave_interval);

-				}

-			});

-

-			/**

-			 * This event gets fired when a draft is stored to local storage.

-			 *

-			 * @event onStoreDraft

-			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.

-			 * @param {Object} draft Draft object containing the HTML contents of the editor.

-			 */

-			self.onStoreDraft = new Dispatcher(self);

-

-			/**

-			 * This event gets fired when a draft is restored from local storage.

-			 *

-			 * @event onStoreDraft

-			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.

-			 * @param {Object} draft Draft object containing the HTML contents of the editor.

-			 */

-			self.onRestoreDraft = new Dispatcher(self);

-

-			/**

-			 * This event gets fired when a draft removed/expired.

-			 *

-			 * @event onRemoveDraft

-			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.

-			 * @param {Object} draft Draft object containing the HTML contents of the editor.

-			 */

-			self.onRemoveDraft = new Dispatcher(self);

-

-			// Add ask before unload dialog only add one unload handler

-			if (!unloadHandlerAdded) {

-				window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;

-				unloadHandlerAdded = TRUE;

-			}

-		},

-

-		/**

-		 * Returns information about the plugin as a name/value array.

-		 * The current keys are longname, author, authorurl, infourl and version.

-		 *

-		 * @method getInfo

-		 * @return {Object} Name/value array containing information about the plugin.

-		 */

-		getInfo : function() {

-			return {

-				longname : 'Auto save',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		/**

-		 * Returns an expiration date UTC string.

-		 *

-		 * @method getExpDate

-		 * @return {String} Expiration date UTC string.

-		 */

-		getExpDate : function() {

-			return new Date(

-				new Date().getTime() + this.editor.settings.autosave_retention

-			).toUTCString();

-		},

-

-		/**

-		 * This method will setup the storage engine. If the browser has support for it.

-		 *

-		 * @method setupStorage

-		 */

-		setupStorage : function(ed) {

-			var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";

-

-			self.key = PLUGIN_NAME + ed.id;

-

-			// Loop though each storage engine type until we find one that works

-			tinymce.each([

-				function() {

-					// Try HTML5 Local Storage

-					if (localStorage) {

-						localStorage.setItem(testKey, testVal);

-

-						if (localStorage.getItem(testKey) === testVal) {

-							localStorage.removeItem(testKey);

-

-							return localStorage;

-						}

-					}

-				},

-

-				function() {

-					// Try HTML5 Session Storage

-					if (sessionStorage) {

-						sessionStorage.setItem(testKey, testVal);

-

-						if (sessionStorage.getItem(testKey) === testVal) {

-							sessionStorage.removeItem(testKey);

-

-							return sessionStorage;

-						}

-					}

-				},

-

-				function() {

-					// Try IE userData

-					if (tinymce.isIE) {

-						ed.getElement().style.behavior = "url('#default#userData')";

-

-						// Fake localStorage on old IE

-						return {

-							autoExpires : TRUE,

-

-							setItem : function(key, value) {

-								var userDataElement = ed.getElement();

-

-								userDataElement.setAttribute(key, value);

-								userDataElement.expires = self.getExpDate();

-

-								try {

-									userDataElement.save("TinyMCE");

-								} catch (e) {

-									// Ignore, saving might fail if "Userdata Persistence" is disabled in IE

-								}

-							},

-

-							getItem : function(key) {

-								var userDataElement = ed.getElement();

-

-								try {

-									userDataElement.load("TinyMCE");

-									return userDataElement.getAttribute(key);

-								} catch (e) {

-									// Ignore, loading might fail if "Userdata Persistence" is disabled in IE

-									return null;

-								}

-							},

-

-							removeItem : function(key) {

-								ed.getElement().removeAttribute(key);

-							}

-						};

-					}

-				},

-			], function(setup) {

-				// Try executing each function to find a suitable storage engine

-				try {

-					self.storage = setup();

-

-					if (self.storage)

-						return false;

-				} catch (e) {

-					// Ignore

-				}

-			});

-		},

-

-		/**

-		 * This method will store the current contents in the the storage engine.

-		 *

-		 * @method storeDraft

-		 */

-		storeDraft : function() {

-			var self = this, storage = self.storage, editor = self.editor, expires, content;

-

-			// Is the contents dirty

-			if (storage) {

-				// If there is no existing key and the contents hasn't been changed since

-				// it's original value then there is no point in saving a draft

-				if (!storage.getItem(self.key) && !editor.isDirty())

-					return;

-

-				// Store contents if the contents if longer than the minlength of characters

-				content = editor.getContent({draft: true});

-				if (content.length > editor.settings.autosave_minlength) {

-					expires = self.getExpDate();

-

-					// Store expiration date if needed IE userData has auto expire built in

-					if (!self.storage.autoExpires)

-						self.storage.setItem(self.key + "_expires", expires);

-

-					self.storage.setItem(self.key, content);

-					self.onStoreDraft.dispatch(self, {

-						expires : expires,

-						content : content

-					});

-				}

-			}

-		},

-

-		/**

-		 * This method will restore the contents from the storage engine back to the editor.

-		 *

-		 * @method restoreDraft

-		 */

-		restoreDraft : function() {

-			var self = this, storage = self.storage, content;

-

-			if (storage) {

-				content = storage.getItem(self.key);

-

-				if (content) {

-					self.editor.setContent(content);

-					self.onRestoreDraft.dispatch(self, {

-						content : content

-					});

-				}

-			}

-		},

-

-		/**

-		 * This method will return true/false if there is a local storage draft available.

-		 *

-		 * @method hasDraft

-		 * @return {boolean} true/false state if there is a local draft.

-		 */

-		hasDraft : function() {

-			var self = this, storage = self.storage, expDate, exists;

-

-			if (storage) {

-				// Does the item exist at all

-				exists = !!storage.getItem(self.key);

-				if (exists) {

-					// Storage needs autoexpire

-					if (!self.storage.autoExpires) {

-						expDate = new Date(storage.getItem(self.key + "_expires"));

-

-						// Contents hasn't expired

-						if (new Date().getTime() < expDate.getTime())

-							return TRUE;

-

-						// Remove it if it has

-						self.removeDraft();

-					} else

-						return TRUE;

-				}

-			}

-

-			return false;

-		},

-

-		/**

-		 * Removes the currently stored draft.

-		 *

-		 * @method removeDraft

-		 */

-		removeDraft : function() {

-			var self = this, storage = self.storage, key = self.key, content;

-

-			if (storage) {

-				// Get current contents and remove the existing draft

-				content = storage.getItem(key);

-				storage.removeItem(key);

-				storage.removeItem(key + "_expires");

-

-				// Dispatch remove event if we had any contents

-				if (content) {

-					self.onRemoveDraft.dispatch(self, {

-						content : content

-					});

-				}

-			}

-		},

-

-		"static" : {

-			// Internal unload handler will be called before the page is unloaded

-			_beforeUnloadHandler : function(e) {

-				var msg;

-

-				tinymce.each(tinyMCE.editors, function(ed) {

-					// Store a draft for each editor instance

-					if (ed.plugins.autosave)

-						ed.plugins.autosave.storeDraft();

-

-					// Never ask in fullscreen mode

-					if (ed.getParam("fullscreen_is_enabled"))

-						return;

-

-					// Setup a return message if the editor is dirty

-					if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))

-						msg = ed.getLang("autosave.unload_msg");

-				});

-

-				return msg;

-			}

-		}

-	});

-

-	tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);

-})(tinymce);

 

--- a/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js
+++ /dev/null
@@ -1,4 +1,1 @@
-tinyMCE.addI18n('en.autosave',{

-restore_content: "Restore auto-saved content",

-warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?"

-});
+

--- a/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/<font>(.*?)<\/font>/gi,"$1");b(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");b(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");b(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<u>/gi,"[u]");b(/<blockquote[^>]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/<br \/>/gi,"\n");b(/<br\/>/gi,"\n");b(/<br>/gi,"\n");b(/<p>/gi,"");b(/<\/p>/gi,"\n");b(/&nbsp;|\u00a0/gi," ");b(/&quot;/gi,'"');b(/&lt;/gi,"<");b(/&gt;/gi,">");b(/&amp;/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"<br />");b(/\[b\]/gi,"<strong>");b(/\[\/b\]/gi,"</strong>");b(/\[i\]/gi,"<em>");b(/\[\/i\]/gi,"</em>");b(/\[u\]/gi,"<u>");b(/\[\/u\]/gi,"</u>");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>');b(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
+++ /dev/null
@@ -1,120 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.BBCodePlugin', {

-		init : function(ed, url) {

-			var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();

-

-			ed.onBeforeSetContent.add(function(ed, o) {

-				o.content = t['_' + dialect + '_bbcode2html'](o.content);

-			});

-

-			ed.onPostProcess.add(function(ed, o) {

-				if (o.set)

-					o.content = t['_' + dialect + '_bbcode2html'](o.content);

-

-				if (o.get)

-					o.content = t['_' + dialect + '_html2bbcode'](o.content);

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'BBCode Plugin',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Private methods

-

-		// HTML -> BBCode in PunBB dialect

-		_punbb_html2bbcode : function(s) {

-			s = tinymce.trim(s);

-

-			function rep(re, str) {

-				s = s.replace(re, str);

-			};

-

-			// example: <strong> to [b]

-			rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");

-			rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");

-			rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");

-			rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");

-			rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");

-			rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");

-			rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");

-			rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");

-			rep(/<font>(.*?)<\/font>/gi,"$1");

-			rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");

-			rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");

-			rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");

-			rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");

-			rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");

-			rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");

-			rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");

-			rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");

-			rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");

-			rep(/<\/(strong|b)>/gi,"[/b]");

-			rep(/<(strong|b)>/gi,"[b]");

-			rep(/<\/(em|i)>/gi,"[/i]");

-			rep(/<(em|i)>/gi,"[i]");

-			rep(/<\/u>/gi,"[/u]");

-			rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");

-			rep(/<u>/gi,"[u]");

-			rep(/<blockquote[^>]*>/gi,"[quote]");

-			rep(/<\/blockquote>/gi,"[/quote]");

-			rep(/<br \/>/gi,"\n");

-			rep(/<br\/>/gi,"\n");

-			rep(/<br>/gi,"\n");

-			rep(/<p>/gi,"");

-			rep(/<\/p>/gi,"\n");

-			rep(/&nbsp;|\u00a0/gi," ");

-			rep(/&quot;/gi,"\"");

-			rep(/&lt;/gi,"<");

-			rep(/&gt;/gi,">");

-			rep(/&amp;/gi,"&");

-

-			return s; 

-		},

-

-		// BBCode -> HTML from PunBB dialect

-		_punbb_bbcode2html : function(s) {

-			s = tinymce.trim(s);

-

-			function rep(re, str) {

-				s = s.replace(re, str);

-			};

-

-			// example: [b] to <strong>

-			rep(/\n/gi,"<br />");

-			rep(/\[b\]/gi,"<strong>");

-			rep(/\[\/b\]/gi,"</strong>");

-			rep(/\[i\]/gi,"<em>");

-			rep(/\[\/i\]/gi,"</em>");

-			rep(/\[u\]/gi,"<u>");

-			rep(/\[\/u\]/gi,"</u>");

-			rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");

-			rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");

-			rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");

-			rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");

-			rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");

-			rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");

-

-			return s; 

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/cleanup/editor_plugin.js
+++ /dev/null

--- a/tinymce/jscripts/tiny_mce/plugins/cleanup/editor_plugin_src.js
+++ /dev/null
@@ -1,11 +1,1 @@
-/**

- * $Id: editor_plugin_src.js 162 2007-01-03 16:16:52Z spocke $

- *

- * Experimental plugin for new Cleanup routine, this logic will be moved into the core ones it's stable enougth.

- *

- * @author Moxiecode


- */

-

-/* Dummy file since cleanup is now moved to core */

 

--- a/tinymce/jscripts/tiny_mce/plugins/cleanup/readme.txt
+++ /dev/null
@@ -1,2 +1,1 @@
-Dummy plugin since cleanup is now moved into core.

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/editor_plugin.js
+++ /dev/null
@@ -1,51 +1,1 @@
-/* Import plugin specific language pack */

-tinyMCE.importPluginLanguagePack('codeprotect', 'en'); // <- Add a comma separated list of all supported languages

-

-/****

- * 

- * I'm not even gonna copyright this, that's just silly.

- *

- * Feel free to improve on this code and re-upload it.

- * 

- * Tijmen Schep, Holland, 9-10-2005

- * 

- * 

- ****/

-

-

-

-/**

- * Gets executed when contents is inserted / retrived.

- */

-function TinyMCE_codeprotect_cleanup(type, content) {

-	switch (type) {

-		case "get_from_editor":

-

-content = content.replace(/<!--CODE/gi, "<?");

-content = content.replace(/CODE-->/gi, "?>");

-

-			break;

-

-		case "insert_to_editor":

-			

-content = content.replace(/<\?/gi, "<!--CODE");

-content = content.replace(/\?>/gi, "CODE-->");

-

-			break;

-

-		case "get_from_editor_dom":

-

-			// Do custom cleanup code here. THIS PLUGIN DOESN'T USE THIS

-

-			break;

-

-		case "insert_to_editor_dom":

-

-			// Do custom cleanup code here. BUT I LEFT IT IN ANYWAY..

-

-			break;

-	}

-

-	return content;

-}

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/codeprotect/images/codeprotect.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/langs/da.js
+++ /dev/null
@@ -1,9 +1,1 @@
-// DK lang variables contributed by Jan Moelgaard

-

-/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

-

-tinyMCE.addToLang('',{

-template_title : 'Dette er bare en pop-up-skabelon',

-template_desc : 'Dette er bare en testknap'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/langs/de.js
+++ /dev/null
@@ -1,10 +1,1 @@
-// DE lang variables

-

-/* Remember to namespace the language parameters lang_<your plugin>_<some name> */


-

-tinyMCE.addToLang('',{

-template_title : 'Dies ist nur ein Beispiel-Popup',

-template_desc : 'Dies ist nur ein Beispiel-Button'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/langs/en.js
+++ /dev/null
@@ -1,9 +1,1 @@
-// UK lang variables

-

-/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

-

-tinyMCE.addToLang('',{

-template_title : 'codeprotect settings',

-template_desc : 'codeprotect'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/langs/fr_ca.js
+++ /dev/null
@@ -1,9 +1,1 @@
-// Canadian French lang variables by Virtuelcom   last modification: 2005-06-15

-

-/* Remember to namespace the language parameters <your plugin>_<some name> */

-

-tinyMCE.addToLang('',{

-template_title : 'Ceci est un exmple pour le gabarit de popup',

-template_desc : 'Ceci est un exmple pour le gabarit d\'un bouton'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/langs/he.js
+++ /dev/null
@@ -1,9 +1,1 @@
-// HE lang variables

-

-/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

-

-tinyMCE.addToLang('',{



-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/langs/hu.js
+++ /dev/null
@@ -1,9 +1,1 @@
-// HU lang variables

-

-/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

-

-tinyMCE.addToLang('',{



-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/langs/zh_cn.js
+++ /dev/null
@@ -1,10 +1,1 @@
-// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com)


-

-/* Remember to namespace the language parameters <your plugin>_<some name> */

-

-tinyMCE.addToLang('',{



-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/codeprotect/readme.txt
+++ /dev/null
@@ -1,25 +1,1 @@
-ABOUT

-

-This simple plugin protects any code in the html you are editing, by turning 

-it's start- and end-tag into comment tags when the editor is started.

-

-<? becomes <!--CODE

-?> becomes CODE-->

-

-The plugin changes the tags back to normal when you save your html.

-

-If you need this plugin to be more complex, feel free to expand on this 

-plugin, it's easier than you think. If you do make it better, please 

-upload it to sourceforge.

-

-

-INSTALL

-

-To install, copy the codeprotect folder to the plugins directory and just 

-add the word "codeprotect" to the list of plugins in the "init" bit of your tinyMCE 

-page. The plugin doesn't have a button, so no need to worry about that.

-

-

-tested with tinyCME 2.0 rc3

-

-Tijmen Schep, 9 october 2005
+

--- a/tinymce/jscripts/tiny_mce/plugins/compat2x/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.Compat2x',{getInfo:function(){return{longname:'Compat2x',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};}});(function(){tinymce.extend(tinyMCE,{addToLang:function(p,l){each(l,function(v,k){tinyMCE.i18n[(tinyMCE.settings.language||'en')+'.'+(p?p+'_':'')+k]=v;});},getInstanceById:function(n){return this.get(n);}});})();(function(){var EditorManager=tinymce.EditorManager;tinyMCE.instances={};tinyMCE.plugins={};tinymce.PluginManager.onAdd.add(function(pm,n,p){tinyMCE.plugins[n]=p;});tinyMCE.majorVersion=tinymce.majorVersion;tinyMCE.minorVersion=tinymce.minorVersion;tinyMCE.releaseDate=tinymce.releaseDate;tinyMCE.baseURL=tinymce.baseURL;tinyMCE.isIE=tinyMCE.isMSIE=tinymce.isIE||tinymce.isOpera;tinyMCE.isMSIE5=tinymce.isIE;tinyMCE.isMSIE5_0=tinymce.isIE;tinyMCE.isMSIE7=tinymce.isIE;tinyMCE.isGecko=tinymce.isGecko;tinyMCE.isSafari=tinymce.isWebKit;tinyMCE.isOpera=tinymce.isOpera;tinyMCE.isMac=false;tinyMCE.isNS7=false;tinyMCE.isNS71=false;tinyMCE.compat=true;TinyMCE_Engine=tinyMCE;tinymce.extend(tinyMCE,{getParam:function(n,dv){return this.activeEditor.getParam(n,dv);},addEvent:function(e,na,f,sc){tinymce.dom.Event.add(e,na,f,sc||this);},getControlHTML:function(n){return EditorManager.activeEditor.controlManager.createControl(n);},loadCSS:function(u){tinymce.DOM.loadCSS(u);},importCSS:function(doc,u){if(doc==document)this.loadCSS(u);else new tinymce.dom.DOMUtils(doc).loadCSS(u);},log:function(){console.debug.apply(console,arguments);},getLang:function(n,dv){var v=EditorManager.activeEditor.getLang(n.replace(/^lang_/g,''),dv);if(/^[0-9\-.]+$/g.test(v))return parseInt(v);return v;},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.execCommand;},triggerNodeChange:function(){EditorManager.activeEditor.nodeChanged();},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return tinymce.trim(s);},xmlEncode:function(s){return tinymce.DOM.encode(s);},explode:function(s,d){var o=[];tinymce.each(s.split(d),function(v){if(v!='')o.push(v);});return o;},switchClass:function(id,cls){var b;if(/^mceButton/.test(cls)){b=EditorManager.activeEditor.controlManager.get(id);if(!b)return;switch(cls){case"mceButtonNormal":b.setDisabled(false);b.setActive(false);return;case"mceButtonDisabled":b.setDisabled(true);return;case"mceButtonSelected":b.setActive(true);b.setDisabled(false);return;}}},addCSSClass:function(e,n,b){return tinymce.DOM.addClass(e,n,b);},hasCSSClass:function(e,n){return tinymce.DOM.hasClass(e,n);},removeCSSClass:function(e,n){return tinymce.DOM.removeClass(e,n);},getCSSClasses:function(){var cl=EditorManager.activeEditor.dom.getClasses(),o=[];each(cl,function(c){o.push(c['class']);});return o;},setWindowArg:function(n,v){EditorManager.activeEditor.windowManager.params[n]=v;},getWindowArg:function(n,dv){var wm=EditorManager.activeEditor.windowManager,v;v=wm.getParam(n);if(v==='')return'';return v||wm.getFeature(n)||dv;},getParentNode:function(n,f){return this._getDOM().getParent(n,f);},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a;},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn);},na?na:[]);},getAttrib:function(e,n,dv){return this._getDOM().getAttrib(e,n,dv);},setAttrib:function(e,n,v){return this._getDOM().setAttrib(e,n,v);},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i];}return o;},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a);}return a;},getContent:function(){return EditorManager.activeEditor.getContent();},getParentElement:function(n,na,f){if(na)na=new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$','g');return this._getDOM().getParent(n,function(n){return n.nodeType==1&&(!na||na.test(n.nodeName))&&(!f||f(n));},this.activeEditor.getBody());},importPluginLanguagePack:function(n){tinymce.PluginManager.requireLangPack(n);},getButtonHTML:function(cn,lang,img,c,u,v){var ed=EditorManager.activeEditor;img=img.replace(/\{\$pluginurl\}/g,tinyMCE.pluginURL);img=img.replace(/\{\$themeurl\}/g,tinyMCE.themeURL);lang=lang.replace(/^lang_/g,'');return ed.controlManager.createButton(cn,{title:lang,command:c,ui:u,value:v,scope:this,'class':'compat',image:img});},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w;}return false;},accessibleEventHandler:function(e){var elm,win=this._win;e=tinymce.isIE?win.event:e;elm=tinymce.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null;}return true;}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null;}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false;}return true;},cancelEvent:function(e){return tinymce.dom.Event.cancel(e);},handleVisualAid:function(e){EditorManager.activeEditor.addVisual(e);},getAbsPosition:function(n,r){return tinymce.DOM.getPos(n,r);},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s;},getVisualAidClass:function(s){return s;},parseStyle:function(s){return this._getDOM().parseStyle(s);},serializeStyle:function(s){return this._getDOM().serializeStyle(s);},openWindow:function(tpl,args){var ed=EditorManager.activeEditor,o={},n;for(n in tpl)o[n]=tpl[n];tpl=o;args=args||{};tpl.url=new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);tpl.inline=tpl.inline||args.inline;ed.windowManager.open(tpl,args);},closeWindow:function(win){EditorManager.activeEditor.windowManager.close(win);},getOuterHTML:function(e){return tinymce.DOM.getOuterHTML(e);},setOuterHTML:function(e,h,d){return tinymce.DOM.setOuterHTML(e,h,d);},hasPlugin:function(n){return tinymce.PluginManager.get(n)!=null;},_setEventsEnabled:function(){},addPlugin:function(pn,f){var t=this;function PluginWrapper(ed){tinyMCE.selectedInstance=ed;ed.onInit.add(function(){t.settings=ed.settings;t.settings['base_href']=tinyMCE.documentBasePath;tinyMCE.settings=t.settings;tinyMCE.documentBasePath=ed.documentBasePath;if(f.initInstance)f.initInstance(ed);ed.contentDocument=ed.getDoc();ed.contentWindow=ed.getWin();ed.undoRedo=ed.undoManager;ed.startContent=ed.getContent({format:'raw'});tinyMCE.instances[ed.id]=ed;tinyMCE.loadedFiles=[];});ed.onActivate.add(function(){tinyMCE.settings=ed.settings;tinyMCE.selectedInstance=ed;});if(f.handleNodeChange){ed.onNodeChange.add(function(ed,cm,n){f.handleNodeChange(ed.id,n,0,0,false,!ed.selection.isCollapsed());});}if(f.onChange){ed.onChange.add(function(ed,n){return f.onChange(ed);});}if(f.cleanup){ed.onGetContent.add(function(){});}this.getInfo=function(){return f.getInfo();};this.createControl=function(n){tinyMCE.pluginURL=tinymce.baseURL+'/plugins/'+pn;tinyMCE.themeURL=tinymce.baseURL+'/themes/'+tinyMCE.activeEditor.settings.theme;if(f.getControlHTML)return f.getControlHTML(n);return null;};this.execCommand=function(cmd,ui,val){if(f.execCommand)return f.execCommand(ed.id,ed.getBody(),cmd,ui,val);return false;};};tinymce.PluginManager.add(pn,PluginWrapper);},_getDOM:function(){return tinyMCE.activeEditor?tinyMCE.activeEditor.dom:tinymce.DOM;},convertRelativeToAbsoluteURL:function(b,u){return new tinymce.util.URI(b).toAbsolute(u);},convertAbsoluteURLToRelativeURL:function(b,u){return new tinymce.util.URI(b).toRelative(u);}});tinymce.extend(tinymce.Editor.prototype,{getFocusElement:function(){return this.selection.getNode();},getData:function(n){if(!this.data)this.data=[];if(!this.data[n])this.data[n]=[];return this.data[n];},hasPlugin:function(n){return this.plugins[n]!=null;},getContainerWin:function(){return window;},getHTML:function(raw){return this.getContent({format:raw?'raw':'html'});},setHTML:function(h){this.setContent(h);},getSel:function(){return this.selection.getSel();},getRng:function(){return this.selection.getRng();},isHidden:function(){var s;if(!tinymce.isGecko)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},translate:function(s){var c=this.settings.language,o;if(!s)return s;o=tinymce.EditorManager.i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{#'+b+'}';});o=o.replace(/{\$lang_([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{$lang_'+b+'}';});return o;},repaint:function(){this.execCommand('mceRepaint');}});tinymce.extend(tinymce.dom.Selection.prototype,{getSelectedText:function(){return this.getContent({format:'text'});},getSelectedHTML:function(){return this.getContent({format:'html'});},getFocusElement:function(){return this.getNode();},selectNode:function(node,collapse,select_text_node,to_start){var t=this;t.select(node,select_text_node||0);if(!is(collapse))collapse=true;if(collapse){if(!is(to_start))to_start=true;t.collapse(to_start);}}});}).call(this);tinymce.PluginManager.add('compat2x',tinymce.plugins.Compat2x);})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/compat2x/editor_plugin_src.js
+++ /dev/null
@@ -1,617 +1,1 @@
-/**

- * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $

- *

- * @author Moxiecode


- */

-

-(function() {

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;

-

-	tinymce.create('tinymce.plugins.Compat2x', {

-		getInfo : function() {

-			return {

-				longname : 'Compat2x',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',

-				version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

-			};

-		}

-	});

-

-	(function() {

-		// Extend tinyMCE/EditorManager

-		tinymce.extend(tinyMCE, {

-			addToLang : function(p, l) {

-				each(l, function(v, k) {

-					tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;

-				});

-			},

-

-			getInstanceById : function(n) {

-				return this.get(n);

-			}

-		});

-	})();

-

-	(function() {

-		var EditorManager = tinymce.EditorManager;

-

-		tinyMCE.instances = {};

-		tinyMCE.plugins = {};

-		tinymce.PluginManager.onAdd.add(function(pm, n, p) {

-			tinyMCE.plugins[n] = p;

-		});

-

-		tinyMCE.majorVersion = tinymce.majorVersion;

-		tinyMCE.minorVersion = tinymce.minorVersion;

-		tinyMCE.releaseDate = tinymce.releaseDate;

-		tinyMCE.baseURL = tinymce.baseURL;

-		tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;

-		tinyMCE.isMSIE5 = tinymce.isIE;

-		tinyMCE.isMSIE5_0 = tinymce.isIE;

-		tinyMCE.isMSIE7 = tinymce.isIE;

-		tinyMCE.isGecko = tinymce.isGecko;

-		tinyMCE.isSafari = tinymce.isWebKit;

-		tinyMCE.isOpera = tinymce.isOpera;

-		tinyMCE.isMac = false;

-		tinyMCE.isNS7 = false;

-		tinyMCE.isNS71 = false;

-		tinyMCE.compat = true;

-

-		// Extend tinyMCE class

-		TinyMCE_Engine = tinyMCE;

-		tinymce.extend(tinyMCE, {

-			getParam : function(n, dv) {

-				return this.activeEditor.getParam(n, dv);

-			},

-

-			addEvent : function(e, na, f, sc) {

-				tinymce.dom.Event.add(e, na, f, sc || this);

-			},

-

-			getControlHTML : function(n) {

-				return EditorManager.activeEditor.controlManager.createControl(n);

-			},

-

-			loadCSS : function(u) {

-				tinymce.DOM.loadCSS(u);

-			},

-

-			importCSS : function(doc, u) {

-				if (doc == document)

-					this.loadCSS(u);

-				else

-					new tinymce.dom.DOMUtils(doc).loadCSS(u);

-			},

-

-			log : function() {

-				console.debug.apply(console, arguments);

-			},

-

-			getLang : function(n, dv) {

-				var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);

-

-				// Is number

-				if (/^[0-9\-.]+$/g.test(v))

-					return parseInt(v);

-

-				return v;

-			},

-

-			isInstance : function(o) {

-				return o != null && typeof(o) == "object" && o.execCommand;

-			},

-

-			triggerNodeChange : function() {

-				EditorManager.activeEditor.nodeChanged();

-			},

-

-			regexpReplace : function(in_str, reg_exp, replace_str, opts) {

-				var re;

-

-				if (in_str == null)

-					return in_str;

-

-				if (typeof(opts) == "undefined")

-					opts = 'g';

-

-				re = new RegExp(reg_exp, opts);

-

-				return in_str.replace(re, replace_str);

-			},

-

-			trim : function(s) {

-				return tinymce.trim(s);

-			},

-

-			xmlEncode : function(s) {

-				return tinymce.DOM.encode(s);

-			},

-

-			explode : function(s, d) {

-				var o = [];

-

-				tinymce.each(s.split(d), function(v) {

-					if (v != '')

-						o.push(v);

-				});

-

-				return o;

-			},

-

-			switchClass : function(id, cls) {

-				var b;

-

-				if (/^mceButton/.test(cls)) {

-					b = EditorManager.activeEditor.controlManager.get(id);

-

-					if (!b)

-						return;

-

-					switch (cls) {

-						case "mceButtonNormal":

-							b.setDisabled(false);

-							b.setActive(false);

-							return;

-

-						case "mceButtonDisabled":

-							b.setDisabled(true);

-							return;

-

-						case "mceButtonSelected":

-							b.setActive(true);

-							b.setDisabled(false);

-							return;

-					}

-				}

-			},

-

-			addCSSClass : function(e, n, b) {

-				return tinymce.DOM.addClass(e, n, b);

-			},

-

-			hasCSSClass : function(e, n) {

-				return tinymce.DOM.hasClass(e, n);

-			},

-

-			removeCSSClass : function(e, n) {

-				return tinymce.DOM.removeClass(e, n);

-			},

-

-			getCSSClasses : function() {

-				var cl = EditorManager.activeEditor.dom.getClasses(), o = [];

-

-				each(cl, function(c) {

-					o.push(c['class']);

-				});

-

-				return o;

-			},

-

-			setWindowArg : function(n, v) {

-				EditorManager.activeEditor.windowManager.params[n] = v;

-			},

-

-			getWindowArg : function(n, dv) {

-				var wm = EditorManager.activeEditor.windowManager, v;

-

-				v = wm.getParam(n);

-				if (v === '')

-					return '';

-

-				return v || wm.getFeature(n) || dv;

-			},

-

-			getParentNode : function(n, f) {

-				return this._getDOM().getParent(n, f);

-			},

-

-			selectElements : function(n, na, f) {

-				var i, a = [], nl, x;

-

-				for (x=0, na = na.split(','); x<na.length; x++)

-					for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)

-						(!f || f(nl[i])) && a.push(nl[i]);

-

-				return a;

-			},

-

-			getNodeTree : function(n, na, t, nn) {

-				return this.selectNodes(n, function(n) {

-					return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);

-				}, na ? na : []);

-			},

-

-			getAttrib : function(e, n, dv) {

-				return this._getDOM().getAttrib(e, n, dv);

-			},

-

-			setAttrib : function(e, n, v) {

-				return this._getDOM().setAttrib(e, n, v);

-			},

-

-			getElementsByAttributeValue : function(n, e, a, v) {

-				var i, nl = n.getElementsByTagName(e), o = [];

-

-				for (i=0; i<nl.length; i++) {

-					if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)

-						o[o.length] = nl[i];

-				}

-

-				return o;

-			},

-

-			selectNodes : function(n, f, a) {

-				var i;

-

-				if (!a)

-					a = [];

-

-				if (f(n))

-					a[a.length] = n;

-

-				if (n.hasChildNodes()) {

-					for (i=0; i<n.childNodes.length; i++)

-						tinyMCE.selectNodes(n.childNodes[i], f, a);

-				}

-

-				return a;

-			},

-

-			getContent : function() {

-				return EditorManager.activeEditor.getContent();

-			},

-

-			getParentElement : function(n, na, f) {

-				if (na)

-					na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');

-

-				return this._getDOM().getParent(n, function(n) {

-					return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));

-				}, this.activeEditor.getBody());

-			},

-

-			importPluginLanguagePack : function(n) {

-				tinymce.PluginManager.requireLangPack(n);

-			},

-

-			getButtonHTML : function(cn, lang, img, c, u, v) {

-				var ed = EditorManager.activeEditor;

-

-				img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);

-				img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);

-				lang = lang.replace(/^lang_/g, '');

-

-				return ed.controlManager.createButton(cn, {

-					title : lang,

-					command : c,

-					ui : u,

-					value : v,

-					scope : this,

-					'class' : 'compat',

-					image : img

-				});

-			},

-

-			addSelectAccessibility : function(e, s, w) {

-				// Add event handlers 

-				if (!s._isAccessible) {

-					s.onkeydown = tinyMCE.accessibleEventHandler;

-					s.onblur = tinyMCE.accessibleEventHandler;

-					s._isAccessible = true;

-					s._win = w;

-				}

-

-				return false;

-			},

-

-			accessibleEventHandler : function(e) {

-				var elm, win = this._win;

-

-				e = tinymce.isIE ? win.event : e;

-				elm = tinymce.isIE ? e.srcElement : e.target;

-

-				// Unpiggyback onchange on blur

-				if (e.type == "blur") {

-					if (elm.oldonchange) {

-						elm.onchange = elm.oldonchange;

-						elm.oldonchange = null;

-					}

-

-					return true;

-				}

-

-				// Piggyback onchange

-				if (elm.nodeName == "SELECT" && !elm.oldonchange) {

-					elm.oldonchange = elm.onchange;

-					elm.onchange = null;

-				}

-

-				// Execute onchange and remove piggyback

-				if (e.keyCode == 13 || e.keyCode == 32) {

-					elm.onchange = elm.oldonchange;

-					elm.onchange();

-					elm.oldonchange = null;

-

-					tinyMCE.cancelEvent(e);

-					return false;

-				}

-

-				return true;

-			},

-

-			cancelEvent : function(e) {

-				return tinymce.dom.Event.cancel(e);

-			},

-

-			handleVisualAid : function(e) {

-				EditorManager.activeEditor.addVisual(e);

-			},

-

-			getAbsPosition : function(n, r) {

-				return tinymce.DOM.getPos(n, r);

-			},

-

-			cleanupEventStr : function(s) {

-				s = "" + s;

-				s = s.replace('function anonymous()\n{\n', '');

-				s = s.replace('\n}', '');

-				s = s.replace(/^return true;/gi, ''); // Remove event blocker

-

-				return s;

-			},

-

-			getVisualAidClass : function(s) {

-				// TODO: Implement

-				return s;

-			},

-

-			parseStyle : function(s) {

-				return this._getDOM().parseStyle(s);

-			},

-

-			serializeStyle : function(s) {

-				return this._getDOM().serializeStyle(s);

-			},

-

-			openWindow : function(tpl, args) {

-				var ed = EditorManager.activeEditor, o = {}, n;

-

-				// Convert name/value array to object

-				for (n in tpl)

-					o[n] = tpl[n];

-

-				tpl = o;

-

-				args = args || {};

-				tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);

-				tpl.inline = tpl.inline || args.inline;

-

-				ed.windowManager.open(tpl, args);

-			},

-

-			closeWindow : function(win) {

-				EditorManager.activeEditor.windowManager.close(win);

-			},

-

-			getOuterHTML : function(e) {

-				return tinymce.DOM.getOuterHTML(e);

-			},

-

-			setOuterHTML : function(e, h, d) {

-				return tinymce.DOM.setOuterHTML(e, h, d);

-			},

-

-			hasPlugin : function(n) {

-				return tinymce.PluginManager.get(n) != null;

-			},

-

-			_setEventsEnabled : function() {

-				// Ignore it!!

-			},

-

-			addPlugin : function(pn, f) {

-				var t = this;

-

-				function PluginWrapper(ed) {

-					tinyMCE.selectedInstance = ed;

-

-					ed.onInit.add(function() {

-						t.settings = ed.settings;

-						t.settings['base_href'] = tinyMCE.documentBasePath;

-						tinyMCE.settings = t.settings;

-						tinyMCE.documentBasePath = ed.documentBasePath;

-						//ed.formElement = DOM.get(ed.id);

-

-						if (f.initInstance)

-							f.initInstance(ed);

-

-						ed.contentDocument = ed.getDoc();

-						ed.contentWindow = ed.getWin();

-						ed.undoRedo = ed.undoManager;

-						ed.startContent = ed.getContent({format : 'raw'});

-

-						tinyMCE.instances[ed.id] = ed;

-						tinyMCE.loadedFiles = [];

-					});

-

-					ed.onActivate.add(function() {

-						tinyMCE.settings = ed.settings;

-						tinyMCE.selectedInstance = ed;

-					});

-

-				/*	if (f.removeInstance) {

-						ed.onDestroy.add(function() {

-							return f.removeInstance(ed.id);

-						});

-					}*/

-

-					if (f.handleNodeChange) {

-						ed.onNodeChange.add(function(ed, cm, n) {

-							f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());

-						});

-					}

-

-					if (f.onChange) {

-						ed.onChange.add(function(ed, n) {

-							return f.onChange(ed);

-						});

-					}

-

-					if (f.cleanup) {

-						ed.onGetContent.add(function() {

-							//f.cleanup(type, content, inst);

-						});

-					}

-

-					this.getInfo = function() {

-						return f.getInfo();

-					};

-

-					this.createControl = function(n) {

-						tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;

-						tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;

-

-						if (f.getControlHTML)

-							return f.getControlHTML(n);

-

-						return null;

-					};

-

-					this.execCommand = function(cmd, ui, val) {

-						if (f.execCommand)

-							return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);

-

-						return false;

-					};

-				};

-

-				tinymce.PluginManager.add(pn, PluginWrapper);

-			},

-

-			_getDOM : function() {

-				return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;

-			},

-

-			convertRelativeToAbsoluteURL : function(b, u) {

-				return new tinymce.util.URI(b).toAbsolute(u);

-			},

-

-			convertAbsoluteURLToRelativeURL : function(b, u) {

-				return new tinymce.util.URI(b).toRelative(u);

-			}

-		});

-

-		// Extend Editor class

-		tinymce.extend(tinymce.Editor.prototype, {

-			getFocusElement : function() {

-				return this.selection.getNode();

-			},

-

-			getData : function(n) {

-				if (!this.data)

-					this.data = [];

-

-				if (!this.data[n])

-					this.data[n] = [];

-

-				return this.data[n];

-			},

-

-			hasPlugin : function(n) {

-				return this.plugins[n] != null;

-			},

-

-			getContainerWin : function() {

-				return window;

-			},

-

-			getHTML : function(raw) {

-				return this.getContent({ format : raw ? 'raw' : 'html'});

-			},

-

-			setHTML : function(h) {

-				this.setContent(h);

-			},

-

-			getSel : function() {

-				return this.selection.getSel();

-			},

-

-			getRng : function() {

-				return this.selection.getRng();

-			},

-

-			isHidden : function() {

-				var s;

-

-				if (!tinymce.isGecko)

-					return false;

-

-				s = this.getSel();

-

-				// Weird, wheres that cursor selection?

-				return (!s || !s.rangeCount || s.rangeCount == 0);

-			},

-

-			translate : function(s) {

-				var c = this.settings.language, o;

-

-				if (!s)

-					return s;

-

-				o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {

-					return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';

-				});

-

-				o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {

-					return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';

-				});

-

-				return o;

-			},

-

-			repaint : function() {

-				this.execCommand('mceRepaint');

-			}

-		});

-

-		// Extend selection

-		tinymce.extend(tinymce.dom.Selection.prototype, {

-			getSelectedText : function() {

-				return this.getContent({format : 'text'});

-			},

-

-			getSelectedHTML : function() {

-				return this.getContent({format : 'html'});

-			},

-

-			getFocusElement : function() {

-				return this.getNode();

-			},

-

-			selectNode : function(node, collapse, select_text_node, to_start) {

-				var t = this;

-

-				t.select(node, select_text_node || 0);

-

-				if (!is(collapse))

-					collapse = true;

-

-				if (collapse) {

-					if (!is(to_start))

-						to_start = true;

-

-					t.collapse(to_start);

-				}

-			}

-		});

-	}).call(this);

-

-	// Register plugin

-	tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);

-})();

-

 

--- a/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(e){var h=this,f,d,i;h.editor=e;d=e.settings.contextmenu_never_use_native;h.onContextMenu=new tinymce.util.Dispatcher(this);f=e.onContextMenu.add(function(j,k){if((i!==0?i:k.ctrlKey)&&!d){return}a.cancel(k);if(k.target.nodeName=="IMG"){j.selection.select(k.target)}h._getMenu(j).showMenu(k.clientX||k.pageX,k.clientY||k.pageY);a.add(j.getDoc(),"click",function(l){g(j,l)});j.nodeChanged()});e.onRemove.add(function(){if(h._menu){h._menu.removeAll()}});function g(j,k){i=0;if(k&&k.button==2){i=k.ctrlKey;return}if(h._menu){h._menu.removeAll();h._menu.destroy();a.remove(j.getDoc(),"click",g);h._menu=null}}e.onMouseDown.add(g);e.onKeyDown.add(g);e.onKeyDown.add(function(j,k){if(k.shiftKey&&!k.ctrlKey&&!k.altKey&&k.keyCode===121){a.cancel(k);f(j,k)}})},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(e){var g=this,d=g._menu,j=e.selection,f=j.isCollapsed(),h=j.getNode()||e.getBody(),i,k;if(d){d.removeAll();d.destroy()}k=b.getPos(e.getContentAreaContainer());d=e.controlManager.createDropMenu("contextmenu",{offset_x:k.x+e.getParam("contextmenu_offset_x",0),offset_y:k.y+e.getParam("contextmenu_offset_y",0),constrain:1,keyboard_focus:true});g._menu=d;d.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(f);d.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(f);d.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((h.nodeName=="A"&&!e.dom.getAttrib(h,"name"))||!f){d.addSeparator();d.add({title:"advanced.link_desc",icon:"link",cmd:e.plugins.advlink?"mceAdvLink":"mceLink",ui:true});d.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}d.addSeparator();d.add({title:"advanced.image_desc",icon:"image",cmd:e.plugins.advimage?"mceAdvImage":"mceImage",ui:true});d.addSeparator();i=d.addMenu({title:"contextmenu.align"});i.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});i.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});i.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});i.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});g.onContextMenu.dispatch(g,d,h,f);return d}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
+++ /dev/null
@@ -1,162 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;

-

-	/**

-	 * This plugin a context menu to TinyMCE editor instances.

-	 *

-	 * @class tinymce.plugins.ContextMenu

-	 */

-	tinymce.create('tinymce.plugins.ContextMenu', {

-		/**

-		 * Initializes the plugin, this will be executed after the plugin has been created.

-		 * This call is done before the editor instance has finished it's initialization so use the onInit event

-		 * of the editor instance to intercept that event.

-		 *

-		 * @method init

-		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.

-		 * @param {string} url Absolute URL to where the plugin is located.

-		 */

-		init : function(ed) {

-			var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey;

-

-			t.editor = ed;

-

-			contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;

-

-			/**

-			 * This event gets fired when the context menu is shown.

-			 *

-			 * @event onContextMenu

-			 * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.

-			 * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.

-			 */

-			t.onContextMenu = new tinymce.util.Dispatcher(this);

-

-			showMenu = ed.onContextMenu.add(function(ed, e) {

-				// Block TinyMCE menu on ctrlKey and work around Safari issue

-				if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative)

-					return;

-

-				Event.cancel(e);

-

-				// Select the image if it's clicked. WebKit would other wise expand the selection

-				if (e.target.nodeName == 'IMG')

-					ed.selection.select(e.target);

-

-				t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY);

-				Event.add(ed.getDoc(), 'click', function(e) {

-					hide(ed, e);

-				});

-

-				ed.nodeChanged();

-			});

-

-			ed.onRemove.add(function() {

-				if (t._menu)

-					t._menu.removeAll();

-			});

-

-			function hide(ed, e) {

-				realCtrlKey = 0;

-

-				// Since the contextmenu event moves

-				// the selection we need to store it away

-				if (e && e.button == 2) {

-					realCtrlKey = e.ctrlKey;

-					return;

-				}

-

-				if (t._menu) {

-					t._menu.removeAll();

-					t._menu.destroy();

-					Event.remove(ed.getDoc(), 'click', hide);

-					t._menu = null;

-				}

-			};

-

-			ed.onMouseDown.add(hide);

-			ed.onKeyDown.add(hide);

-			ed.onKeyDown.add(function(ed, e) {

-				if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) {

-					Event.cancel(e);

-					showMenu(ed, e);

-				}

-			});

-		},

-

-		/**

-		 * Returns information about the plugin as a name/value array.

-		 * The current keys are longname, author, authorurl, infourl and version.

-		 *

-		 * @method getInfo

-		 * @return {Object} Name/value array containing information about the plugin.

-		 */

-		getInfo : function() {

-			return {

-				longname : 'Contextmenu',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		_getMenu : function(ed) {

-			var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p;

-

-			if (m) {

-				m.removeAll();

-				m.destroy();

-			}

-

-			p = DOM.getPos(ed.getContentAreaContainer());

-

-			m = ed.controlManager.createDropMenu('contextmenu', {

-				offset_x : p.x + ed.getParam('contextmenu_offset_x', 0),

-				offset_y : p.y + ed.getParam('contextmenu_offset_y', 0),

-				constrain : 1,

-				keyboard_focus: true

-			});

-

-			t._menu = m;

-

-			m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);

-			m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);

-			m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});

-

-			if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {

-				m.addSeparator();

-				m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});

-				m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});

-			}

-

-			m.addSeparator();

-			m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});

-

-			m.addSeparator();

-			am = m.addMenu({title : 'contextmenu.align'});

-			am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});

-			am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});

-			am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});

-			am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});

-

-			t.onContextMenu.dispatch(t, m, el, col);

-

-			return m;

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/devkit/css/devkit.css
+++ /dev/null
@@ -1,118 +1,1 @@
-body {

-	overflow: hidden;

-}

-

-h1 {

-	font-size: 14px;

-	margin: 0 0 10px 0;

-}

-

-h2 {

-	font-size: 12px;

-	margin: 3px 0 3px 0;

-}

-

-h3 {

-	font-size: 11px;

-	margin: 3px 0 3px 0;

-}

-

-#log {

-	font-family: Verdana;

-	border: 1px solid gray;

-	width: 100%; height: 240px;

-	overflow: scroll;

-	white-space: nowrap;

-}

-

-#log span {

-	display: block;

-}

-

-#log span.msg {

-	float: left;

-}

-

-#log span.time {

-	float: left;

-}

-

-#log br {

-	clear: both;

-}

-

-#logfilter {

-	width: 350px;

-}

-

-#logenabled {

-	border: 0;

-}

-

-#settings_panel span, #info_panel span, #content_panel span, #command_states_panel span, #undo_redo_panel span {

-	display: block;

-	margin: 5px 0 5px 0;

-}

-

-div.data {

-	width: 100%; height: 240px;

-	overflow: scroll;

-	border: 1px solid gray;

-}

-

-#misc_panel div.data {

-	height: 270px;

-}

-

-.data input {

-	width: 265px;

-	border: 0;

-}

-

-.data h2 {

-	margin-left: 5px;

-}

-

-.data h3 {

-	margin-left: 7px;

-}

-

-.data div {

-	margin-left: 7px;

-}

-

-.data table {

-	margin: 0 0 15px 15px;

-}

-

-.data p {

-	margin: 0; padding: 0;

-	margin-top: 5px;

-	margin-left: 5px;

-}

-

-table, td {

-	border: 1px solid gray;

-	border-collapse: collapse;

-}

-

-#flip {

-	position: absolute;

-	left: 295; top: 384px;

-}

-

-.bspec {

-	color: gray;

-}

-

-.dep {

-	color: #880000;

-}

-

-.col1 {

-	width: 265px;

-}

-

-div.undodata {

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/devkit/css/devkit_ui.css
+++ /dev/null
@@ -1,16 +1,1 @@
-#devkit {

-	position: absolute;

-	top: -385px; right: 0;

-	width: 640px; height: 390px;

-	border: 1px solid black;

-	z-index: 10000;

-}

-

-.devkitup {

-	top: -385px !important;

-}

-

-.devkitdown {

-	top: 0 !important;

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/devkit/devkit.htm
+++ /dev/null
@@ -1,141 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{$lang_devkit_title}</title>

-	<script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script language="javascript" type="text/javascript" src="jscripts/devkit.js"></script>

-	<script language="javascript" type="text/javascript" src="jscripts/diff.js"></script>

-	<link href="css/devkit.css" rel="stylesheet" type="text/css" />

-	<base target="_self" />

-</head>

-<body id="devkit" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">

-    <form action="#">

-		<h1>{$lang_devkit_title}</h1>

-

-		<div class="tabs">

-			<ul>

-				<li id="log_tab" class="current"><span><a href="javascript:mcTabs.displayTab('log_tab','log_panel');" onmousedown="return false;">{$lang_devkit_log_tab}</a></span></li>

-				<li id="info_tab"><span><a href="javascript:mcTabs.displayTab('info_tab','info_panel');" onmousedown="return false;">{$lang_devkit_info_tab}</a></span></li>

-				<li id="settings_tab"><span><a href="javascript:mcTabs.displayTab('settings_tab','settings_panel');" onmousedown="return false;">{$lang_devkit_settings_tab}</a></span></li>

-				<li id="content_tab"><span><a href="javascript:mcTabs.displayTab('content_tab','content_panel');" onmousedown="return false;">{$lang_devkit_content_tab}</a></span></li>

-				<!-- <li id="command_states_tab"><span><a href="javascript:mcTabs.displayTab('command_states_tab','command_states_panel');" onmousedown="return false;">{$lang_devkit_command_states_tab}</a></span></li> -->

-				<li id="undo_redo_tab"><span><a href="javascript:mcTabs.displayTab('undo_redo_tab','undo_redo_panel');" onmousedown="return false;">{$lang_devkit_undo_redo_tab}</a></span></li>

-				<li id="misc_tab"><span><a href="javascript:mcTabs.displayTab('misc_tab','misc_panel');" onmousedown="return false;">{$lang_devkit_misc_tab}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="log_panel" class="panel current">

-				<fieldset>

-					<legend>{$lang_devkit_log_tab}</legend>

-

-					<div style="float: left">

-						<label>{$lang_devkit_filter} </label><input type="text" id="logfilter" name="logfilter" value="" onchange="changeFilter(this.value);" />

-					</div>

-

-					<div style="float: left">

-						<input type="checkbox" id="logenabled" name="logenabled" value="true" checked="checked" onclick="toggleLog(this.checked);" />

-					</div>

-

-					<div style="float: right">

-						<a href="javascript:clearLog();">[{$lang_devkit_clear_log}]</a>

-					</div>

-

-					<br style="clear: both" />

-

-					<div id="log">

-					</div>

-

-					<input type="checkbox" id="debug_events" name="debug_events" class="checkbox" onclick="toggleDebugEvents(this.checked);" /><label for="debug_events" onclick="toggleDebugEvents(this.form.debug_events.checked);">{$lang_devkit_debug_events}</label>

-				</fieldset>

-			</div>

-

-			<div id="info_panel" class="panel">

-				<fieldset>

-					<legend>{$lang_devkit_info_tab}</legend>

-

-					<span><a href="javascript:renderInfo();">[{$lang_devkit_refresh}]</a></span>

-

-					<div id="info" class="data">

-						<p>{$lang_devkit_info_help}</p>

-					</div>

-				</fieldset>

-			</div>

-

-			<div id="settings_panel" class="panel">

-			<fieldset>

-					<legend>{$lang_devkit_settings_tab}</legend>

-

-					<span><a href="javascript:renderSettings();">[{$lang_devkit_refresh}]</a></span>

-

-					<div id="settings" class="data">

-						<p>{$lang_devkit_settings_help}</p>

-					</div>

-				</fieldset>

-			</div>

-

-			<div id="content_panel" class="panel">

-			<fieldset>

-					<legend>{$lang_devkit_content_tab}</legend>

-

-					<span><a href="javascript:renderContent();">[{$lang_devkit_refresh}]</a></span>

-

-					<div id="content" class="data">

-						<p>{$lang_devkit_content_help}</p>

-					</div>

-				</fieldset>

-			</div>

-

-			<div id="command_states_panel" class="panel">

-			<fieldset>

-					<legend>{$lang_devkit_command_states_tab}</legend>

-

-					<span><a href="javascript:renderCommandStates();">[{$lang_devkit_refresh}]</a></span>

-

-					<div id="command_states" class="data">

-						<p>{$lang_devkit_command_states_help}</p>

-					</div>

-				</fieldset>

-			</div>

-

-			<div id="undo_redo_panel" class="panel">

-				<fieldset>

-					<legend>{$lang_devkit_undo_redo_tab}</legend>

-

-					<span><a href="javascript:renderUndoRedo();">[{$lang_devkit_refresh}]</a></span>

-

-					<div id="undo_redo" class="data">

-						<p>{$lang_devkit_undo_redo_help}</p>

-					</div>

-

-					<input type="checkbox" id="undo_diff" name="undo_diff" class="checkbox" /><label for="undo_diff">{$lang_devkit_undo_diff}</label>

-				</fieldset>

-			</div>

-

-			<div id="misc_panel" class="panel">

-				<fieldset>

-					<legend>{$lang_devkit_misc_tab}</legend>

-

-					<div class="data">

-						<p>{$lang_devkit_misc_help}</p>

-						<hr />

-						<p>Selection: <a href="#" onmousedown="return storeSelection();">[Store selection]</a> <a href="#" onmousedown="return restoreSelection();">[Restore selection]</a></p>

-						<hr />

-						<div><strong>Insert custom HTML content</strong></div>

-						<div><textarea id="htmlcont" name="htmlcont" style="width: 90%" rows="5"></textarea></div>

-						<div><a href="#" onclick="return tinyMCE.execCommand('mceInsertContent',false,document.getElementById('htmlcont').value);">[Insert content]</a></div>

-						<hr />

-						<div><strong>Eval JS:</strong></div>

-						<div><textarea id="jscont" name="jscont" style="width: 90%" rows="5">tinyMCE.execCommand('Bold',false,null);</textarea></div>

-						<div><a href="#" onclick="return parent.window.eval(document.getElementById('jscont').value);">[Evaluate]</a></div>

-					</div>

-				</fieldset>

-			</div>

-		</div>

-    </form>

-

-	<div id="flip"><a href="javascript:toggleFlip();" onmousedown="return false;"><img id="flipbtn" src="images/flip_down.gif" border="0" /></a></div>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/devkit/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.importPluginLanguagePack('devkit');var TinyMCE_DevKitPlugin={_logFilter:'\\[(importCSS|execCommand|execInstanceCommand|debug)\\]',_logPadding:'',_startTime:null,_benchMark:false,_winLoaded:false,_isDebugEvents:false,getInfo:function(){return{longname:'Development Kit',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/devkit',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){this._setup()},_setup:function(){if(this._loaded)return;this._loaded=true;document.___TinyMCE=tinyMCE;this._logFilter=tinyMCE.getParam('devkit_log_filter',this._logFilter);this._benchMark=tinyMCE.getParam('devkit_bench_mark',false);var ifr=document.createElement('iframe');ifr.setAttribute("id","devkit");ifr.setAttribute("frameBorder","0");ifr.setAttribute("src",tinyMCE.baseURL+'/plugins/devkit/devkit.htm');document.body.appendChild(ifr);tinyMCE.importCSS(document,tinyMCE.baseURL+'/plugins/devkit/css/devkit_ui.css')},_start:function(){this._logPadding+='\u00a0';return new Date().getTime()},_end:function(st){if(this._logPadding.length>0)this._logPadding=this._logPadding.substring(0,this._logPadding.length-1);if(this._benchMark)this._log("benchmark","Execution time: "+(new Date().getTime()-st))},_log:function(t){var m,a,i,e=document.getElementById('devkit'),now=new Date().getTime();if(!this._startTime)this._startTime=now;m=(this._logPadding.length>1?this._logPadding:'')+'['+(now-this._startTime)+'] ['+t+'] ';a=this._log.arguments;for(i=1;i<a.length;i++){if(typeof(a[i])=='undefined')continue;if(i>1)m+=', ';m+=a[i]}if(!new RegExp(this._logFilter,'gi').test(m)){if(this._logPadding.length>0)this._logPadding=this._logPadding.substring(0,this._logPadding.length-1);return}if(!this._winLoaded)tinyMCE.log[tinyMCE.log.length]=m;else e.contentWindow.debug(m)},_debugEvents:function(s){var i,ld,inst,n,ev=['CheckboxStateChange','DOMAttrModified','DOMMenuItemActive','DOMMenuItemInactive','DOMMouseScroll','DOMNodeInserted','DOMNodeRemoved','RadioStateChange','blur','broadcast','change','click','close','command','commandupdate','contextmenu','dblclick','dragdrop','dragenter','dragexit','draggesture','dragover','focus','input','keydown','keypress','keyup','load','mousedown','mouseout','mouseover','mouseup','overflow','overflowchanged','popuphidden','popuphiding','popupshowing','popupshown','select','syncfrompreference','synctopreference','underflow','unload','abort','activate','afterprint','afterupdate','beforeactivate','beforecopy','beforecut','beforedeactivate','beforeeditfocus','beforepaste','beforeprint','beforeunload','beforeupdate','bounce','cellchange','controlselect','copy','cut','dataavailable','datasetchanged','datasetcomplete','deactivate','dragend','dragleave','dragstart','drop','error','errorupdate','filterchange','finish','focusin','focusout','help','layoutcomplete','losecapture','mouseenter','mouseleave','mousewheel','move','moveend','movestart','paste','propertychange','readystatechange','reset','resize','resizeend','resizestart','rowenter','rowexit','rowsdelete','rowsinserted','scroll','selectionchange','selectstart','start','stop','submit'];if(TinyMCE_DevKitPlugin._isDebugEvents==s)return;TinyMCE_DevKitPlugin._isDebugEvents=s;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst)||inst.getDoc()==ld)continue;ld=inst.getDoc();for(i=0;i<ev.length;i++){if(s)tinyMCE.addEvent(ld,ev[i],TinyMCE_DevKitPlugin._debugEvent);else tinyMCE.removeEvent(ld,ev[i],TinyMCE_DevKitPlugin._debugEvent)}}},_debugEvent:function(e){var t;e=e?e:tinyMCE.selectedInstance.getWin().event;t=e.srcElement?e.srcElement:e.target;tinyMCE.debug(e.type,t?t.nodeName:'')},_serialize:function(o){var i,v,s=TinyMCE_DevKitPlugin._serialize;if(o==null)return'null';switch(typeof o){case'string':v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(new RegExp('([\u0080-\uFFFF\\x00-\\x1f\\"])','g'),function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a})+'"';case'object':if(o instanceof Array){for(i=0,v='[';i<o.length;i++)v+=(i>0?',':'')+s(o[i]);return v+']'}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}'}return''+o}};tinyMCE.__debug=tinyMCE.debug;tinyMCE.debug=function(){var a,i,m='',now=new Date().getTime(),start=TinyMCE_DevKitPlugin._startTime;if(!start)TinyMCE_DevKitPlugin._startTime=start=now;a=this.debug.arguments;for(i=0;i<a.length;i++){if(typeof(a[i])=='undefined')continue;if(i>0)m+=', ';m+=a[i]}TinyMCE_DevKitPlugin._log('debug',m)};tinyMCE.dump=function(o){tinyMCE.debug(TinyMCE_DevKitPlugin._serialize(o))};tinyMCE.sleep=function(t){var s=new Date().getTime(),b;while(new Date().getTime()-s<t)b=1};tinyMCE.__execCommand=tinyMCE.execCommand;tinyMCE.execCommand=function(command,user_interface,value){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execCommand',command,user_interface,value);r=tinyMCE.__execCommand(command,user_interface,value);dk._end(st);return r};tinyMCE.__execInstanceCommand=tinyMCE.execInstanceCommand;tinyMCE.execInstanceCommand=function(editor_id,command,user_interface,value,focus){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execInstanceCommand',editor_id,command,user_interface,value);r=tinyMCE.__execInstanceCommand(editor_id,command,user_interface,value);dk._end(st);return r};TinyMCE_Engine.prototype.__handleEvent=TinyMCE_Engine.prototype.handleEvent;TinyMCE_Engine.prototype.handleEvent=function(e){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('handleEvent',e.type);r=tinyMCE.__handleEvent(e);dk._end(st);return r};tinyMCE.__importCSS=tinyMCE.importCSS;tinyMCE.importCSS=function(doc,css){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('importCSS',doc,css);r=tinyMCE.__importCSS(doc,css);dk._end(st);return r};tinyMCE.__triggerNodeChange=tinyMCE.triggerNodeChange;tinyMCE.triggerNodeChange=function(focus,setup_content){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('triggerNodeChange',focus,setup_content);r=tinyMCE.__triggerNodeChange(focus,setup_content);dk._end(st);return r};tinyMCE.__dispatchCallback=tinyMCE.dispatchCallback;tinyMCE.dispatchCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('dispatchCallback',i,p,n);r=tinyMCE.__dispatchCallback(i,p,n);dk._end(st);return r};tinyMCE.__executeCallback=tinyMCE.executeCallback;tinyMCE.executeCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('executeCallback',i,p,n);r=tinyMCE.__executeCallback(i,p,n);dk._end(st);return r};tinyMCE.__execCommandCallback=tinyMCE.execCommandCallback;tinyMCE.execCommandCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execCommandCallback',i,p,n);r=tinyMCE.__execCommandCallback(i,p,n);dk._end(st);return r};tinyMCE.addPlugin("devkit",TinyMCE_DevKitPlugin);
+

--- a/tinymce/jscripts/tiny_mce/plugins/devkit/editor_plugin_src.js
+++ /dev/null
@@ -1,326 +1,1 @@
-/**

- * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $

- *

- * @author Moxiecode


- */

-

-tinyMCE.importPluginLanguagePack('devkit');

-

-var TinyMCE_DevKitPlugin = {

-	_logFilter : '\\[(importCSS|execCommand|execInstanceCommand|debug)\\]',

-	_logPadding : '',

-	_startTime : null,

-	_benchMark : false,

-	_winLoaded : false,

-	_isDebugEvents : false,

-

-	getInfo : function() {

-		return {

-			longname : 'Development Kit',

-			author : 'Moxiecode Systems AB',

-			authorurl : 'http://tinymce.moxiecode.com',

-			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/devkit',

-			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

-		};

-	},

-

-	initInstance : function(inst) {

-		this._setup();

-	},

-

-	_setup : function() {

-		if (this._loaded)

-			return;

-

-		this._loaded = true;

-

-		// Register a document reference for more easy access in the FF DOM inspector

-		document.___TinyMCE = tinyMCE;

-

-		// Setup devkit by settings

-		this._logFilter = tinyMCE.getParam('devkit_log_filter', this._logFilter);

-		this._benchMark = tinyMCE.getParam('devkit_bench_mark', false);

-

-		var ifr = document.createElement('iframe');

-

-		ifr.setAttribute("id", "devkit");

-		ifr.setAttribute("frameBorder", "0");

-		ifr.setAttribute("src", tinyMCE.baseURL + '/plugins/devkit/devkit.htm');

-

-		document.body.appendChild(ifr);

-

-		// Workaround for strange IE reload bug

-		//if (tinyMCE.isRealIE)

-		//	document.getElementById('devkit').outerHTML = document.getElementById('devkit').outerHTML;

-

-		tinyMCE.importCSS(document, tinyMCE.baseURL + '/plugins/devkit/css/devkit_ui.css');

-	},

-

-	_start : function() {

-		this._logPadding += '\u00a0';

-

-		return new Date().getTime();

-	},

-

-	_end : function(st) {

-		if (this._logPadding.length > 0)

-			this._logPadding = this._logPadding.substring(0, this._logPadding.length - 1);

-

-		if (this._benchMark)

-			this._log("benchmark", "Execution time: " + (new Date().getTime() - st));

-	},

-

-	_log : function(t) {

-		var m, a, i, e = document.getElementById('devkit'), now = new Date().getTime();

-

-		if (!this._startTime)

-			this._startTime = now;

-

-		m = (this._logPadding.length > 1 ? this._logPadding : '') + '[' + (now - this._startTime) + '] [' + t + '] ';

-

-		a = this._log.arguments;

-		for (i=1; i<a.length; i++) {

-			if (typeof(a[i]) == 'undefined')

-				continue;

-

-			if (i > 1)

-				m += ', ';

-

-			m += a[i];

-		}

-

-		if (!new RegExp(this._logFilter, 'gi').test(m)) {

-			if (this._logPadding.length > 0)

-				this._logPadding = this._logPadding.substring(0, this._logPadding.length - 1);

-

-			return;

-		}

-

-		if (!this._winLoaded)

-			tinyMCE.log[tinyMCE.log.length] = m;

-		else

-			e.contentWindow.debug(m);

-	},

-

-	_debugEvents : function(s) {

-		var i, ld, inst, n, ev = ['CheckboxStateChange','DOMAttrModified','DOMMenuItemActive',

-				'DOMMenuItemInactive','DOMMouseScroll','DOMNodeInserted','DOMNodeRemoved',

-				'RadioStateChange','blur','broadcast','change','click','close','command',

-				'commandupdate','contextmenu','dblclick','dragdrop','dragenter','dragexit',

-				'draggesture','dragover','focus','input','keydown','keypress','keyup','load',

-				'mousedown','mouseout','mouseover','mouseup','overflow','overflowchanged','popuphidden',

-				'popuphiding','popupshowing','popupshown','select','syncfrompreference','synctopreference',

-				'underflow','unload','abort','activate','afterprint','afterupdate','beforeactivate',

-				'beforecopy','beforecut','beforedeactivate','beforeeditfocus','beforepaste','beforeprint',

-				'beforeunload','beforeupdate','bounce','cellchange','controlselect','copy','cut',

-				'dataavailable','datasetchanged','datasetcomplete','deactivate','dragend','dragleave',

-				'dragstart','drop','error','errorupdate','filterchange','finish','focusin','focusout',

-				'help','layoutcomplete','losecapture','mouseenter','mouseleave','mousewheel',

-				'move','moveend','movestart','paste','propertychange','readystatechange','reset','resize',

-				'resizeend','resizestart','rowenter','rowexit','rowsdelete','rowsinserted','scroll',

-				'selectionchange','selectstart','start','stop','submit'];

-		// mousemove

-

-		if (TinyMCE_DevKitPlugin._isDebugEvents == s)

-			return;

-

-		TinyMCE_DevKitPlugin._isDebugEvents = s;

-

-		for (n in tinyMCE.instances) {

-			inst = tinyMCE.instances[n];

-

-			if (!tinyMCE.isInstance(inst) || inst.getDoc() == ld)

-				continue;

-

-			ld = inst.getDoc();

-

-			for (i=0; i<ev.length; i++) {

-				if (s)

-					tinyMCE.addEvent(ld, ev[i], TinyMCE_DevKitPlugin._debugEvent);

-				else

-					tinyMCE.removeEvent(ld, ev[i], TinyMCE_DevKitPlugin._debugEvent);

-			}

-		}

-	},

-

-	_debugEvent : function(e) {

-		var t;

-

-		e = e ? e : tinyMCE.selectedInstance.getWin().event;

-		t = e.srcElement ? e.srcElement : e.target;

-

-		tinyMCE.debug(e.type, t ? t.nodeName : '');

-	},

-

-	_serialize : function(o) {

-		var i, v, s = TinyMCE_DevKitPlugin._serialize;

-

-		if (o == null)

-			return 'null';

-

-		switch (typeof o) {

-			case 'string':

-				v = '\bb\tt\nn\ff\rr\""\'\'\\\\';

-

-				return '"' + o.replace(new RegExp('([\u0080-\uFFFF\\x00-\\x1f\\"])', 'g'), function(a, b) {

-					i = v.indexOf(b);

-

-					if (i+1)

-						return '\\' + v.charAt(i + 1);

-

-					a = b.charCodeAt().toString(16);

-

-					return '\\u' + '0000'.substring(a.length) + a;

-				}) + '"';

-

-			case 'object':

-				if (o instanceof Array) {

-					for (i=0, v = '['; i<o.length; i++)

-						v += (i > 0 ? ',' : '') + s(o[i]);

-

-					return v + ']';

-				}

-

-				v = '{';

-

-				for (i in o)

-					v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : '';

-

-				return v + '}';

-		}

-

-		return '' + o;

-	}

-};

-

-// Patch and piggy back functions

-tinyMCE.__debug = tinyMCE.debug;

-tinyMCE.debug = function() {

-	var a, i, m = '', now = new Date().getTime(), start = TinyMCE_DevKitPlugin._startTime;

-

-	if (!start)

-		TinyMCE_DevKitPlugin._startTime = start = now;

-

-	a = this.debug.arguments;

-	for (i=0; i<a.length; i++) {

-		if (typeof(a[i]) == 'undefined')

-			continue;

-

-		if (i > 0)

-			m += ', ';

-

-		m += a[i];

-	}

-

-	TinyMCE_DevKitPlugin._log('debug', m);

-};

-

-tinyMCE.dump = function(o) {

-	tinyMCE.debug(TinyMCE_DevKitPlugin._serialize(o));

-};

-

-tinyMCE.sleep = function(t) {

-	var s = new Date().getTime(), b;

-

-	while (new Date().getTime() - s < t) b=1;

-};

-

-tinyMCE.__execCommand = tinyMCE.execCommand;

-tinyMCE.execCommand = function(command, user_interface, value) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('execCommand', command, user_interface, value);

-	r = tinyMCE.__execCommand(command, user_interface, value);

-	dk._end(st);

-

-	return r;

-};

-

-tinyMCE.__execInstanceCommand = tinyMCE.execInstanceCommand;

-tinyMCE.execInstanceCommand = function(editor_id, command, user_interface, value, focus) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('execInstanceCommand', editor_id, command, user_interface, value);

-	r = tinyMCE.__execInstanceCommand(editor_id, command, user_interface, value);

-	dk._end(st);

-

-	return r;

-};

-

-TinyMCE_Engine.prototype.__handleEvent = TinyMCE_Engine.prototype.handleEvent;

-TinyMCE_Engine.prototype.handleEvent = function(e) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('handleEvent', e.type);

-	r = tinyMCE.__handleEvent(e);

-	dk._end(st);

-

-	return r;

-};

-

-tinyMCE.__importCSS = tinyMCE.importCSS;

-tinyMCE.importCSS = function(doc, css) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('importCSS', doc, css);

-	r = tinyMCE.__importCSS(doc, css);

-	dk._end(st);

-

-	return r;

-};

-

-tinyMCE.__triggerNodeChange = tinyMCE.triggerNodeChange;

-tinyMCE.triggerNodeChange = function(focus, setup_content) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('triggerNodeChange', focus, setup_content);

-	r = tinyMCE.__triggerNodeChange(focus, setup_content);

-	dk._end(st);

-

-	return r;

-};

-

-tinyMCE.__dispatchCallback = tinyMCE.dispatchCallback;

-tinyMCE.dispatchCallback = function(i, p, n) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('dispatchCallback', i, p, n);

-	r = tinyMCE.__dispatchCallback(i, p, n);

-	dk._end(st);

-

-	return r;

-};

-

-tinyMCE.__executeCallback = tinyMCE.executeCallback;

-tinyMCE.executeCallback = function(i, p, n) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('executeCallback', i, p, n);

-	r = tinyMCE.__executeCallback(i, p, n);

-	dk._end(st);

-

-	return r;

-};

-

-tinyMCE.__execCommandCallback = tinyMCE.execCommandCallback;

-tinyMCE.execCommandCallback = function(i, p, n) {

-	var r, st, dk = TinyMCE_DevKitPlugin;

-

-	st = dk._start();

-	dk._log('execCommandCallback', i, p, n);

-	r = tinyMCE.__execCommandCallback(i, p, n);

-	dk._end(st);

-

-	return r;

-};

-

-tinyMCE.addPlugin("devkit", TinyMCE_DevKitPlugin);

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/devkit/images/flip_down.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/devkit/images/flip_up.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/devkit/jscripts/devkit.js
+++ /dev/null
@@ -1,331 +1,1 @@
-var devkit = parent.tinyMCE.plugins['devkit'], logEnabled = true, flip = false, book = null;

-

-function init() {

-	var log, i, f = document.forms[0];

-

-	devkit._winLoaded = true;

-

-	log = tinyMCE.log;

-

-	for (i=0; i<log.length; i++)

-		debug(log[i]);

-

-	f.logfilter.value = devkit._logFilter;

-}

-

-function changeFilter(f) {

-	devkit._logFilter = f;

-}

-

-function toggleLog(s) {

-	logEnabled = s;

-}

-

-function toggleFlip() {

-	document.getElementById('flipbtn').src = flip ? 'images/flip_down.gif' : 'images/flip_up.gif';

-

-	if (flip)

-		parent.document.getElementById('devkit').className = 'devkitup';

-	else

-		parent.document.getElementById('devkit').className = 'devkitdown';

-

-	flip = !flip;

-}

-

-function debug(s) {

-	var d, l, n;

-

-	if (!logEnabled || !new RegExp(devkit._logFilter, 'gi').test(s))

-		return;

-

-	d = document;

-	l = d.getElementById('log');

-	n = d.createElement('span');

-

-	n.innerHTML = tinyMCE.xmlEncode(s);

-

-	l.appendChild(n);

-	l.scrollTop = l.scrollHeight;

-}

-

-function renderInfo() {

-	var se = document.getElementById('info'), n, sn, inst, h = '', sel, rng, instCount = 0, rc;

-

-	h += '<h2>Browser info:</h2>';

-

-	h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

-	h += addRenderInfo('navigator.userAgent', navigator.userAgent);

-	h += addRenderInfo('navigator.appName', navigator.appName);

-	h += addRenderInfo('navigator.platform', navigator.platform);

-	h += addRenderInfo('navigator.language', navigator.language, 'bspec');

-	h += addRenderInfo('navigator.browserLanguage', navigator.browserLanguage, 'bspec');

-	h += addRenderInfo('navigator.systemLanguage', navigator.systemLanguage, 'bspec');

-	h += addRenderInfo('navigator.userLanguage', navigator.userLanguage, 'bspec');

-	h += addRenderInfo('opera.buildNumber("inconspicuous")', typeof(opera) != 'undefined' && opera.buildNumber ? opera.buildNumber('inconspicuous') : null, 'bspec');

-	h += addRenderInfo('window.innerWidth', parent.window.innerWidth, 'bspec');

-	h += addRenderInfo('window.innerHeight', parent.window.innerHeight, 'bspec');

-	h += addRenderInfo('document.body.offsetWidth', parent.document.body.offsetWidth);

-	h += addRenderInfo('document.body.offsetHeight', parent.document.body.offsetHeight);

-	h += addRenderInfo('screen.width', screen.width);

-	h += addRenderInfo('screen.height', screen.height);

-	h += addRenderInfo('screen.availWidth', screen.availWidth);

-	h += addRenderInfo('screen.availHeight', screen.availHeight);

-	h += addRenderInfo('screen.colorDepth', screen.colorDepth);

-	h += addRenderInfo('screen.pixelDepth', screen.pixelDepth, 'bspec');

-	h += addRenderInfo('document.contentType', document.contentType, 'bspec');

-	h += '</table>';

-

-	h += '<h2>TinyMCE_Engine info:</h2>';

-

-	h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

-	h += addRenderInfo('baseURL', tinyMCE.baseURL);

-	h += addRenderInfo('selectedInstance.editorId', tinyMCE.selectedInstance ? tinyMCE.selectedInstance.editorId : null);

-	h += addRenderInfo('selectedElement.nodeName', tinyMCE.selectedElement ? tinyMCE.selectedElement.nodeName : null, 'dep');

-	h += addRenderInfo('loadedFiles',tinyMCE.loadedFiles.join(','));

-	h += addRenderInfo('isMSIE', tinyMCE.isMSIE);

-	h += addRenderInfo('isMSIE5', tinyMCE.isMSIE5);

-	h += addRenderInfo('isMSIE5_0', tinyMCE.isMSIE5_0);

-	h += addRenderInfo('isMSIE7', tinyMCE.isMSIE7);

-	h += addRenderInfo('isGecko', tinyMCE.isGecko);

-	h += addRenderInfo('isSafari', tinyMCE.isSafari);

-	h += addRenderInfo('isOpera', tinyMCE.isOpera);

-	h += addRenderInfo('isMac', tinyMCE.isMac);

-	h += addRenderInfo('isNS7', tinyMCE.isNS7);

-	h += addRenderInfo('isNS71', tinyMCE.isNS71);

-	h += addRenderInfo('idCounter', tinyMCE.idCounter);

-	h += addRenderInfo('currentConfig', tinyMCE.currentConfig);

-	h += addRenderInfo('majorVersion', tinyMCE.majorVersion);

-	h += addRenderInfo('minorVersion', tinyMCE.minorVersion);

-	h += addRenderInfo('releaseDate', tinyMCE.releaseDate);

-	h += addRenderInfo('documentBasePath', tinyMCE.documentBasePath);

-	h += addRenderInfo('documentURL', tinyMCE.documentURL);

-	h += '</table>';

-

-	for (n in tinyMCE.instances) {

-		inst = tinyMCE.instances[n];

-

-		if (!tinyMCE.isInstance(inst))

-			continue;

-

-		sel = inst.selection.getSel();

-		rng = inst.selection.getRng();

-

-		h += '<h2>TinyMCE_Control(' + (instCount++) + ') id: ' + inst.editorId + '</h2>';

-		h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

-

-		h += addRenderInfo('editorId', inst.editorId);

-		h += addRenderInfo('visualAid', inst.visualAid);

-		h += addRenderInfo('foreColor', inst.foreColor);

-		h += addRenderInfo('backColor', inst.backColor);

-		h += addRenderInfo('formTargetElementId', inst.formTargetElementId);

-		h += addRenderInfo('formElement', inst.formElement ? inst.formElement.nodeName : null);

-		h += addRenderInfo('oldTargetElement', inst.oldTargetElement ? inst.oldTargetElement.nodeName : null);

-		h += addRenderInfo('linkElement', inst.linkElement ? inst.linkElement.nodeName : null, 'dep');

-		h += addRenderInfo('imgElement', inst.imgElement ? inst.imgElement.nodeName : null, 'dep');

-		h += addRenderInfo('selectedNode', inst.selectedNode ? inst.selectedNode.nodeName : null, 'dep');

-		h += addRenderInfo('targetElement', inst.targetElement ? inst.targetElement.nodeName : null);

-		h += addRenderInfo('getBody().nodeName', inst.getBody() ? inst.getBody().nodeName : null);

-		h += addRenderInfo('getBody().getAttribute("id")', inst.getBody() ? inst.getBody().getAttribute("id") : null);

-		h += addRenderInfo('getDoc().location', inst.getDoc() ? inst.getDoc().location : null);

-		h += addRenderInfo('startContent', inst.startContent);

-		h += addRenderInfo('isHidden()', inst.isHidden());

-		h += addRenderInfo('isDirty()', inst.isDirty());

-		h += addRenderInfo('undoRedo.undoLevels.length', inst.undoRedo.undoLevels.length);

-		h += addRenderInfo('undoRedo.undoIndex', inst.undoRedo.undoIndex);

-		h += addRenderInfo('selection.getSelectedHTML()', inst.selection.getSelectedHTML());

-		h += addRenderInfo('selection.isCollapsed()', inst.selection.isCollapsed() || 'false');

-		h += addRenderInfo('selection.getSelectedText()', inst.selection.getSelectedText());

-		h += addRenderInfo('selection.getFocusElement().nodeName', inst.selection.getFocusElement().nodeName);

-		h += addRenderInfo('selection.getFocusElement().outerHTML', tinyMCE.getOuterHTML(inst.selection.getFocusElement()));

-

-		if ((tinyMCE.isGecko || tinyMCE.isOpera) && sel && rng) {

-			h += addRenderInfo('selection.getSel().anchorNode.nodeName', sel.anchorNode ? sel.anchorNode.nodeName : null, 'bspec');

-			h += addRenderInfo('selection.getSel().anchorOffset', sel.anchorOffset, 'bspec');

-			h += addRenderInfo('selection.getSel().focusNode.nodeName', sel.focusNode ? sel.focusNode.nodeName : null, 'bspec');

-			h += addRenderInfo('selection.getSel().focusOffset', sel.focusOffset, 'bspec');

-			h += addRenderInfo('selection.getRng().startContainer.nodeName', rng.startContainer ? rng.startContainer.nodeName : null, 'bspec');

-			h += addRenderInfo('selection.getRng().startOffset', rng.startOffset, 'bspec');

-			h += addRenderInfo('selection.getRng().endContainer.nodeName', rng.endContainer ? rng.endContainer.nodeName : null, 'bspec');

-			h += addRenderInfo('selection.getRng().endOffset', rng.endOffset, 'bspec');

-		}

-

-		if (typeof(rng.item) != 'undefined' || typeof(rng.htmlText) != 'undefined') {

-			if (!rng.item) {

-				h += addRenderInfo('selection.getSel().type', sel.type, 'bspec');

-				h += addRenderInfo('selection.getRng().htmlText', rng.htmlText, 'bspec');

-				h += addRenderInfo('selection.getRng().text', rng.text, 'bspec');

-			} else

-				h += addRenderInfo('selection.getRng().item(0).nodeName', rng.item(0).nodeName, 'bspec');

-		}

-

-		h += '</table>';

-	}

-

-	h += '<p>Fields marked in <strong class="bspec">gray</strong> is not cross browser and should be used with care.</p>';

-	h += '<p>Fields marked <strong class="dep">red</strong> are marked deprecated and will be removed in the future.</p><br />';

-

-	se.innerHTML = h;

-}

-

-function addRenderInfo(n, v, c) {

-	return '<tr><td' + (c ? ' class="' + c + '"' : '')+ '>' + n + '</td><td><input type="text" value="' + tinyMCE.xmlEncode(v != null ? ('' + v).replace(/[\r\n]/g, '') : 'null') + '" /></td></tr>';

-}

-

-function renderSettings() {

-	var se = document.getElementById('settings'), n, sn, inst, h = '', v;

-

-	for (n in tinyMCE.instances) {

-		inst = tinyMCE.instances[n];

-

-		if (!tinyMCE.isInstance(inst))

-			continue;

-

-		h += '<h2>Instance id: ' + inst.editorId + '</h2>';

-		h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

-

-		for (sn in inst.settings) {

-			v = inst.settings[sn];

-

-			h += '<tr><td class="col1">' + tinyMCE.xmlEncode(sn) + '</td><td><input type="text" value="' + tinyMCE.xmlEncode(v) + '" /></td></tr>';

-		}

-

-		h += '</table>';

-	}

-

-	se.innerHTML = h;

-}

-

-function renderContent() {

-	var se = document.getElementById('content'), n, inst, h = '';

-

-	for (n in tinyMCE.instances) {

-		inst = tinyMCE.instances[n];

-

-		if (!tinyMCE.isInstance(inst))

-			continue;

-

-		h += '<h2>Instance id: ' + inst.editorId + '</h2>';

-

-		h += '<h3>Start content - inst.startContent:</h3>';

-		h += '<div>' + tinyMCE.xmlEncode(inst.startContent) + '</div>';

-

-		h += '<h3>Raw content - inst.getBody().innerHTML or inst.getHTML(true):</h3>';

-		h += '<div>' + tinyMCE.xmlEncode(inst.getHTML(true)) + '</div>';

-

-		h += '<h3>Cleaned content - inst.getHTML():</h3>';

-		h += '<div>' + tinyMCE.xmlEncode(inst.getHTML()) + '</div>';

-

-		if (inst.serializedHTML) {

-			h += '<h3>Serialized HTML content - inst.serializedHTML:</h3>';

-			h += '<div>' + tinyMCE.xmlEncode(inst.serializedHTML) + '</div>';

-		}

-	}

-

-	se.innerHTML = h;

-}

-

-function renderCommandStates() {

-	var se = document.getElementById('command_states'), n, inst, h = '', v, ex;

-	var cmds = new Array('2D-Position','AbsolutePosition','BackColor','BlockDirLTR','BlockDirRTL','Bold','BrowseMode','Copy','CreateBookmark','CreateLink','Cut','Delete','DirLTR','DirRTL','EditMode','enableInlineTableEditing','enableObjectResizing','FontName','FontSize','ForeColor','FormatBlock','Indent','InsertButton','InsertFieldset','InsertHorizontalRule','InsertIFrame','InsertImage','InsertInputButton','InsertInputCheckbox','InsertInputFileUpload','InsertInputHidden','InsertInputImage','InsertInputPassword','InsertInputRadio','InsertInputReset','InsertInputSubmit','InsertInputText','InsertMarquee','InsertOrderedList','InsertParagraph','InsertSelectDropdown','InsertSelectListbox','InsertTextArea','InsertUnorderedList','Italic','JustifyCenter','JustifyFull','JustifyLeft','JustifyNone','JustifyRight','LiveResize','MultipleSelection','Open','Outdent','OverWrite','Paste','PlayImage','Redo','Refresh','RemoveFormat','SaveAs','SelectAll','SizeToControl','SizeToControlHeight','SizeToControlWidth','Stop','StopImage','StrikeThrough','styleWithCSS','Subscript','Superscript','UnBookmark','Underline','Undo','Unlink','Unselect'), i;

-

-	for (n in tinyMCE.instances) {

-		inst = tinyMCE.instances[n];

-

-		if (!tinyMCE.isInstance(inst))

-			continue;

-

-		h += '<h2>Instance id: ' + inst.editorId + '</h2>';

-		h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

-

-		for (i=0; i<cmds.length; i++) {

-			v = null;

-

-			try {

-				v = tinyMCE.isGecko || inst.getDoc().queryCommandSupported(cmds[i]);

-				v = v ? inst.queryCommandState(cmds[i]) : 'Not supported';

-			} catch (ex) {

-				v = 'Not supported';

-			}

-

-			h += '<tr><td><input type="text" value="' + tinyMCE.xmlEncode(cmds[i]) + '" /></td><td><input type="text" value="' + tinyMCE.xmlEncode(v) + '" /></td></tr>';

-		}

-

-		h += '</table>';

-	}

-

-	se.innerHTML = h;

-}

-

-function renderUndoRedo() {

-	var se = document.getElementById('undo_redo'), inst, n, h = '', i, le, id, d, ur;

-	var f = document.forms[0];	

-

-	if (tinyMCE.undoLevels) {

-		le = tinyMCE.undoLevels;

-

-		h += '<h2>Global undo/redo</h2>';

-		h += '<table border="0" cellpadding="0" cellspacing="0" width="50%" class="data">';

-		h += '<tr><td>undoLevels.length</td><td>' + le.length + '</td></tr>';

-		h += '<tr><td>undoIndex</td><td>' + tinyMCE.undoIndex + '</td></tr>';

-		h += '</table>';

-

-		for (i=0; i<le.length; i++)

-			h += '<h3>Level: ' + i + ', Instance: ' + (le[i] ? le[i].editorId : 'null') + '</h3>';

-	}

-

-	for (n in tinyMCE.instances) {

-		inst = tinyMCE.instances[n];

-

-		if (!tinyMCE.isInstance(inst))

-			continue;

-

-		ur = inst.undoRedo;

-		le = ur.undoLevels;

-

-		h += '<hr /><h2>Instance id: ' + inst.editorId + '</h2>';

-		h += '<table border="0" cellpadding="0" cellspacing="0" width="50%" class="data">';

-		h += '<tr><td>undoLevels.length</td><td>' + le.length + '</td></tr>';

-		h += '<tr><td>undoIndex</td><td>' + ur.undoIndex + '</td></tr>';

-		h += '<tr><td>typingUndoIndex</td><td>' + ur.typingUndoIndex + '</td></tr>';

-		h += '<tr><td>undoRedo</td><td>' + ur.undoRedo + '</td></tr>';

-		h += '</table>';

-

-		for (i=0; i<le.length; i++) {

-			h += '<h3>Level: ' + i + (!le[i].bookmark ? "" : " [bookmark]") + '</h3>';

-			h += '<div class="undodata">' + tinyMCE.xmlEncode(le[i].content) + '</div>';

-

-			if (i > 0 && f.undo_diff.checked) {

-				d = diff_main(i > 0 ? le[i-1].content.replace(/[\r\n]+/g, '') : null, le[i].content.replace(/[\r\n]+/g, ''), false);

-				diff_cleanup_semantic(d);

-				h += '<h3>Diff ' + (i-1) + ',' + i + '</h3><div class="undodata">' + diff_prettyhtml(d) + '</div>';

-			}

-		}

-	}

-

-	se.innerHTML = h;

-}

-

-function clearLog() {

-	document.getElementById('log').innerHTML = '';

-	devkit._startTime = null;

-}

-

-function cancelAction() {

-	parent.document.getElementById('devkit').style.display = 'none';

-}

-

-function toggleDebugEvents(s) {

-	devkit._debugEvents(s);

-}

-

-function storeSelection() {

-	book = tinyMCE.selectedInstance.selection.getBookmark();

-

-	return false;

-}

-

-function restoreSelection() {

-	tinyMCE.selectedInstance.selection.moveToBookmark(book);

-

-	return false;

-}
+

--- a/tinymce/jscripts/tiny_mce/plugins/devkit/jscripts/diff.js
+++ /dev/null
@@ -1,1193 +1,1 @@
-// Diff_Match_Patch v1.3

-// Computes the difference between two texts to create a patch.

-// Applies the patch onto another text, allowing for errors.

-// Copyright (C) 2006 Neil Fraser

-// http://neil.fraser.name/software/diff_match_patch/

-

-// This program is free software; you can redistribute it and/or

-// modify it under the terms of the GNU General Public License

-// as published by the Free Software Foundation.

-

-// This program is distributed in the hope that it will be useful,

-// but WITHOUT ANY WARRANTY; without even the implied warranty of

-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

-// GNU General Public License (www.gnu.org) for more details.

-

-

-// Constants.

-// Redefine these in your program to override the defaults.

-

-// Number of seconds to map a diff before giving up.  (0 for infinity)

-var DIFF_TIMEOUT = 1.0;

-// Cost of an empty edit operation in terms of edit characters.

-var DIFF_EDIT_COST = 4;

-// Tweak the relative importance (0.0 = accuracy, 1.0 = proximity)

-var MATCH_BALANCE = 0.5;

-// At what point is no match declared (0.0 = perfection, 1.0 = very loose)

-var MATCH_THRESHOLD = 0.5;

-// The min and max cutoffs used when computing text lengths.

-var MATCH_MINLENGTH = 100;

-var MATCH_MAXLENGTH = 1000;

-// Chunk size for context length.

-var PATCH_MARGIN = 4;

-

-

-  //////////////////////////////////////////////////////////////////////

- //  Diff                                                            //

-//////////////////////////////////////////////////////////////////////

-

-// The data structure representing a diff is an array of tuples:

-// [[-1, "Hello"], [1, "Goodbye"], [0, " world."]]

-// which means: delete "Hello", add "Goodbye" and keep " world."

-

-

-function diff_main(text1, text2, checklines) {

-  // Find the differences between two texts.  Return an array of changes.

-  // If checklines is present and false, then don't run a line-level diff first to identify the changed areas.

-  // Check for equality (speedup)

-  if (text1 == text2)

-    return [[0, text1]];

-

-  if (typeof checklines == 'undefined')

-    checklines = true;

-

-  var a;

-  // Trim off common prefix (speedup)

-  a = diff_prefix(text1, text2);

-  text1 = a[0];

-  text2 = a[1];

-  var commonprefix = a[2];

-

-  // Trim off common suffix (speedup)

-  a = diff_suffix(text1, text2);

-  text1 = a[0];

-  text2 = a[1];

-  var commonsuffix = a[2];

-

-  var diff, i;

-  var longtext = text1.length > text2.length ? text1 : text2;

-  var shorttext = text1.length > text2.length ? text2 : text1;

-

-  if (!text1) {  // Just add some text (speedup)

-    diff = [[1, text2]];

-  } else if (!text2) { // Just delete some text (speedup)

-    diff = [[-1, text1]];

-  } else if ((i = longtext.indexOf(shorttext)) != -1) {

-    // Shorter text is inside the longer text (speedup)

-    diff = [[1, longtext.substring(0, i)], [0, shorttext], [1, longtext.substring(i+shorttext.length)]];

-    // Swap insertions for deletions if diff is reversed.

-    if (text1.length > text2.length)

-      diff[0][0] = diff[2][0] = -1;

-  } else {

-    longtext = shorttext = null; // Garbage collect

-    // Check to see if the problem can be split in two.

-    var hm = diff_halfmatch(text1, text2);

-    if (hm) {

-      // A half-match was found, sort out the return data.

-      var text1_a = hm[0];

-      var text1_b = hm[1];

-      var text2_a = hm[2];

-      var text2_b = hm[3];

-      var mid_common = hm[4];

-      // Send both pairs off for separate processing.

-      var diff_a = diff_main(text1_a, text2_a, checklines);

-      var diff_b = diff_main(text1_b, text2_b, checklines);

-      // Merge the results.

-      diff = diff_a.concat([[0, mid_common]], diff_b);

-    } else {

-      // Perform a real diff.

-      if (checklines && text1.length + text2.length < 250)

-        checklines = false; // Too trivial for the overhead.

-      if (checklines) {

-        // Scan the text on a line-by-line basis first.

-        a = diff_lines2chars(text1, text2);

-        text1 = a[0];

-        text2 = a[1];

-        var linearray = a[2];

-      }

-      diff = diff_map(text1, text2);

-      if (!diff) // No acceptable result.

-        diff = [[-1, text1], [1, text2]];

-      if (checklines) {

-        diff_chars2lines(diff, linearray); // Convert the diff back to original text.

-        diff_cleanup_semantic(diff); // Eliminate freak matches (e.g. blank lines)

-

-        // Rediff any replacement blocks, this time on character-by-character basis.

-        diff.push([0, '']);  // Add a dummy entry at the end.

-        var pointer = 0;

-        var count_delete = 0;

-        var count_insert = 0;

-        var text_delete = '';

-        var text_insert = '';

-        while(pointer < diff.length) {

-          if (diff[pointer][0] == 1) {

-            count_insert++;

-            text_insert += diff[pointer][1];

-          } else if (diff[pointer][0] == -1) {

-            count_delete++;

-            text_delete += diff[pointer][1];

-          } else {  // Upon reaching an equality, check for prior redundancies.

-            if (count_delete >= 1 && count_insert >= 1) {

-              // Delete the offending records and add the merged ones.

-              a = diff_main(text_delete, text_insert, false);

-              diff.splice(pointer - count_delete - count_insert, count_delete + count_insert);

-              pointer = pointer - count_delete - count_insert;

-              for (i=a.length-1; i>=0; i--)

-                diff.splice(pointer, 0, a[i]);

-              pointer = pointer + a.length;

-            }

-            count_insert = 0;

-            count_delete = 0;

-            text_delete = '';

-            text_insert = '';

-          }

-          pointer++;

-        }

-        diff.pop();  // Remove the dummy entry at the end.

-

-      }

-    }

-  }

-

-  if (commonprefix)

-    diff.unshift([0, commonprefix]);

-  if (commonsuffix)

-    diff.push([0, commonsuffix]);

-  diff_cleanup_merge(diff);

-  return diff;

-}

-

-

-function diff_lines2chars(text1, text2) {

-  // Split text into an array of strings.

-  // Reduce the texts to a string of hashes where each character represents one line.

-  var linearray = new Array();  // linearray[4] == "Hello\n"

-  var linehash = new Object();  // linehash["Hello\n"] == 4

-

-  // "\x00" is a valid JavaScript character, but the Venkman debugger doesn't like it (bug 335098)

-  // So we'll insert a junk entry to avoid generating a null character.

-  linearray.push('');

-

-  function diff_lines2chars_munge(text) {

-    // My first ever closure!

-    var i, line;

-    var chars = '';

-    while (text) {

-      i = text.indexOf('\n');

-      if (i == -1)

-        i = text.length;

-      line = text.substring(0, i+1);

-      text = text.substring(i+1);

-      if (linehash.hasOwnProperty ? linehash.hasOwnProperty(line) : (linehash[line] !== undefined)) {

-        chars += String.fromCharCode(linehash[line]);

-      } else {

-        linearray.push(line);

-        linehash[line] = linearray.length - 1;

-        chars += String.fromCharCode(linearray.length - 1);

-      }

-    }

-    return chars;

-  }

-

-  var chars1 = diff_lines2chars_munge(text1);

-  var chars2 = diff_lines2chars_munge(text2);

-  return [chars1, chars2, linearray];

-}

-

-

-function diff_chars2lines(diff, linearray) {

-  // Rehydrate the text in a diff from a string of line hashes to real lines of text.

-  var chars, text;

-  for (var x=0; x<diff.length; x++) {

-    chars = diff[x][1];

-    text = '';

-    for (var y=0; y<chars.length; y++)

-      text += linearray[chars.charCodeAt(y)];

-    diff[x][1] = text;

-  }

-}

-

-

-function diff_map(text1, text2) {

-  // Explore the intersection points between the two texts.

-  var now = new Date();

-  var ms_end = now.getTime() + DIFF_TIMEOUT * 1000; // Don't run for too long.

-  var max = (text1.length + text2.length) / 2;

-  var v_map1 = new Array();

-  var v_map2 = new Array();

-  var v1 = new Object();

-  var v2 = new Object();

-  v1[1] = 0;

-  v2[1] = 0;

-  var x, y;

-  var footstep; // Used to track overlapping paths.

-  var footsteps = new Object();

-  var done = false;

-  var hasOwnProperty = !!(footsteps.hasOwnProperty);

-  // If the total number of characters is odd, then the front path will collide with the reverse path.

-  var front = (text1.length + text2.length) % 2;

-  for (var d=0; d<max; d++) {

-    now = new Date();

-    if (DIFF_TIMEOUT > 0 && now.getTime() > ms_end) // Timeout reached

-      return null;

-

-    // Walk the front path one step.

-    v_map1[d] = new Object();

-    for (var k=-d; k<=d; k+=2) {

-      if (k == -d || k != d && v1[k-1] < v1[k+1])

-        x = v1[k+1];

-      else

-        x = v1[k-1]+1;

-      y = x - k;

-      footstep = x+","+y;

-      if (front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

-        done = true;

-      if (!front)

-        footsteps[footstep] = d;

-      while (!done && x < text1.length && y < text2.length && text1.charAt(x) == text2.charAt(y)) {

-        x++; y++;

-        footstep = x+","+y;

-        if (front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

-          done = true;

-        if (!front)

-          footsteps[footstep] = d;

-      }

-      v1[k] = x;

-      v_map1[d][x+","+y] = true;

-      if (done) {

-        // Front path ran over reverse path.

-        v_map2 = v_map2.slice(0, footsteps[footstep]+1);

-        var a = diff_path1(v_map1, text1.substring(0, x), text2.substring(0, y));

-        return a.concat(diff_path2(v_map2, text1.substring(x), text2.substring(y)));

-      }

-    }

-

-    // Walk the reverse path one step.

-    v_map2[d] = new Object();

-    for (var k=-d; k<=d; k+=2) {

-      if (k == -d || k != d && v2[k-1] < v2[k+1])

-        x = v2[k+1];

-      else

-        x = v2[k-1]+1;

-      y = x - k;

-      footstep = (text1.length-x)+","+(text2.length-y);

-      if (!front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

-        done = true;

-      if (front)

-        footsteps[footstep] = d;

-      while (!done && x < text1.length && y < text2.length && text1.charAt(text1.length-x-1) == text2.charAt(text2.length-y-1)) {

-        x++; y++;

-        footstep = (text1.length-x)+","+(text2.length-y);

-        if (!front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

-          done = true;

-        if (front)

-          footsteps[footstep] = d;

-      }

-      v2[k] = x;

-      v_map2[d][x+","+y] = true;

-      if (done) {

-        // Reverse path ran over front path.

-        v_map1 = v_map1.slice(0, footsteps[footstep]+1);

-        var a = diff_path1(v_map1, text1.substring(0, text1.length-x), text2.substring(0, text2.length-y));

-        return a.concat(diff_path2(v_map2, text1.substring(text1.length-x), text2.substring(text2.length-y)));

-      }

-    }

-  }

-  // Number of diffs equals number of characters, no commonality at all.

-  return null;

-}

-

-

-function diff_path1(v_map, text1, text2) {

-  // Work from the middle back to the start to determine the path.

-  var path = [];

-  var x = text1.length;

-  var y = text2.length;

-  var last_op = null;

-  for (var d=v_map.length-2; d>=0; d--) {

-    while(1) {

-      if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty((x-1)+","+y) : (v_map[d][(x-1)+","+y] !== undefined)) {

-        x--;

-        if (last_op === -1)

-          path[0][1] = text1.charAt(x) + path[0][1];

-        else

-          path.unshift([-1, text1.charAt(x)]);

-        last_op = -1;

-        break;

-      } else if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty(x+","+(y-1)) : (v_map[d][x+","+(y-1)] !== undefined)) {

-        y--;

-        if (last_op === 1)

-          path[0][1] = text2.charAt(y) + path[0][1];

-        else

-          path.unshift([1, text2.charAt(y)]);

-        last_op = 1;

-        break;

-      } else {

-        x--;

-        y--;

-        //if (text1.charAt(x) != text2.charAt(y))

-        //  return alert("No diagonal.  Can't happen. (diff_path1)");

-        if (last_op === 0)

-          path[0][1] = text1.charAt(x) + path[0][1];

-        else

-          path.unshift([0, text1.charAt(x)]);

-        last_op = 0;

-      }

-    }

-  }

-  return path;

-}

-

-

-function diff_path2(v_map, text1, text2) {

-  // Work from the middle back to the end to determine the path.

-  var path = [];

-  var x = text1.length;

-  var y = text2.length;

-  var last_op = null;

-  for (var d=v_map.length-2; d>=0; d--) {

-    while(1) {

-      if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty((x-1)+","+y) : (v_map[d][(x-1)+","+y] !== undefined)) {

-        x--;

-        if (last_op === -1)

-          path[path.length-1][1] += text1.charAt(text1.length-x-1);

-        else

-          path.push([-1, text1.charAt(text1.length-x-1)]);

-        last_op = -1;

-        break;

-      } else if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty(x+","+(y-1)) : (v_map[d][x+","+(y-1)] !== undefined)) {

-        y--;

-        if (last_op === 1)

-          path[path.length-1][1] += text2.charAt(text2.length-y-1);

-        else

-          path.push([1, text2.charAt(text2.length-y-1)]);

-        last_op = 1;

-        break;

-      } else {

-        x--;

-        y--;

-        //if (text1.charAt(text1.length-x-1) != text2.charAt(text2.length-y-1))

-        //  return alert("No diagonal.  Can't happen. (diff_path2)");

-        if (last_op === 0)

-          path[path.length-1][1] += text1.charAt(text1.length-x-1);

-        else

-          path.push([0, text1.charAt(text1.length-x-1)]);

-        last_op = 0;

-      }

-    }

-  }

-  return path;

-}

-

-

-function diff_prefix(text1, text2) {

-  // Trim off common prefix

-  var pointermin = 0;

-  var pointermax = Math.min(text1.length, text2.length);

-  var pointermid = pointermax;

-  while(pointermin < pointermid) {

-    if (text1.substring(0, pointermid) == text2.substring(0, pointermid))

-      pointermin = pointermid;

-    else

-      pointermax = pointermid;

-    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);

-  }

-  var commonprefix = text1.substring(0, pointermid);

-  text1 = text1.substring(pointermid);

-  text2 = text2.substring(pointermid);

-  return [text1, text2, commonprefix];

-}

-

-

-function diff_suffix(text1, text2) {

-  // Trim off common suffix

-  var pointermin = 0;

-  var pointermax = Math.min(text1.length, text2.length);

-  var pointermid = pointermax;

-  while(pointermin < pointermid) {

-    if (text1.substring(text1.length-pointermid) == text2.substring(text2.length-pointermid))

-      pointermin = pointermid;

-    else

-      pointermax = pointermid;

-    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);

-  }

-  var commonsuffix = text1.substring(text1.length-pointermid);

-  text1 = text1.substring(0, text1.length-pointermid);

-  text2 = text2.substring(0, text2.length-pointermid);

-  return [text1, text2, commonsuffix];

-}

-

-

-function diff_halfmatch(text1, text2) {

-  // Do the two texts share a substring which is at least half the length of the longer text?

-  var longtext = text1.length > text2.length ? text1 : text2;

-  var shorttext = text1.length > text2.length ? text2 : text1;

-  if (longtext.length < 10 || shorttext.length < 1)

-    return null; // Pointless.

-

-  function diff_halfmatch_i(longtext, shorttext, i) {

-    // Start with a 1/4 length substring at position i as a seed.

-    var seed = longtext.substring(i, i+Math.floor(longtext.length/4));

-    var j = -1;

-    var best_common = '';

-    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;

-    while ((j = shorttext.indexOf(seed, j+1)) != -1) {

-      var my_prefix = diff_prefix(longtext.substring(i), shorttext.substring(j));

-      var my_suffix = diff_suffix(longtext.substring(0, i), shorttext.substring(0, j));

-      if (best_common.length < (my_suffix[2] + my_prefix[2]).length) {

-        best_common = my_suffix[2] + my_prefix[2];

-        best_longtext_a = my_suffix[0];

-        best_longtext_b = my_prefix[0];

-        best_shorttext_a = my_suffix[1];

-        best_shorttext_b = my_prefix[1];

-      }

-    }

-    if (best_common.length >= longtext.length/2)

-      return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common];

-    else

-      return null;

-  }

-

-  // First check if the second quarter is the seed for a half-match.

-  var hm1 = diff_halfmatch_i(longtext, shorttext, Math.ceil(longtext.length/4));

-  // Check again based on the third quarter.

-  var hm2 = diff_halfmatch_i(longtext, shorttext, Math.ceil(longtext.length/2));

-  var hm;

-  if (!hm1 && !hm2)

-    return null;

-  else if (!hm2)

-    hm = hm1;

-  else if (!hm1)

-    hm = hm2;

-  else // Both matched.  Select the longest.

-    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;

-

-  // A half-match was found, sort out the return data.

-  if (text1.length > text2.length) {

-    var text1_a = hm[0];

-    var text1_b = hm[1];

-    var text2_a = hm[2];

-    var text2_b = hm[3];

-  } else {

-    var text2_a = hm[0];

-    var text2_b = hm[1];

-    var text1_a = hm[2];

-    var text1_b = hm[3];

-  }

-  var mid_common = hm[4];

-  return [text1_a, text1_b, text2_a, text2_b, mid_common];

-}

-

-

-function diff_cleanup_semantic(diff) {

-  // Reduce the number of edits by eliminating semantically trivial equalities.

-  var changes = false;

-  var equalities = []; // Stack of indices where equalities are found.

-  var lastequality = null; // Always equal to equalities[equalities.length-1][1]

-  var pointer = 0; // Index of current position.

-  var length_changes1 = 0; // Number of characters that changed prior to the equality.

-  var length_changes2 = 0; // Number of characters that changed after the equality.

-  while (pointer < diff.length) {

-    if (diff[pointer][0] == 0) { // equality found

-      equalities.push(pointer);

-      length_changes1 = length_changes2;

-      length_changes2 = 0;

-      lastequality = diff[pointer][1];

-    } else { // an insertion or deletion

-      length_changes2 += diff[pointer][1].length;

-      if (lastequality != null && (lastequality.length <= length_changes1) && (lastequality.length <= length_changes2)) {

-        //alert("Splitting: '"+lastequality+"'");

-        diff.splice(equalities[equalities.length-1], 0, [-1, lastequality]); // Duplicate record

-        diff[equalities[equalities.length-1]+1][0] = 1; // Change second copy to insert.

-        equalities.pop();  // Throw away the equality we just deleted;

-        equalities.pop();  // Throw away the previous equality;

-        pointer = equalities.length ? equalities[equalities.length-1] : -1;

-        length_changes1 = 0; // Reset the counters.

-        length_changes2 = 0;

-        lastequality = null;

-        changes = true;

-      }

-    }

-    pointer++;

-  }

-

-  if (changes)

-    diff_cleanup_merge(diff);

-}

-

-

-function diff_cleanup_efficiency(diff) {

-  // Reduce the number of edits by eliminating operationally trivial equalities.

-  var changes = false;

-  var equalities = []; // Stack of indices where equalities are found.

-  var lastequality = ''; // Always equal to equalities[equalities.length-1][1]

-  var pointer = 0; // Index of current position.

-  var pre_ins = false; // Is there an insertion operation before the last equality.

-  var pre_del = false; // Is there an deletion operation before the last equality.

-  var post_ins = false; // Is there an insertion operation after the last equality.

-  var post_del = false; // Is there an deletion operation after the last equality.

-  while (pointer < diff.length) {

-    if (diff[pointer][0] == 0) { // equality found

-      if (diff[pointer][1].length < DIFF_EDIT_COST && (post_ins || post_del)) {

-        // Candidate found.

-        equalities.push(pointer);

-        pre_ins = post_ins;

-        pre_del = post_del;

-        lastequality = diff[pointer][1];

-      } else {

-        // Not a candidate, and can never become one.

-        equalities = [];

-        lastequality = '';

-      }

-      post_ins = post_del = false;

-    } else { // an insertion or deletion

-      if (diff[pointer][0] == -1)

-        post_del = true;

-      else

-        post_ins = true;

-      // Five types to be split:

-      // <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>

-      // <ins>A</ins>X<ins>C</ins><del>D</del>

-      // <ins>A</ins><del>B</del>X<ins>C</ins>

-      // <ins>A</del>X<ins>C</ins><del>D</del>

-      // <ins>A</ins><del>B</del>X<del>C</del>

-      if (lastequality && ((pre_ins && pre_del && post_ins && post_del) || ((lastequality.length < DIFF_EDIT_COST/2) && (pre_ins + pre_del + post_ins + post_del) == 3))) {

-        //alert("Splitting: '"+lastequality+"'");

-        diff.splice(equalities[equalities.length-1], 0, [-1, lastequality]); // Duplicate record

-        diff[equalities[equalities.length-1]+1][0] = 1; // Change second copy to insert.

-        equalities.pop();  // Throw away the equality we just deleted;

-        lastequality = '';

-        if (pre_ins && pre_del) {

-          // No changes made which could affect previous entry, keep going.

-          post_ins = post_del = true;

-          equalities = [];

-        } else {

-          equalities.pop();  // Throw away the previous equality;

-          pointer = equalities.length ? equalities[equalities.length-1] : -1;

-          post_ins = post_del = false;

-        }

-        changes = true;

-      }

-    }

-    pointer++;

-  }

-

-  if (changes)

-    diff_cleanup_merge(diff);

-}

-

-

-function diff_cleanup_merge(diff) {

-  // Reorder and merge like edit sections.  Merge equalities.

-  // Any edit section can move as long as it doesn't cross an equality.

-  diff.push([0, '']);  // Add a dummy entry at the end.

-  var pointer = 0;

-  var count_delete = 0;

-  var count_insert = 0;

-  var text_delete = '';

-  var text_insert = '';

-  var record_insert, record_delete;

-  var my_xfix;

-  while(pointer < diff.length) {

-    if (diff[pointer][0] == 1) {

-      count_insert++;

-      text_insert += diff[pointer][1];

-      pointer++;

-    } else if (diff[pointer][0] == -1) {

-      count_delete++;

-      text_delete += diff[pointer][1];

-      pointer++;

-    } else {  // Upon reaching an equality, check for prior redundancies.

-      if (count_delete > 1 || count_insert > 1) {

-        if (count_delete > 1 && count_insert > 1) {

-          // Factor out any common prefixies.

-          my_xfix = diff_prefix(text_insert, text_delete);

-          if (my_xfix[2] != '') {

-            if ((pointer - count_delete - count_insert) > 0 && diff[pointer - count_delete - count_insert - 1][0] == 0) {

-              text_insert = my_xfix[0];

-              text_delete = my_xfix[1];

-              diff[pointer - count_delete - count_insert - 1][1] += my_xfix[2];

-            }

-          }

-          // Factor out any common suffixies.

-          my_xfix = diff_suffix(text_insert, text_delete);

-          if (my_xfix[2] != '') {

-            text_insert = my_xfix[0];

-            text_delete = my_xfix[1];

-            diff[pointer][1] = my_xfix[2] + diff[pointer][1];

-          }

-        }

-        // Delete the offending records and add the merged ones.

-        if (count_delete == 0)

-          diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [1, text_insert]);

-        else if (count_insert == 0)

-          diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [-1, text_delete]);

-        else

-          diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [-1, text_delete], [1, text_insert]);

-        pointer = pointer - count_delete - count_insert + (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;

-      } else if (pointer != 0 && diff[pointer-1][0] == 0) {

-        // Merge this equality with the previous one.

-        diff[pointer-1][1] += diff[pointer][1];

-        diff.splice(pointer, 1);

-      } else {

-        pointer++;

-      }

-      count_insert = 0;

-      count_delete = 0;

-      text_delete = '';

-      text_insert = '';

-    }

-  }

-  if (diff[diff.length-1][1] == '')

-    diff.pop();  // Remove the dummy entry at the end.

-}

-

-

-function diff_addindex(diff) {

-  // Add an index to each tuple, represents where the tuple is located in text2.

-  // e.g. [[-1, 'h', 0], [1, 'c', 0], [0, 'at', 1]]

-  var i = 0;

-  for (var x=0; x<diff.length; x++) {

-    diff[x].push(i);

-    if (diff[x][0] != -1)

-      i += diff[x][1].length;

-  }

-}

-

-

-function diff_xindex(diff, loc) {

-  // loc is a location in text1, compute and return the equivalent location in text2.

-  // e.g. "The cat" vs "The big cat", 1->1, 5->8

-  var chars1 = 0;

-  var chars2 = 0;

-  var last_chars1 = 0;

-  var last_chars2 = 0;

-  for (var x=0; x<diff.length; x++) {

-    if (diff[x][0] != 1) // Equality or deletion.

-      chars1 += diff[x][1].length;

-    if (diff[x][0] != -1) // Equality or insertion.

-      chars2 += diff[x][1].length;

-    if (chars1 > loc) // Overshot the location.

-      break;

-    last_chars1 = chars1;

-    last_chars2 = chars2;

-  }

-  if (diff.length != x && diff[x][0] == -1) // The location was deleted.

-    return last_chars2;

-  // Add the remaining character length.

-  return last_chars2 + (loc - last_chars1);

-}

-

-

-function diff_prettyhtml(diff) {

-  // Convert a diff array into a pretty HTML report.

-  diff_addindex(diff);

-  var html = '';

-  for (var x=0; x<diff.length; x++) {

-    var m = diff[x][0]; // Mode (-1=delete, 0=copy, 1=add)

-    var t = diff[x][1]; // Text of change.

-    var i = diff[x][2]; // Index of change.

-    t = t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");

-    t = t.replace(/\n/g, "&para;<BR>");

-    if (m == -1)

-      html += "<DEL STYLE='background:#FFE6E6;' TITLE='i="+i+"'>"+t+"</DEL>";

-    else if (m == 1)

-      html += "<INS STYLE='background:#E6FFE6;' TITLE='i="+i+"'>"+t+"</INS>";

-    else

-      html += "<SPAN TITLE='i="+i+"'>"+t+"</SPAN>";

-  }

-  return html;

-}

-

-

-  //////////////////////////////////////////////////////////////////////

- //  Match                                                           //

-//////////////////////////////////////////////////////////////////////

-

-

-function match_getmaxbits() {

-  // Compute the number of bits in an int.

-  // The normal answer for JavaScript is 32.

-  var maxbits = 0;

-  var oldi = 1;

-  var newi = 2;

-  while (oldi != newi) {

-    maxbits++;

-    oldi = newi;

-    newi = newi << 1;

-  }

-  return maxbits;

-}

-var MATCH_MAXBITS = match_getmaxbits();

-

-

-function match_main(text, pattern, loc) {

-  // Locate the best instance of 'pattern' in 'text' near 'loc'.

-  loc = Math.max(0, Math.min(loc, text.length-pattern.length));

-  if (text == pattern) {

-    // Shortcut (potentially not guaranteed by the algorithm)

-    return 0;

-  } else if (text.length == 0) {

-    // Nothing to match.

-    return null;

-  } else if (text.substring(loc, loc + pattern.length) == pattern) {

-    // Perfect match at the perfect spot!  (Includes case of null pattern)

-    return loc;

-  } else {

-    // Do a fuzzy compare.

-    var match = match_bitap(text, pattern, loc);

-    return match;

-  }

-}

-

-

-function match_bitap(text, pattern, loc) {

-  // Locate the best instance of 'pattern' in 'text' near 'loc' using the Bitap algorithm.

-  if (pattern.length > MATCH_MAXBITS)

-    return alert("Pattern too long for this browser.");

-

-  // Initialise the alphabet.

-  var s = match_alphabet(pattern);

-

-  var score_text_length = text.length;

-  // Coerce the text length between reasonable maximums and minimums.

-  score_text_length = Math.max(score_text_length, MATCH_MINLENGTH);

-  score_text_length = Math.min(score_text_length, MATCH_MAXLENGTH);

-

-  function match_bitap_score (e, x) {

-    // Compute and return the score for a match with e errors and x location.

-    var d = Math.abs(loc-x);

-    return (e / pattern.length / MATCH_BALANCE) + (d / score_text_length / (1.0 - MATCH_BALANCE));

-  }

-

-  // Highest score beyond which we give up.

-  var score_threshold = MATCH_THRESHOLD;

-  // Is there a nearby exact match? (speedup)

-  var best_loc = text.indexOf(pattern, loc);

-  if (best_loc != -1)

-    score_threshold = Math.min(match_bitap_score(0, best_loc), score_threshold);

-  // What about in the other direction? (speedup)

-  best_loc = text.lastIndexOf(pattern, loc+pattern.length);

-  if (best_loc != -1)

-    score_threshold = Math.min(match_bitap_score(0, best_loc), score_threshold);

-

-  // Initialise the bit arrays.

-  var r = Array();

-  var d = -1;

-  var matchmask = Math.pow(2, pattern.length-1);

-  best_loc = null;

-

-  var bin_min, bin_mid;

-  var bin_max = Math.max(loc+loc, text.length);

-  var last_rd;

-  for (var d=0; d<pattern.length; d++) {

-    // Scan for the best match; each iteration allows for one more error.

-    var rd = Array(text.length);

-

-    // Run a binary search to determine how far from 'loc' we can stray at this error level.

-    bin_min = loc;

-    bin_mid = bin_max;

-    while(bin_min < bin_mid) {

-      if (match_bitap_score(d, bin_mid) < score_threshold)

-        bin_min = bin_mid;

-      else

-        bin_max = bin_mid;

-      bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);

-    }

-    bin_max = bin_mid; // Use the result from this iteration as the maximum for the next.

-    var start = Math.max(0, loc - (bin_mid - loc) - 1);

-    var finish = Math.min(text.length-1, pattern.length + bin_mid);

-

-    if (text.charAt(finish) == pattern.charAt(pattern.length-1))

-      rd[finish] = Math.pow(2, d+1)-1;

-    else

-      rd[finish] = Math.pow(2, d)-1;

-    for (var j=finish-1; j>=start; j--) {

-      // The alphabet (s) is a sparse hash, so the following lines generate warnings.

-      if (d == 0) // First pass: exact match.

-        rd[j] = ((rd[j+1] << 1) | 1) & s[text.charAt(j)];

-      else // Subsequent passes: fuzzy match.

-        rd[j] = ((rd[j+1] << 1) | 1) & s[text.charAt(j)] | ((last_rd[j+1] << 1) | 1) | ((last_rd[j] << 1) | 1) | last_rd[j+1];

-      if (rd[j] & matchmask) {

-        var score = match_bitap_score(d, j);

-        // This match will almost certainly be better than any existing match.  But check anyway.

-        if (score <= score_threshold) {

-          // Told you so.

-          score_threshold = score;

-          best_loc = j;

-          if (j > loc) {

-            // When passing loc, don't exceed our current distance from loc.

-            start = Math.max(0, loc - (j - loc));

-          } else {

-            // Already passed loc, downhill from here on in.

-            break;

-          }

-        }

-      }

-    }

-    if (match_bitap_score(d+1, loc) > score_threshold) // No hope for a (better) match at greater error levels.

-      break;

-    last_rd = rd;

-  }

-  return best_loc;

-}

-

-

-function match_alphabet(pattern) {

-  // Initialise the alphabet for the Bitap algorithm.

-  var s = Object();

-  for (var i=0; i<pattern.length; i++)

-    s[pattern.charAt(i)] = 0;

-  for (var i=0; i<pattern.length; i++)

-    s[pattern.charAt(i)] |= Math.pow(2, pattern.length-i-1);

-  return s;

-}

-

-

-  //////////////////////////////////////////////////////////////////////

- //  Patch                                                           //

-//////////////////////////////////////////////////////////////////////

-

-

-function patch_obj() {

-  // Constructor for a patch object.

-  this.diffs = [];

-  this.start1 = null;

-  this.start2 = null;

-  this.length1 = 0;

-  this.length2 = 0;

-

-  this.toString = function() {

-    // Emmulate GNU diff's format.

-    // Header: @@ -382,8 +481,9 @@

-    // Indicies are printed as 1-based, not 0-based.

-    var coords1, coords2;

-    if (this.length1 == 0)

-      coords1 = this.start1+",0";

-    else if (this.length1 == 1)

-      coords1 = this.start1+1;

-    else

-      coords1 = (this.start1+1)+","+this.length1;

-    if (this.length2 == 0)

-      coords2 = this.start2+",0";

-    else if (this.length2 == 1)

-      coords2 = this.start2+1;

-    else

-      coords2 = (this.start2+1)+","+this.length2;

-    var txt = "@@ -"+coords1+" +"+coords2+" @@\n";

-    // Escape the body of the patch with %xx notation.

-    for (var x=0; x<this.diffs.length; x++)

-      txt += ("- +".charAt(this.diffs[x][0]+1)) + encodeURI(this.diffs[x][1]) + "\n";

-    return txt.replace(/%20/g, ' ');

-  }

-

-  this.text1 = function() {

-    // Compute and return the source text (all equalities and deletions).

-    var txt = '';

-    for (var x=0; x<this.diffs.length; x++)

-      if (this.diffs[x][0] == 0 || this.diffs[x][0] == -1)

-        txt += this.diffs[x][1];

-    return txt;

-  }

-

-  this.text2 = function() {

-    // Compute and return the destination text (all equalities and insertions).

-    var txt = '';

-    for (var x=0; x<this.diffs.length; x++)

-      if (this.diffs[x][0] == 0 || this.diffs[x][0] == 1)

-        txt += this.diffs[x][1];

-    return txt;

-  }

-}

-

-

-function patch_addcontext(patch, text) {

-  var pattern = text.substring(patch.start2, patch.start2+patch.length1);

-  var padding = 0;

-  // Increase the context until we're unique (but don't let the pattern expand beyond MATCH_MAXBITS).

-  while (text.indexOf(pattern) != text.lastIndexOf(pattern) && pattern.length < MATCH_MAXBITS-PATCH_MARGIN-PATCH_MARGIN) {

-    padding += PATCH_MARGIN;

-    pattern = text.substring(patch.start2 - padding, patch.start2+patch.length1 + padding);

-  }

-  // Add one chunk for good luck.

-  padding += PATCH_MARGIN;

-  // Add the prefix.

-  var prefix = text.substring(patch.start2 - padding, patch.start2);

-  if (prefix != '')

-    patch.diffs.unshift([0, prefix]);

-  // Add the suffix

-  var suffix = text.substring(patch.start2+patch.length1, patch.start2+patch.length1 + padding);

-  if (suffix != '')

-    patch.diffs.push([0, suffix]);

-

-  // Roll back the start points.

-  patch.start1 -= prefix.length;

-  patch.start2 -= prefix.length;

-  // Extend the lengths.

-  patch.length1 += prefix.length + suffix.length;

-  patch.length2 += prefix.length + suffix.length;

-}

-

-

-function patch_make(text1, text2, diff) {

-  // Compute a list of patches to turn text1 into text2.

-  // Use diff if provided, otherwise compute it ourselves.

-  if (typeof diff == 'undefined') {

-    diff = diff_main(text1, text2, true);

-    if (diff.length > 2) {

-      diff_cleanup_semantic(diff);

-      diff_cleanup_efficiency(diff);

-    }

-  }

-  if (diff.length == 0)

-    return []; // Get rid of the null case.

-  var patches = [];

-  var patch = new patch_obj();

-  var char_count1 = 0; // Number of characters into the text1 string.

-  var char_count2 = 0; // Number of characters into the text2 string.

-  var last_type = null;

-  var prepatch_text = text1; // Recreate the patches to determine context info.

-  var postpatch_text = text1;

-  for (var x=0; x<diff.length; x++) {

-    var diff_type = diff[x][0];

-    var diff_text = diff[x][1];

-

-    if (patch.diffs.length == 0 && diff_type != 0) {

-      // A new patch starts here.

-      patch.start1 = char_count1;

-      patch.start2 = char_count2;

-    }

-

-    if (diff_type == 1) {

-      // Insertion

-      patch.diffs.push(diff[x]);

-      patch.length2 += diff_text.length;

-      postpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2);

-    } else if (diff_type == -1) {

-      // Deletion.

-      patch.length1 += diff_text.length;

-      patch.diffs.push(diff[x]);

-      postpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length);

-    } else if (diff_type == 0 && diff_text.length <= 2*PATCH_MARGIN && patch.diffs.length != 0 && diff.length != x+1) {

-      // Small equality inside a patch.

-      patch.diffs.push(diff[x]);

-      patch.length1 += diff_text.length;

-      patch.length2 += diff_text.length;

-    }

-

-    last_type = diff_type;

-    if (diff_type == 0 && diff_text.length >= 2*PATCH_MARGIN) {

-      // Time for a new patch.

-      if (patch.diffs.length != 0) {

-        patch_addcontext(patch, prepatch_text);

-        patches.push(patch);

-        var patch = new patch_obj();

-        last_type = null;

-        prepatch_text = postpatch_text;

-      }

-    }

-

-    // Update the current character count.

-    if (diff_type != 1)

-      char_count1 += diff_text.length;

-    if (diff_type != -1)

-      char_count2 += diff_text.length;

-  }

-  // Pick up the leftover patch if not empty.

-  if (patch.diffs.length != 0) {

-    patch_addcontext(patch, prepatch_text);

-    patches.push(patch);

-  }

-

-  return patches;

-}

-

-

-function patch_apply(patches, text) {

-  // Merge a set of patches onto the text.

-  // Return a patched text, as well as a list of true/false values indicating which patches were applied.

-  patch_splitmax(patches);

-  var results = [];

-  var delta = 0;

-  var expected_loc, start_loc;

-  var text1, text2;

-  var diff, mod, index1, index2;

-  for (var x=0; x<patches.length; x++) {

-    expected_loc = patches[x].start2 + delta;

-    text1 = patches[x].text1();

-    start_loc = match_main(text, text1, expected_loc);

-    if (start_loc == null) {

-      // No match found.  :(

-      results.push(false);

-    } else {

-      // Found a match.  :)

-      results.push(true);

-      delta = start_loc - expected_loc;

-      text2 = text.substring(start_loc, start_loc + text1.length);

-      if (text1 == text2) {

-        // Perfect match, just shove the replacement text in.

-        text = text.substring(0, start_loc) + patches[x].text2() + text.substring(start_loc + text1.length);

-      } else {

-        // Imperfect match.  Run a diff to get a framework of equivalent indicies.

-        diff = diff_main(text1, text2, false);

-        index1 = 0;

-        for (var y=0; y<patches[x].diffs.length; y++) {

-          mod = patches[x].diffs[y];

-          if (mod[0] != 0)

-            index2 = diff_xindex(diff, index1);

-          if (mod[0] == 1) // Insertion

-            text = text.substring(0, start_loc + index2) + mod[1] + text.substring(start_loc + index2);

-          else if (mod[0] == -1) // Deletion

-            text = text.substring(0, start_loc + index2) + text.substring(start_loc + diff_xindex(diff, index1 + mod[1].length));

-          if (mod[0] != -1)

-            index1 += mod[1].length;

-        }

-      }

-    }

-  }

-  return [text, results];

-}

-

-

-function patch_splitmax(patches) {

-  // Look through the patches and break up any which are longer than the maximum limit of the match algorithm.

-  var bigpatch, patch, patch_size, start1, start2, diff_type, diff_text, precontext, postcontext, empty;

-  for (var x=0; x<patches.length; x++) {

-    if (patches[x].length1 > MATCH_MAXBITS) {

-      bigpatch = patches[x];

-      // Remove the big old patch.

-      patches.splice(x, 1);

-      patch_size = MATCH_MAXBITS;

-      start1 = bigpatch.start1;

-      start2 = bigpatch.start2;

-      precontext = '';

-      while (bigpatch.diffs.length != 0) {

-        // Create one of several smaller patches.

-        patch = new patch_obj();

-        empty = true;

-        patch.start1 = start1 - precontext.length;

-        patch.start2 = start2 - precontext.length;

-        if (precontext  != '') {

-          patch.length1 = patch.length2 = precontext.length;

-          patch.diffs.push([0, precontext]);

-        }

-        while (bigpatch.diffs.length != 0 && patch.length1 < patch_size - PATCH_MARGIN) {

-          diff_type = bigpatch.diffs[0][0];

-          diff_text = bigpatch.diffs[0][1];

-          if (diff_type == 1) {

-            // Insertions are harmless.

-            patch.length2 += diff_text.length;

-            start2 += diff_text.length;

-            patch.diffs.push(bigpatch.diffs.shift());

-            empty = false;

-          } else {

-            // Deletion or equality.  Only take as much as we can stomach.

-            diff_text = diff_text.substring(0, patch_size - patch.length1 - PATCH_MARGIN);

-            patch.length1 += diff_text.length;

-            start1 += diff_text.length;

-            if (diff_type == 0) {

-              patch.length2 += diff_text.length;

-              start2 += diff_text.length;

-            } else {

-              empty = false;

-            }

-            patch.diffs.push([diff_type, diff_text]);

-            if (diff_text == bigpatch.diffs[0][1])

-              bigpatch.diffs.shift();

-            else

-              bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length);

-          }

-        }

-        // Compute the head context for the next patch.

-        precontext = patch.text2();

-        precontext = precontext.substring(precontext.length - PATCH_MARGIN);

-        // Append the end context for this patch.

-        postcontext = bigpatch.text1().substring(0, PATCH_MARGIN);

-        if (postcontext  != '') {

-          patch.length1 += postcontext.length;

-          patch.length2 += postcontext.length;

-          if (patch.diffs.length > 0 && patch.diffs[patch.diffs.length-1][0] == 0)

-            patch.diffs[patch.diffs.length-1][1] += postcontext;

-          else

-            patch.diffs.push([0, postcontext]);

-        }

-        if (!empty)

-          patches.splice(x++, 0, patch);

-      }

-    }

-  }

-}

-

-

-function patch_totext(patches) {

-  // Take a list of patches and return a textual representation.

-  var text = '';

-  for (var x=0; x<patches.length; x++)

-    text += patches[x];

-  return text;

-}

-

-

-function patch_fromtext(text) {

-  // Take a textual representation of patches and return a list of patch objects.

-  var patches = [];

-  text = text.split('\n');

-  var patch, m, chars1, chars2, sign, line;

-  while (text.length != 0) {

-    m = text[0].match(/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/);

-    if (!m)

-      return alert("Invalid patch string:\n"+text[0]);

-    patch = new patch_obj();

-    patches.push(patch);

-    patch.start1 = parseInt(m[1]);

-    if (m[2] == '') {

-      patch.start1--;

-      patch.length1 = 1;

-    } else if (m[2] == '0') {

-      patch.length1 = 0;

-    } else {

-      patch.start1--;

-      patch.length1 = parseInt(m[2]);

-    }

-

-    patch.start2 = parseInt(m[3]);

-    if (m[4] == '') {

-      patch.start2--;

-      patch.length2 = 1;

-    } else if (m[4] == '0') {

-      patch.length2 = 0;

-    } else {

-      patch.start2--;

-      patch.length2 = parseInt(m[4]);

-    }

-    text.shift();

-

-    while (text.length != 0) {

-      sign = text[0].charAt(0);

-      line = decodeURIComponent(text[0].substring(1));

-      if (sign == '-') {

-        // Deletion.

-        patch.diffs.push([-1, line]);

-      } else if (sign == '+') {

-        // Insertion.

-        patch.diffs.push([1, line]);

-      } else if (sign == ' ') {

-        // Minor equality.

-        patch.diffs.push([0, line]);

-      } else if (sign == '@') {

-        // Start of next patch.

-        break;

-      } else if (sign == '') {

-        // Blank line?  Whatever.

-      } else {

-        // WTF?

-        return alert("Invalid patch mode: '"+sign+"'\n"+line);

-      }

-      text.shift();

-    }

-  }

-  return patches;

-}

-

-// EOF

 

--- a/tinymce/jscripts/tiny_mce/plugins/devkit/langs/en.js
+++ /dev/null
@@ -1,24 +1,1 @@
-// UK lang variables

-

-tinyMCE.addToLang('devkit',{

-title : 'TinyMCE Development Kit',

-info_tab : 'Info',

-settings_tab : 'Settings',

-log_tab : 'Log',

-content_tab : 'Content',

-command_states_tab : 'Commands',

-undo_redo_tab : 'Undo/Redo',

-misc_tab : 'Misc',

-filter : 'Filter:',

-clear_log : 'Clear log',

-refresh : 'Refresh',

-info_help : 'Press Refresh to view info.',

-settings_help : 'Press Refresh to display the settings array for each TinyMCE_Control instance.',

-content_help : 'Press Refresh to display the raw and cleaned HTML content for each TinyMCE_Control instance.',

-command_states_help : 'Press Refresh to display the current command states from inst.queryCommandState. This list will also mark unsupported commands.',

-undo_redo_help : 'Press Refresh to display the global and instance undo/redo levels.',

-misc_help : 'Here are various tools for debugging and development purposes.',

-debug_events : 'Debug events',

-undo_diff : 'Diff undo levels'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js
+++ /dev/null
@@ -1,82 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.Directionality', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			ed.addCommand('mceDirectionLTR', function() {

-				var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);

-

-				if (e) {

-					if (ed.dom.getAttrib(e, "dir") != "ltr")

-						ed.dom.setAttrib(e, "dir", "ltr");

-					else

-						ed.dom.setAttrib(e, "dir", "");

-				}

-

-				ed.nodeChanged();

-			});

-

-			ed.addCommand('mceDirectionRTL', function() {

-				var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);

-

-				if (e) {

-					if (ed.dom.getAttrib(e, "dir") != "rtl")

-						ed.dom.setAttrib(e, "dir", "rtl");

-					else

-						ed.dom.setAttrib(e, "dir", "");

-				}

-

-				ed.nodeChanged();

-			});

-

-			ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});

-			ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});

-

-			ed.onNodeChange.add(t._nodeChange, t);

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Directionality',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Private methods

-

-		_nodeChange : function(ed, cm, n) {

-			var dom = ed.dom, dir;

-

-			n = dom.getParent(n, dom.isBlock);

-			if (!n) {

-				cm.setDisabled('ltr', 1);

-				cm.setDisabled('rtl', 1);

-				return;

-			}

-

-			dir = dom.getAttrib(n, 'dir');

-			cm.setActive('ltr', dir == "ltr");

-			cm.setDisabled('ltr', 0);

-			cm.setActive('rtl', dir == "rtl");

-			cm.setDisabled('rtl', 0);

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce);
+

--- a/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js
+++ /dev/null
@@ -1,43 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function(tinymce) {

-	tinymce.create('tinymce.plugins.EmotionsPlugin', {

-		init : function(ed, url) {

-			// Register commands

-			ed.addCommand('mceEmotion', function() {

-				ed.windowManager.open({

-					file : url + '/emotions.htm',

-					width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),

-					height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			// Register buttons

-			ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Emotions',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);

-})(tinymce);
+

--- a/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm
+++ /dev/null
@@ -1,43 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#emotions_dlg.title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/emotions.js"></script>

-</head>

-<body style="display: none" role="application" aria-labelledby="app_title">

-<span style="display:none;" id="app_title">{#emotions_dlg.title}</span>

-<div align="center">

-	<div class="title">{#emotions_dlg.title}:<br /><br /></div>

-

-	<table id="emoticon_table" role="presentation" border="0" cellspacing="0" cellpadding="4">

-		<tr>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.cool}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.cry}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}"  /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" /></a></td>

-		</tr>

-		<tr>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.frown}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}. {#emotions_dlg.usage}"  /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" /></a></td>

-		</tr>

-		<tr>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}"/></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.smile}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" /></a></td>

-		</tr>

-		<tr>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.tongue_out}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.wink}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}. {#emotions_dlg.usage}" /></a></td>

-			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.yell}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}. {#emotions_dlg.usage}" /></a></td>

-		</tr>

-	</table>

-	<div>{#emotions_dlg.usage}</div>

-</div>

-</body>

-</html>

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js
+++ /dev/null
@@ -1,44 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var EmotionsDialog = {

-	addKeyboardNavigation: function(){

-		var tableElm, cells, settings;

-			

-		cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table");

-			

-		settings ={

-			root: "emoticon_table",

-			items: cells

-		};

-		cells[0].tabindex=0;

-		tinyMCEPopup.dom.addClass(cells[0], "mceFocus");

-		if (tinymce.isGecko) {

-			cells[0].focus();		

-		} else {

-			setTimeout(function(){

-				cells[0].focus();

-			}, 100);

-		}

-		tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);

-	}, 

-	init : function(ed) {

-		tinyMCEPopup.resizeToInnerSize();

-		this.addKeyboardNavigation();

-	},

-

-	insert : function(file, title) {

-		var ed = tinyMCEPopup.editor, dom = ed.dom;

-

-		tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {

-			src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,

-			alt : ed.getLang(title),

-			title : ed.getLang(title),

-			border : 0

-		}));

-

-		tinyMCEPopup.close();

-	}

-};

-

-tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js
+++ /dev/null
@@ -1,2 +1,1 @@
-tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"});
 

--- a/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm
+++ /dev/null
@@ -1,23 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#example_dlg.title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/dialog.js"></script>

-</head>

-<body>

-

-<form onsubmit="ExampleDialog.insert();return false;" action="#">

-	<p>Here is a example dialog.</p>

-	<p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>

-	<p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>

-

-	<div class="mceActionPanel">

-		<input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js
+++ /dev/null
@@ -1,84 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	// Load plugin specific language pack

-	tinymce.PluginManager.requireLangPack('example');

-

-	tinymce.create('tinymce.plugins.ExamplePlugin', {

-		/**

-		 * Initializes the plugin, this will be executed after the plugin has been created.

-		 * This call is done before the editor instance has finished it's initialization so use the onInit event

-		 * of the editor instance to intercept that event.

-		 *

-		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.

-		 * @param {string} url Absolute URL to where the plugin is located.

-		 */

-		init : function(ed, url) {

-			// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');

-			ed.addCommand('mceExample', function() {

-				ed.windowManager.open({

-					file : url + '/dialog.htm',

-					width : 320 + parseInt(ed.getLang('example.delta_width', 0)),

-					height : 120 + parseInt(ed.getLang('example.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url, // Plugin absolute URL

-					some_custom_arg : 'custom arg' // Custom argument

-				});

-			});

-

-			// Register example button

-			ed.addButton('example', {

-				title : 'example.desc',

-				cmd : 'mceExample',

-				image : url + '/img/example.gif'

-			});

-

-			// Add a node change handler, selects the button in the UI when a image is selected

-			ed.onNodeChange.add(function(ed, cm, n) {

-				cm.setActive('example', n.nodeName == 'IMG');

-			});

-		},

-

-		/**

-		 * Creates control instances based in the incomming name. This method is normally not

-		 * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons

-		 * but you sometimes need to create more complex controls like listboxes, split buttons etc then this

-		 * method can be used to create those.

-		 *

-		 * @param {String} n Name of the control to create.

-		 * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.

-		 * @return {tinymce.ui.Control} New control instance or null if no control was created.

-		 */

-		createControl : function(n, cm) {

-			return null;

-		},

-

-		/**

-		 * Returns information about the plugin as a name/value array.

-		 * The current keys are longname, author, authorurl, infourl and version.

-		 *

-		 * @return {Object} Name/value array containing information about the plugin.

-		 */

-		getInfo : function() {

-			return {

-				longname : 'Example plugin',

-				author : 'Some author',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',

-				version : "1.0"

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);

-})();
+

 Binary files a/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js
+++ /dev/null
@@ -1,20 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var ExampleDialog = {

-	init : function() {

-		var f = document.forms[0];

-

-		// Get the selected contents as text and place it in the input

-		f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});

-		f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');

-	},

-

-	insert : function() {

-		// Insert the contents from the input into the document

-		tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);

-		tinyMCEPopup.close();

-	}

-};

-

-tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js
+++ /dev/null
@@ -1,4 +1,1 @@
-tinyMCE.addI18n('en.example',{

-	desc : 'This is just a template button'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js
+++ /dev/null
@@ -1,4 +1,1 @@
-tinyMCE.addI18n('en.example_dlg',{

-	title : 'This is just a example title'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.ExampleDependencyPlugin",{init:function(a,b){},getInfo:function(){return{longname:"Example Dependency plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency",version:"1.0"}}});tinymce.PluginManager.add("example_dependency",tinymce.plugins.ExampleDependencyPlugin,["example"])})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js
+++ /dev/null
@@ -1,51 +1,1 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
 
-(function() {
-
-	tinymce.create('tinymce.plugins.ExampleDependencyPlugin', {
-		/**
-		 * Initializes the plugin, this will be executed after the plugin has been created.
-		 * This call is done before the editor instance has finished it's initialization so use the onInit event
-		 * of the editor instance to intercept that event.
-		 *
-		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
-		 * @param {string} url Absolute URL to where the plugin is located.
-		 */
-		init : function(ed, url) {
-		},
-
-
-		/**
-		 * Returns information about the plugin as a name/value array.
-		 * The current keys are longname, author, authorurl, infourl and version.
-		 *
-		 * @return {Object} Name/value array containing information about the plugin.
-		 */
-		getInfo : function() {
-			return {
-				longname : 'Example Dependency plugin',
-				author : 'Some author',
-				authorurl : 'http://tinymce.moxiecode.com',
-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency',
-				version : "1.0"
-			};
-		}
-	});
-
-	/**
-	 * Register the plugin, specifying the list of the plugins that this plugin depends on.  They are specified in a list, with the list loaded in order.
-	 * plugins in this list will be initialised when this plugin is initialized. (before the init method is called).
-	 * plugins in a depends list should typically be specified using the short name).  If neccesary this can be done
-	 * with an object which has the url to the plugin and the shortname.
-	 */
-	tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']);
-})();
-

--- a/tinymce/jscripts/tiny_mce/plugins/flash/css/content.css
+++ /dev/null
@@ -1,8 +1,1 @@
-.mceItemFlash {

-	border: 1px dotted #cc0000;

-	background-image: url('../images/flash.gif');

-	background-position: center;

-	background-repeat: no-repeat;

-	background-color: #ffffcc;

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/flash/css/flash.css
+++ /dev/null
@@ -1,12 +1,1 @@
-.panel_wrapper div.current {

-	height: 100px;

-}

-

-#width, #height {

-	width: 50px;

-}

-

-#file {

-	width: 250px;

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/flash/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.importPluginLanguagePack('flash');var TinyMCE_FlashPlugin={getInfo:function(){return{longname:'Flash',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/flash',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(!tinyMCE.settings['flash_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/flash/css/content.css")},getControlHTML:function(cn){switch(cn){case"flash":return tinyMCE.getButtonHTML(cn,'lang_flash_desc','{$pluginurl}/images/flash.gif','mceFlash')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceFlash":var name="",swffile="",swfwidth="",swfheight="",action="insert";var template=new Array();var inst=tinyMCE.getInstanceById(editor_id);var focusElm=inst.getFocusElement();template['file']='../../plugins/flash/flash.htm';template['width']=430;template['height']=175;template['width']+=tinyMCE.getLang('lang_flash_delta_width',0);template['height']+=tinyMCE.getLang('lang_flash_delta_height',0);if(focusElm!=null&&focusElm.nodeName.toLowerCase()=="img"){name=tinyMCE.getAttrib(focusElm,'class');if(name.indexOf('mceItemFlash')==-1)return true;swffile=tinyMCE.getAttrib(focusElm,'alt');if(tinyMCE.getParam('convert_urls'))swffile=eval(tinyMCE.settings['urlconverter_callback']+"(swffile, null, true);");swfwidth=tinyMCE.getAttrib(focusElm,'width');swfheight=tinyMCE.getAttrib(focusElm,'height');action="update"}tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes",swffile:swffile,swfwidth:swfwidth,swfheight:swfheight,action:action});return true}return false},cleanup:function(type,content){switch(type){case"insert_to_editor_dom":if(tinyMCE.getParam('convert_urls')){var imgs=content.getElementsByTagName("img");for(var i=0;i<imgs.length;i++){if(tinyMCE.getAttrib(imgs[i],"class")=="mceItemFlash"){var src=tinyMCE.getAttrib(imgs[i],"alt");if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, null, true);");imgs[i].setAttribute('alt',src);imgs[i].setAttribute('title',src)}}}break;case"get_from_editor_dom":var imgs=content.getElementsByTagName("img");for(var i=0;i<imgs.length;i++){if(tinyMCE.getAttrib(imgs[i],"class")=="mceItemFlash"){var src=tinyMCE.getAttrib(imgs[i],"alt");if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, null, true);");imgs[i].setAttribute('alt',src);imgs[i].setAttribute('title',src)}}break;case"insert_to_editor":var startPos=0;var embedList=new Array();content=content.replace(new RegExp('<[ ]*embed','gi'),'<embed');content=content.replace(new RegExp('<[ ]*/embed[ ]*>','gi'),'</embed>');content=content.replace(new RegExp('<[ ]*object','gi'),'<object');content=content.replace(new RegExp('<[ ]*/object[ ]*>','gi'),'</object>');while((startPos=content.indexOf('<embed',startPos+1))!=-1){var endPos=content.indexOf('>',startPos);var attribs=TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos+6,endPos));embedList[embedList.length]=attribs}var index=0;while((startPos=content.indexOf('<object',startPos))!=-1){if(index>=embedList.length)break;var attribs=embedList[index];endPos=content.indexOf('</object>',startPos);endPos+=9;var contentAfter=content.substring(endPos);content=content.substring(0,startPos);content+='<img width="'+attribs["width"]+'" height="'+attribs["height"]+'"';content+=' src="'+(tinyMCE.getParam("theme_href")+'/images/spacer.gif')+'" title="'+attribs["src"]+'"';content+=' alt="'+attribs["src"]+'" class="mceItemFlash" />'+content.substring(endPos);content+=contentAfter;index++;startPos++}var index=0;while((startPos=content.indexOf('<embed',startPos))!=-1){if(index>=embedList.length)break;var attribs=embedList[index];endPos=content.indexOf('>',startPos);endPos+=9;var contentAfter=content.substring(endPos);content=content.substring(0,startPos);content+='<img width="'+attribs["width"]+'" height="'+attribs["height"]+'"';content+=' src="'+(tinyMCE.getParam("theme_href")+'/images/spacer.gif')+'" title="'+attribs["src"]+'"';content+=' alt="'+attribs["src"]+'" class="mceItemFlash" />'+content.substring(endPos);content+=contentAfter;index++;startPos++}break;case"get_from_editor":var startPos=-1;while((startPos=content.indexOf('<img',startPos+1))!=-1){var endPos=content.indexOf('/>',startPos);var attribs=TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos+4,endPos));if(attribs['class']!="mceItemFlash")continue;endPos+=2;var embedHTML='';var wmode=tinyMCE.getParam("flash_wmode","");var quality=tinyMCE.getParam("flash_quality","high");var menu=tinyMCE.getParam("flash_menu","false");embedHTML+='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';embedHTML+=' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"';embedHTML+=' width="'+attribs["width"]+'" height="'+attribs["height"]+'">';embedHTML+='<param name="movie" value="'+attribs["title"]+'" />';embedHTML+='<param name="quality" value="'+quality+'" />';embedHTML+='<param name="menu" value="'+menu+'" />';embedHTML+='<param name="wmode" value="'+wmode+'" />';embedHTML+='<embed src="'+attribs["title"]+'" wmode="'+wmode+'" quality="'+quality+'" menu="'+menu+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="'+attribs["width"]+'" height="'+attribs["height"]+'"></embed></object>';chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter}break}return content},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){if(node==null)return;do{if(node.nodeName=="IMG"&&tinyMCE.getAttrib(node,'class').indexOf('mceItemFlash')==0){tinyMCE.switchClass(editor_id+'_flash','mceButtonSelected');return true}}while((node=node.parentNode));tinyMCE.switchClass(editor_id+'_flash','mceButtonNormal');return true},_parseAttributes:function(attribute_string){var attributeName="";var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i<attribute_string.length;i++){var chr=attribute_string.charAt(i);if((chr=='"'||chr=="'")&&!withInValue)withInValue=true;else if((chr=='"'||chr=="'")&&withInValue){withInValue=false;var pos=attributeName.lastIndexOf(' ');if(pos!=-1)attributeName=attributeName.substring(pos+1);attributes[attributeName.toLowerCase()]=attributeValue.substring(1);attributeName="";attributeValue=""}else if(!whiteSpaceRegExp.test(chr)&&!withInName&&!withInValue)withInName=true;if(chr=='='&&withInName)withInName=false;if(withInName)attributeName+=chr;if(withInValue)attributeValue+=chr}return attributes}};tinyMCE.addPlugin("flash",TinyMCE_FlashPlugin);
+

--- a/tinymce/jscripts/tiny_mce/plugins/flash/editor_plugin_src.js
+++ /dev/null
@@ -1,286 +1,1 @@
-/**

- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $

- *

- * @author Moxiecode


- */

-

-/* Import plugin specific language pack */

-tinyMCE.importPluginLanguagePack('flash');

-

-var TinyMCE_FlashPlugin = {

-	getInfo : function() {

-		return {

-			longname : 'Flash',

-			author : 'Moxiecode Systems AB',

-			authorurl : 'http://tinymce.moxiecode.com',

-			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/flash',

-			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

-		};

-	},

-

-	initInstance : function(inst) {

-		if (!tinyMCE.settings['flash_skip_plugin_css'])

-			tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/flash/css/content.css");

-	},

-

-	getControlHTML : function(cn) {

-		switch (cn) {

-			case "flash":

-				return tinyMCE.getButtonHTML(cn, 'lang_flash_desc', '{$pluginurl}/images/flash.gif', 'mceFlash');

-		}

-

-		return "";

-	},

-

-	execCommand : function(editor_id, element, command, user_interface, value) {

-		// Handle commands

-		switch (command) {

-			case "mceFlash":

-				var name = "", swffile = "", swfwidth = "", swfheight = "", action = "insert";

-				var template = new Array();

-				var inst = tinyMCE.getInstanceById(editor_id);

-				var focusElm = inst.getFocusElement();

-

-				template['file']   = '../../plugins/flash/flash.htm'; // Relative to theme

-				template['width']  = 430;

-				template['height'] = 175;

-

-				template['width'] += tinyMCE.getLang('lang_flash_delta_width', 0);

-				template['height'] += tinyMCE.getLang('lang_flash_delta_height', 0);

-

-				// Is selection a image

-				if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") {

-					name = tinyMCE.getAttrib(focusElm, 'class');

-

-					if (name.indexOf('mceItemFlash') == -1) // Not a Flash

-						return true;

-

-					// Get rest of Flash items

-					swffile = tinyMCE.getAttrib(focusElm, 'alt');

-

-					if (tinyMCE.getParam('convert_urls'))

-						swffile = eval(tinyMCE.settings['urlconverter_callback'] + "(swffile, null, true);");

-

-					swfwidth = tinyMCE.getAttrib(focusElm, 'width');

-					swfheight = tinyMCE.getAttrib(focusElm, 'height');

-					action = "update";

-				}

-

-				tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes", swffile : swffile, swfwidth : swfwidth, swfheight : swfheight, action : action});

-			return true;

-	   }

-

-	   // Pass to next handler in chain

-	   return false;

-	},

-

-	cleanup : function(type, content) {

-		switch (type) {

-			case "insert_to_editor_dom":

-				// Force relative/absolute

-				if (tinyMCE.getParam('convert_urls')) {

-					var imgs = content.getElementsByTagName("img");

-					for (var i=0; i<imgs.length; i++) {

-						if (tinyMCE.getAttrib(imgs[i], "class") == "mceItemFlash") {

-							var src = tinyMCE.getAttrib(imgs[i], "alt");

-

-							if (tinyMCE.getParam('convert_urls'))

-								src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, null, true);");

-

-							imgs[i].setAttribute('alt', src);

-							imgs[i].setAttribute('title', src);

-						}

-					}

-				}

-				break;

-

-			case "get_from_editor_dom":

-				var imgs = content.getElementsByTagName("img");

-				for (var i=0; i<imgs.length; i++) {

-					if (tinyMCE.getAttrib(imgs[i], "class") == "mceItemFlash") {

-						var src = tinyMCE.getAttrib(imgs[i], "alt");

-

-						if (tinyMCE.getParam('convert_urls'))

-							src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, null, true);");

-

-						imgs[i].setAttribute('alt', src);

-						imgs[i].setAttribute('title', src);

-					}

-				}

-				break;

-

-			case "insert_to_editor":

-				var startPos = 0;

-				var embedList = new Array();

-

-				// Fix the embed and object elements

-				content = content.replace(new RegExp('<[ ]*embed','gi'),'<embed');

-				content = content.replace(new RegExp('<[ ]*/embed[ ]*>','gi'),'</embed>');

-				content = content.replace(new RegExp('<[ ]*object','gi'),'<object');

-				content = content.replace(new RegExp('<[ ]*/object[ ]*>','gi'),'</object>');

-

-				// Parse all embed tags

-				while ((startPos = content.indexOf('<embed', startPos+1)) != -1) {

-					var endPos = content.indexOf('>', startPos);

-					var attribs = TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos + 6, endPos));

-					embedList[embedList.length] = attribs;

-				}

-

-				// Parse all object tags and replace them with images from the embed data

-				var index = 0;

-				while ((startPos = content.indexOf('<object', startPos)) != -1) {

-					if (index >= embedList.length)

-						break;

-

-					var attribs = embedList[index];

-

-					// Find end of object

-					endPos = content.indexOf('</object>', startPos);

-					endPos += 9;

-

-					// Insert image

-					var contentAfter = content.substring(endPos);

-					content = content.substring(0, startPos);

-					content += '<img width="' + attribs["width"] + '" height="' + attribs["height"] + '"';

-					content += ' src="' + (tinyMCE.getParam("theme_href") + '/images/spacer.gif') + '" title="' + attribs["src"] + '"';

-					content += ' alt="' + attribs["src"] + '" class="mceItemFlash" />' + content.substring(endPos);

-					content += contentAfter;

-					index++;

-

-					startPos++;

-				}

-

-				// Parse all embed tags and replace them with images from the embed data

-				var index = 0;

-				while ((startPos = content.indexOf('<embed', startPos)) != -1) {

-					if (index >= embedList.length)

-						break;

-

-					var attribs = embedList[index];

-

-					// Find end of embed

-					endPos = content.indexOf('>', startPos);

-					endPos += 9;

-

-					// Insert image

-					var contentAfter = content.substring(endPos);

-					content = content.substring(0, startPos);

-					content += '<img width="' + attribs["width"] + '" height="' + attribs["height"] + '"';

-					content += ' src="' + (tinyMCE.getParam("theme_href") + '/images/spacer.gif') + '" title="' + attribs["src"] + '"';

-					content += ' alt="' + attribs["src"] + '" class="mceItemFlash" />' + content.substring(endPos);

-					content += contentAfter;

-					index++;

-

-					startPos++;

-				}

-

-				break;

-

-			case "get_from_editor":

-				// Parse all img tags and replace them with object+embed

-				var startPos = -1;

-

-				while ((startPos = content.indexOf('<img', startPos+1)) != -1) {

-					var endPos = content.indexOf('/>', startPos);

-					var attribs = TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos + 4, endPos));

-

-					// Is not flash, skip it

-					if (attribs['class'] != "mceItemFlash")

-						continue;

-

-					endPos += 2;

-

-					var embedHTML = '';

-					var wmode = tinyMCE.getParam("flash_wmode", "");

-					var quality = tinyMCE.getParam("flash_quality", "high");

-					var menu = tinyMCE.getParam("flash_menu", "false");

-

-					// Insert object + embed

-					embedHTML += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';

-					embedHTML += ' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"';

-					embedHTML += ' width="' + attribs["width"] + '" height="' + attribs["height"] + '">';

-					embedHTML += '<param name="movie" value="' + attribs["title"] + '" />';

-					embedHTML += '<param name="quality" value="' + quality + '" />';

-					embedHTML += '<param name="menu" value="' + menu + '" />';

-					embedHTML += '<param name="wmode" value="' + wmode + '" />';

-					embedHTML += '<embed src="' + attribs["title"] + '" wmode="' + wmode + '" quality="' + quality + '" menu="' + menu + '" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="' + attribs["width"] + '" height="' + attribs["height"] + '"></embed></object>';

-

-					// Insert embed/object chunk

-					chunkBefore = content.substring(0, startPos);

-					chunkAfter = content.substring(endPos);

-					content = chunkBefore + embedHTML + chunkAfter;

-				}

-				break;

-		}

-

-		// Pass through to next handler in chain

-		return content;

-	},

-

-	handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {

-		if (node == null)

-			return;

-

-		do {

-			if (node.nodeName == "IMG" && tinyMCE.getAttrib(node, 'class').indexOf('mceItemFlash') == 0) {

-				tinyMCE.switchClass(editor_id + '_flash', 'mceButtonSelected');

-				return true;

-			}

-		} while ((node = node.parentNode));

-

-		tinyMCE.switchClass(editor_id + '_flash', 'mceButtonNormal');

-

-		return true;

-	},

-

-	// Private plugin internal functions

-

-	_parseAttributes : function(attribute_string) {

-		var attributeName = "";

-		var attributeValue = "";

-		var withInName;

-		var withInValue;

-		var attributes = new Array();

-		var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g');

-

-		if (attribute_string == null || attribute_string.length < 2)

-			return null;

-

-		withInName = withInValue = false;

-

-		for (var i=0; i<attribute_string.length; i++) {

-			var chr = attribute_string.charAt(i);

-

-			if ((chr == '"' || chr == "'") && !withInValue)

-				withInValue = true;

-			else if ((chr == '"' || chr == "'") && withInValue) {

-				withInValue = false;

-

-				var pos = attributeName.lastIndexOf(' ');

-				if (pos != -1)

-					attributeName = attributeName.substring(pos+1);

-

-				attributes[attributeName.toLowerCase()] = attributeValue.substring(1);

-

-				attributeName = "";

-				attributeValue = "";

-			} else if (!whiteSpaceRegExp.test(chr) && !withInName && !withInValue)

-				withInName = true;

-

-			if (chr == '=' && withInName)

-				withInName = false;

-

-			if (withInName)

-				attributeName += chr;

-

-			if (withInValue)

-				attributeValue += chr;

-		}

-

-		return attributes;

-	}

-};

-

-tinyMCE.addPlugin("flash", TinyMCE_FlashPlugin);

 

--- a/tinymce/jscripts/tiny_mce/plugins/flash/flash.htm
+++ /dev/null
@@ -1,71 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{$lang_flash_title}</title>

-	<script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script language="javascript" type="text/javascript" src="jscripts/flash.js"></script>

-	<script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>

-	<link href="css/flash.css" rel="stylesheet" type="text/css" />

-	<base target="_self" />

-</head>

-<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">

-    <form onsubmit="insertFlash();return false;" action="#">

-		<div class="tabs">

-			<ul>

-				<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_flash_general}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="general_panel" class="panel current">

-				<fieldset>

-					<legend>{$lang_flash_general}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-							<tr>

-							<td nowrap="nowrap"><label for="file">{$lang_flash_file}</label></td>

-							  <td nowrap="nowrap">

-									<table border="0" cellspacing="0" cellpadding="0">

-									  <tr>

-										<td><input id="file" name="file" type="text" value="" onfocus="this.select();" /></td>

-										<td id="filebrowsercontainer">&nbsp;</td>

-									  </tr>

-									</table>

-								</td>

-							</tr>

-							<tr id="linklistrow">

-								<td><label for="linklist">{$lang_flash_list}</label></td>

-								<td id="linklistcontainer">&nbsp;</td>

-							</tr>

-							<tr>

-								<td nowrap="nowrap"><label>{$lang_flash_size}</label></td>

-								<td nowrap="nowrap">

-									<input type="text" id="width" name="width" value="" onfocus="this.select();" />

-									<select name="width2" id="width2" style="width: 50px">

-										<option value="">px</option>

-										<option value="%">%</option>

-									</select>&nbsp;x&nbsp;<input id="height" name="height" type="text"  value="" onfocus="this.select();" />

-									<select name="height2" id="height2" style="width: 50px">

-										<option value="">px</option>

-										<option value="%">%</option>

-									</select>

-								</td>

-							</tr>

-					</table>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<div style="float: left">

-				<input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertFlash();" />

-			</div>

-

-			<div style="float: right">

-				<input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />

-			</div>

-		</div>

-	</form>

-</body>

-</html>

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/flash/images/flash.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/flash/jscripts/flash.js
+++ /dev/null
@@ -1,108 +1,1 @@
-var url = tinyMCE.getParam("flash_external_list_url");

-if (url != null) {

-	// Fix relative

-	if (url.charAt(0) != '/' && url.indexOf('://') == -1)

-		url = tinyMCE.documentBasePath + "/" + url;

-

-	document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');

-}

-

-function init() {

-	tinyMCEPopup.resizeToInnerSize();

-

-	document.getElementById("filebrowsercontainer").innerHTML = getBrowserHTML('filebrowser','file','flash','flash');

-

-	// Image list outsrc

-	var html = getFlashListHTML('filebrowser','file','flash','flash');

-	if (html == "")

-		document.getElementById("linklistrow").style.display = 'none';

-	else

-		document.getElementById("linklistcontainer").innerHTML = html;

-

-	var formObj = document.forms[0];

-	var swffile   = tinyMCE.getWindowArg('swffile');

-	var swfwidth  = '' + tinyMCE.getWindowArg('swfwidth');

-	var swfheight = '' + tinyMCE.getWindowArg('swfheight');

-

-	if (swfwidth.indexOf('%')!=-1) {

-		formObj.width2.value = "%";

-		formObj.width.value  = swfwidth.substring(0,swfwidth.length-1);

-	} else {

-		formObj.width2.value = "px";

-		formObj.width.value  = swfwidth;

-	}

-

-	if (swfheight.indexOf('%')!=-1) {

-		formObj.height2.value = "%";

-		formObj.height.value  = swfheight.substring(0,swfheight.length-1);

-	} else {

-		formObj.height2.value = "px";

-		formObj.height.value  = swfheight;

-	}

-

-	formObj.file.value = swffile;

-	formObj.insert.value = tinyMCE.getLang('lang_' + tinyMCE.getWindowArg('action'), 'Insert', true);

-

-	selectByValue(formObj, 'linklist', swffile);

-

-	// Handle file browser

-	if (isVisible('filebrowser'))

-		document.getElementById('file').style.width = '230px';

-

-	// Auto select flash in list

-	if (typeof(tinyMCEFlashList) != "undefined" && tinyMCEFlashList.length > 0) {

-		for (var i=0; i<formObj.linklist.length; i++) {

-			if (formObj.linklist.options[i].value == tinyMCE.getWindowArg('swffile'))

-				formObj.linklist.options[i].selected = true;

-		}

-	}

-}

-

-function getFlashListHTML() {

-	if (typeof(tinyMCEFlashList) != "undefined" && tinyMCEFlashList.length > 0) {

-		var html = "";

-

-		html += '<select id="linklist" name="linklist" style="width: 250px" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.file.value=this.options[this.selectedIndex].value;">';

-		html += '<option value="">---</option>';

-

-		for (var i=0; i<tinyMCEFlashList.length; i++)

-			html += '<option value="' + tinyMCEFlashList[i][1] + '">' + tinyMCEFlashList[i][0] + '</option>';

-

-		html += '</select>';

-

-		return html;

-	}

-

-	return "";

-}

-

-function insertFlash() {

-	var formObj = document.forms[0];

-	var html      = '';

-	var file      = formObj.file.value;

-	var width     = formObj.width.value;

-	var height    = formObj.height.value;

-	if (formObj.width2.value=='%') {

-		width = width + '%';

-	}

-	if (formObj.height2.value=='%') {

-		height = height + '%';

-	}

-

-	if (width == "")

-		width = 100;

-

-	if (height == "")

-		height = 100;

-

-	html += ''

-		+ '<img src="' + (tinyMCE.getParam("theme_href") + "/images/spacer.gif") + '" mce_src="' + (tinyMCE.getParam("theme_href") + "/images/spacer.gif") + '" '

-		+ 'width="' + width + '" height="' + height + '" '

-		+ 'border="0" alt="' + file + '" title="' + file + '" class="mceItemFlash" />';

-

-	tinyMCEPopup.execCommand("mceInsertContent", true, html);

-	tinyMCE.selectedInstance.repaint();

-

-	tinyMCEPopup.close();

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/flash/langs/en.js
+++ /dev/null
@@ -1,12 +1,1 @@
-// UK lang variables

-

-tinyMCE.addToLang('flash',{

-title : 'Insert / edit Flash Movie',

-desc : 'Insert / edit Flash Movie',

-file : 'Flash-File (.swf)',

-size : 'Size',

-list : 'Flash files',

-props : 'Flash properties',

-general : 'General'

-});

 

--- a/tinymce/jscripts/tiny_mce/plugins/flash/readme.txt
+++ /dev/null
@@ -1,2 +1,1 @@
-Check the TinyMCE documentation for details on this plugin.

 

--- a/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css
+++ /dev/null
@@ -1,143 +1,1 @@
-/* Hide the advanced tab */

-#advanced_tab {

-	display: none;

-}

-

-#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {

-	width: 280px;

-}

-

-#doctype, #docencoding {

-	width: 200px;

-}

-

-#langcode {

-	width: 30px;

-}

-

-#bgimage {

-	width: 220px;	

-}

-

-#fontface {

-	width: 240px;

-}

-

-#leftmargin, #rightmargin, #topmargin, #bottommargin {

-	width: 50px;

-}

-

-.panel_wrapper div.current {

-	height: 400px;

-}

-

-#stylesheet, #style {

-	width: 240px;

-}

-

-#doctypes {

-	width: 200px;

-}

-

-/* Head list classes */

-

-.headlistwrapper {

-	width: 100%;

-}

-

-.selected {

-	border: 1px solid #0A246A;

-	background-color: #B6BDD2;

-}

-

-.toolbar {

-	width: 100%;

-}

-

-#headlist {

-	width: 100%;

-	margin-top: 3px;

-	font-size: 11px;

-}

-

-#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {

-	display: none;

-}

-

-#addmenu {

-	position: absolute;

-	border: 1px solid gray;

-	display: none;

-	z-index: 100;

-	background-color: white;

-}

-

-#addmenu a {

-	display: block;

-	width: 100%;

-	line-height: 20px;

-	text-decoration: none;

-	background-color: white;

-}

-

-#addmenu a:hover {

-	background-color: #B6BDD2;

-	color: black;

-}

-

-#addmenu span {

-	padding-left: 10px;

-	padding-right: 10px;

-}

-

-#updateElementPanel {

-	display: none;

-}

-

-#script_element .panel_wrapper div.current {

-	height: 108px;

-}

-

-#style_element .panel_wrapper div.current {

-	height: 108px;

-}

-

-#link_element  .panel_wrapper div.current {

-	height: 140px;

-}

-

-#element_script_value {

-	width: 100%;

-	height: 100px;

-}

-

-#element_comment_value {

-	width: 100%;

-	height: 120px;

-}

-

-#element_style_value {

-	width: 100%;

-	height: 100px;

-}

-

-#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {

-	width: 250px;

-}

-

-.updateElementButton {

-	margin-top: 3px;

-}

-

-/* MSIE specific styles */

-

-* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {

-	width: 22px;

-	height: 22px;

-}

-

-textarea {

-	height: 55px;

-}

-

-.panel_wrapper div.current {height:420px;}
+

--- a/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var f=this._parseHeader(),h={},c,i,g,e=this.editor;function d(l,j){var k=l.attr(j);return k||""}h.fontface=e.getParam("fullpage_default_fontface","");h.fontsize=e.getParam("fullpage_default_fontsize","");i=f.firstChild;if(i.type==7){h.xml_pi=true;g=/encoding="([^"]+)"/.exec(i.value);if(g){h.docencoding=g[1]}}i=f.getAll("#doctype")[0];if(i){h.doctype="<!DOCTYPE"+i.value+">"}i=f.getAll("title")[0];if(i&&i.firstChild){h.metatitle=i.firstChild.value}b(f.getAll("meta"),function(m){var k=m.attr("name"),j=m.attr("http-equiv"),l;if(k){h["meta"+k.toLowerCase()]=m.attr("content")}else{if(j=="Content-Type"){l=/charset\s*=\s*(.*)\s*/gi.exec(m.attr("content"));if(l){h.docencoding=l[1]}}}});i=f.getAll("html")[0];if(i){h.langcode=d(i,"lang")||d(i,"xml:lang")}i=f.getAll("link")[0];if(i&&i.attr("rel")=="stylesheet"){h.stylesheet=i.attr("href")}i=f.getAll("body")[0];if(i){h.langdir=d(i,"dir");h.style=d(i,"style");h.visited_color=d(i,"vlink");h.link_color=d(i,"link");h.active_color=d(i,"alink")}return h},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n<l.length;n++){p=l[n];if(p.attr("name")==m){if(o){p.attr("content",o)}else{p.remove()}return}}if(o){j=new a("meta",1);j.attr("name",m);j.attr("content",o);j.shortEnded=true;i(j)}});j=f.getAll("link")[0];if(j&&j.attr("rel")=="stylesheet"){if(g.stylesheet){j.attr("href",g.stylesheet)}else{j.remove()}}else{if(g.stylesheet){j=new a("link",1);j.attr({rel:"stylesheet",text:"text/css",href:g.stylesheet});j.shortEnded=true;i(j)}}j=f.getAll("body")[0];if(j){c(j,"dir",g.langdir);c(j,"style",g.style);c(j,"vlink",g.visited_color);c(j,"link",g.link_color);c(j,"alink",g.active_color);e.setAttribs(this.editor.getBody(),{style:g.style,dir:g.dir,vLink:g.visited_color,link:g.link_color,aLink:g.active_color})}j=f.getAll("html")[0];if(j){c(j,"lang",g.langcode);c(j,"xml:lang",g.langcode)}h=new tinymce.html.Serializer({validate:false,indent:true,apply_source_formatting:true,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(f);this.head=h.substring(0,h.indexOf("</body>"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("<body");if(i!=-1){i=h.indexOf(">",i);m.head=k(h.substring(0,i+1));c=h.indexOf("</body",i);if(c==-1){c=h.length}d.content=h.substring(i+1,c);m.foot=k(h.substring(c))}else{m.head=this._getDefaultHeader();m.foot="\n</body>\n</html>"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='<?xml version="1.0" encoding="'+c.getParam("fullpage_default_encoding","ISO-8859-1")+'" ?>\n'}f+=c.getParam("fullpage_default_doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');f+="\n<html>\n<head>\n";if(e=c.getParam("fullpage_default_title")){f+="<title>"+e+"</title>\n"}if(e=c.getParam("fullpage_default_encoding")){f+='<meta http-equiv="Content-Type" content="text/html; charset='+e+'" />\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="</head>\n<body"+(d?' style="'+d+'"':"")+">\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
+++ /dev/null
@@ -1,406 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var each = tinymce.each, Node = tinymce.html.Node;

-

-	tinymce.create('tinymce.plugins.FullPagePlugin', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceFullPageProperties', function() {

-				ed.windowManager.open({

-					file : url + '/fullpage.htm',

-					width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),

-					height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url,

-					data : t._htmlToData()

-				});

-			});

-

-			// Register buttons

-			ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});

-

-			ed.onBeforeSetContent.add(t._setContent, t);

-			ed.onGetContent.add(t._getContent, t);

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Fullpage',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Private plugin internal methods

-

-		_htmlToData : function() {

-			var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;

-

-			function getAttr(elm, name) {

-				var value = elm.attr(name);

-

-				return value || '';

-			};

-

-			// Default some values

-			data.fontface = editor.getParam("fullpage_default_fontface", "");

-			data.fontsize = editor.getParam("fullpage_default_fontsize", "");

-

-			// Parse XML PI

-			elm = headerFragment.firstChild;

-			if (elm.type == 7) {

-				data.xml_pi = true;

-				matches = /encoding="([^"]+)"/.exec(elm.value);

-				if (matches)

-					data.docencoding = matches[1];

-			}

-

-			// Parse doctype

-			elm = headerFragment.getAll('#doctype')[0];

-			if (elm)

-				data.doctype = '<!DOCTYPE' + elm.value + ">"; 

-

-			// Parse title element

-			elm = headerFragment.getAll('title')[0];

-			if (elm && elm.firstChild) {

-				data.metatitle = elm.firstChild.value;

-			}

-

-			// Parse meta elements

-			each(headerFragment.getAll('meta'), function(meta) {

-				var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches;

-

-				if (name)

-					data['meta' + name.toLowerCase()] = meta.attr('content');

-				else if (httpEquiv == "Content-Type") {

-					matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content'));

-

-					if (matches)

-						data.docencoding = matches[1];

-				}

-			});

-

-			// Parse html attribs

-			elm = headerFragment.getAll('html')[0];

-			if (elm)

-				data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');

-	

-			// Parse stylesheet

-			elm = headerFragment.getAll('link')[0];

-			if (elm && elm.attr('rel') == 'stylesheet')

-				data.stylesheet = elm.attr('href');

-

-			// Parse body parts

-			elm = headerFragment.getAll('body')[0];

-			if (elm) {

-				data.langdir = getAttr(elm, 'dir');

-				data.style = getAttr(elm, 'style');

-				data.visited_color = getAttr(elm, 'vlink');

-				data.link_color = getAttr(elm, 'link');

-				data.active_color = getAttr(elm, 'alink');

-			}

-

-			return data;

-		},

-

-		_dataToHtml : function(data) {

-			var headerFragment, headElement, html, elm, value, dom = this.editor.dom;

-

-			function setAttr(elm, name, value) {

-				elm.attr(name, value ? value : undefined);

-			};

-

-			function addHeadNode(node) {

-				if (headElement.firstChild)

-					headElement.insert(node, headElement.firstChild);

-				else

-					headElement.append(node);

-			};

-

-			headerFragment = this._parseHeader();

-			headElement = headerFragment.getAll('head')[0];

-			if (!headElement) {

-				elm = headerFragment.getAll('html')[0];

-				headElement = new Node('head', 1);

-

-				if (elm.firstChild)

-					elm.insert(headElement, elm.firstChild, true);

-				else

-					elm.append(headElement);

-			}

-

-			// Add/update/remove XML-PI

-			elm = headerFragment.firstChild;

-			if (data.xml_pi) {

-				value = 'version="1.0"';

-

-				if (data.docencoding)

-					value += ' encoding="' + data.docencoding + '"';

-

-				if (elm.type != 7) {

-					elm = new Node('xml', 7);

-					headerFragment.insert(elm, headerFragment.firstChild, true);

-				}

-

-				elm.value = value;

-			} else if (elm && elm.type == 7)

-				elm.remove();

-

-			// Add/update/remove doctype

-			elm = headerFragment.getAll('#doctype')[0];

-			if (data.doctype) {

-				if (!elm) {

-					elm = new Node('#doctype', 10);

-

-					if (data.xml_pi)

-						headerFragment.insert(elm, headerFragment.firstChild);

-					else

-						addHeadNode(elm);

-				}

-

-				elm.value = data.doctype.substring(9, data.doctype.length - 1);

-			} else if (elm)

-				elm.remove();

-

-			// Add/update/remove title

-			elm = headerFragment.getAll('title')[0];

-			if (data.metatitle) {

-				if (!elm) {

-					elm = new Node('title', 1);

-					elm.append(new Node('#text', 3)).value = data.metatitle;

-					addHeadNode(elm);

-				}

-			}

-

-			// Add meta encoding

-			if (data.docencoding) {

-				elm = null;

-				each(headerFragment.getAll('meta'), function(meta) {

-					if (meta.attr('http-equiv') == 'Content-Type')

-						elm = meta;

-				});

-

-				if (!elm) {

-					elm = new Node('meta', 1);

-					elm.attr('http-equiv', 'Content-Type');

-					elm.shortEnded = true;

-					addHeadNode(elm);

-				}

-

-				elm.attr('content', 'text/html; charset=' + data.docencoding);

-			}

-

-			// Add/update/remove meta

-			each('keywords,description,author,copyright,robots'.split(','), function(name) {

-				var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];

-

-				for (i = 0; i < nodes.length; i++) {

-					meta = nodes[i];

-

-					if (meta.attr('name') == name) {

-						if (value)

-							meta.attr('content', value);

-						else

-							meta.remove();

-

-						return;

-					}

-				}

-

-				if (value) {

-					elm = new Node('meta', 1);

-					elm.attr('name', name);

-					elm.attr('content', value);

-					elm.shortEnded = true;

-

-					addHeadNode(elm);

-				}

-			});

-

-			// Add/update/delete link

-			elm = headerFragment.getAll('link')[0];

-			if (elm && elm.attr('rel') == 'stylesheet') {

-				if (data.stylesheet)

-					elm.attr('href', data.stylesheet);

-				else

-					elm.remove();

-			} else if (data.stylesheet) {

-				elm = new Node('link', 1);

-				elm.attr({

-					rel : 'stylesheet',

-					text : 'text/css',

-					href : data.stylesheet

-				});

-				elm.shortEnded = true;

-

-				addHeadNode(elm);

-			}

-

-			// Update body attributes

-			elm = headerFragment.getAll('body')[0];

-			if (elm) {

-				setAttr(elm, 'dir', data.langdir);

-				setAttr(elm, 'style', data.style);

-				setAttr(elm, 'vlink', data.visited_color);

-				setAttr(elm, 'link', data.link_color);

-				setAttr(elm, 'alink', data.active_color);

-

-				// Update iframe body as well

-				dom.setAttribs(this.editor.getBody(), {

-					style : data.style,

-					dir : data.dir,

-					vLink : data.visited_color,

-					link : data.link_color,

-					aLink : data.active_color

-				});

-			}

-

-			// Set html attributes

-			elm = headerFragment.getAll('html')[0];

-			if (elm) {

-				setAttr(elm, 'lang', data.langcode);

-				setAttr(elm, 'xml:lang', data.langcode);

-			}

-

-			// Serialize header fragment and crop away body part

-			html = new tinymce.html.Serializer({

-				validate: false,

-				indent: true,

-				apply_source_formatting : true,

-				indent_before: 'head,html,body,meta,title,script,link,style',

-				indent_after: 'head,html,body,meta,title,script,link,style'

-			}).serialize(headerFragment);

-

-			this.head = html.substring(0, html.indexOf('</body>'));

-		},

-

-		_parseHeader : function() {

-			// Parse the contents with a DOM parser

-			return new tinymce.html.DomParser({

-				validate: false,

-				root_name: '#document'

-			}).parse(this.head);

-		},

-

-		_setContent : function(ed, o) {

-			var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm;

-

-			function low(s) {

-				return s.replace(/<\/?[A-Z]+/g, function(a) {

-					return a.toLowerCase();

-				})

-			};

-

-			// Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate

-			if (o.format == 'raw' && self.head)

-				return;

-

-			if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))

-				return;

-

-			// Parse out head, body and footer

-			content = content.replace(/<(\/?)BODY/gi, '<$1body');

-			startPos = content.indexOf('<body');

-

-			if (startPos != -1) {

-				startPos = content.indexOf('>', startPos);

-				self.head = low(content.substring(0, startPos + 1));

-

-				endPos = content.indexOf('</body', startPos);

-				if (endPos == -1)

-					endPos = content.length;

-

-				o.content = content.substring(startPos + 1, endPos);

-				self.foot = low(content.substring(endPos));

-			} else {

-				self.head = this._getDefaultHeader();

-				self.foot = '\n</body>\n</html>';

-			}

-

-			// Parse header and update iframe

-			headerFragment = self._parseHeader();

-			each(headerFragment.getAll('style'), function(node) {

-				if (node.firstChild)

-					styles += node.firstChild.value;

-			});

-

-			elm = headerFragment.getAll('body')[0];

-			if (elm) {

-				dom.setAttribs(self.editor.getBody(), {

-					style : elm.attr('style') || '',

-					dir : elm.attr('dir') || '',

-					vLink : elm.attr('vlink') || '',

-					link : elm.attr('link') || '',

-					aLink : elm.attr('alink') || ''

-				});

-			}

-

-			dom.remove('fullpage_styles');

-

-			if (styles) {

-				dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);

-

-				// Needed for IE 6/7

-				elm = dom.get('fullpage_styles');

-				if (elm.styleSheet)

-					elm.styleSheet.cssText = styles;

-			}

-		},

-

-		_getDefaultHeader : function() {

-			var header = '', editor = this.editor, value, styles = '';

-

-			if (editor.getParam('fullpage_default_xml_pi'))

-				header += '<?xml version="1.0" encoding="' + editor.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';

-

-			header += editor.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');

-			header += '\n<html>\n<head>\n';

-

-			if (value = editor.getParam('fullpage_default_title'))

-				header += '<title>' + value + '</title>\n';

-

-			if (value = editor.getParam('fullpage_default_encoding'))

-				header += '<meta http-equiv="Content-Type" content="text/html; charset=' + value + '" />\n';

-

-			if (value = editor.getParam('fullpage_default_font_family'))

-				styles += 'font-family: ' + value + ';';

-

-			if (value = editor.getParam('fullpage_default_font_size'))

-				styles += 'font-size: ' + value + ';';

-

-			if (value = editor.getParam('fullpage_default_text_color'))

-				styles += 'color: ' + value + ';';

-

-			header += '</head>\n<body' + (styles ? ' style="' + styles + '"' : '') + '>\n';

-

-			return header;

-		},

-

-		_getContent : function(ed, o) {

-			var self = this;

-

-			if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))

-				o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm
+++ /dev/null
@@ -1,260 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#fullpage_dlg.title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="js/fullpage.js"></script>

-	<link href="css/fullpage.css" rel="stylesheet" type="text/css" />

-</head>

-<body id="fullpage" style="display: none">

-<form onsubmit="FullPageDialog.update();return false;" name="fullpage" action="#">

-		<div class="tabs">

-			<ul>

-				<li id="meta_tab" class="current"><span><a href="javascript:mcTabs.displayTab('meta_tab','meta_panel');" onmousedown="return false;">{#fullpage_dlg.meta_tab}</a></span></li>

-				<li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#fullpage_dlg.appearance_tab}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="meta_panel" class="panel current">

-				<fieldset>

-					<legend>{#fullpage_dlg.meta_props}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>

-							<td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>

-							<td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>

-							<td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>

-							<td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>

-							<td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>

-							<td>

-								<select id="metarobots" name="metarobots">

-											<option value="">{#not_set}</option> 

-											<option value="index,follow">{#fullpage_dlg.meta_index_follow}</option>

-											<option value="index,nofollow">{#fullpage_dlg.meta_index_nofollow}</option>

-											<option value="noindex,follow">{#fullpage_dlg.meta_noindex_follow}</option>

-											<option value="noindex,nofollow">{#fullpage_dlg.meta_noindex_nofollow}</option>

-								</select>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#fullpage_dlg.langprops}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="column1"><label for="docencoding">{#fullpage_dlg.encoding}</label></td> 

-							<td>

-								<select id="docencoding" name="docencoding"> 

-										<option value="">{#not_set}</option>

-								</select>

-							</td> 

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="doctype">{#fullpage_dlg.doctypes}</label>&nbsp;</td>

-							<td>

-								<select id="doctype" name="doctype">

-										<option value="">{#not_set}</option>

-								</select>

-							</td>

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>

-							<td><input type="text" id="langcode" name="langcode" value="" /></td>

-						</tr>

-						<tr>

-							<td class="column1"><label for="langdir">{#fullpage_dlg.langdir}</label></td> 

-							<td>

-								<select id="langdir" name="langdir"> 

-										<option value="">{#not_set}</option> 

-										<option value="ltr">{#fullpage_dlg.ltr}</option> 

-										<option value="rtl">{#fullpage_dlg.rtl}</option> 

-								</select>

-							</td> 

-						</tr>

-						<tr>

-							<td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td>

-							<td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="appearance_panel" class="panel">

-				<fieldset>

-					<legend>{#fullpage_dlg.appearance_textprops}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="column1"><label for="fontface">{#fullpage_dlg.fontface}</label></td> 

-							<td>

-								<select id="fontface" name="fontface" onchange="FullPageDialog.changedStyleProp();">

-										<option value="">{#not_set}</option>

-								</select>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="fontsize">{#fullpage_dlg.fontsize}</label></td> 

-							<td>

-								<select id="fontsize" name="fontsize" onchange="FullPageDialog.changedStyleProp();">

-										<option value="">{#not_set}</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="textcolor">{#fullpage_dlg.textcolor}</label></td> 

-							<td>

-								<table border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="textcolor" name="textcolor" type="text" value="" size="9" onchange="updateColor('textcolor_pick','textcolor');FullPageDialog.changedStyleProp();" /></td>

-										<td id="textcolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#fullpage_dlg.appearance_bgprops}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="column1"><label for="bgimage">{#fullpage_dlg.bgimage}</label></td> 

-							<td>

-								<table border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bgimage" name="bgimage" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

-										<td id="bgimage_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-						<tr>

-							<td class="column1"><label for="bgcolor">{#fullpage_dlg.bgcolor}</label></td> 

-							<td>

-								<table border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');FullPageDialog.changedStyleProp();" /></td>

-										<td id="bgcolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#fullpage_dlg.appearance_marginprops}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="column1"><label for="leftmargin">{#fullpage_dlg.left_margin}</label></td> 

-							<td><input id="leftmargin" name="leftmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

-							<td class="column1"><label for="rightmargin">{#fullpage_dlg.right_margin}</label></td> 

-							<td><input id="rightmargin" name="rightmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

-						</tr>

-						<tr>

-							<td class="column1"><label for="topmargin">{#fullpage_dlg.top_margin}</label></td> 

-							<td><input id="topmargin" name="topmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

-							<td class="column1"><label for="bottommargin">{#fullpage_dlg.bottom_margin}</label></td> 

-							<td><input id="bottommargin" name="bottommargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#fullpage_dlg.appearance_linkprops}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="column1"><label for="link_color">{#fullpage_dlg.link_color}</label></td> 

-							<td>

-								<table border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="link_color" name="link_color" type="text" value="" size="9" onchange="updateColor('link_color_pick','link_color');FullPageDialog.changedStyleProp();" /></td>

-										<td id="link_color_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-

-							<td class="column1"><label for="visited_color">{#fullpage_dlg.visited_color}</label></td> 

-							<td>

-								<table border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="visited_color" name="visited_color" type="text" value="" size="9" onchange="updateColor('visited_color_pick','visited_color');FullPageDialog.changedStyleProp();" /></td>

-										<td id="visited_color_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="active_color">{#fullpage_dlg.active_color}</label></td> 

-							<td>

-								<table border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="active_color" name="active_color" type="text" value="" size="9" onchange="updateColor('active_color_pick','active_color');FullPageDialog.changedStyleProp();" /></td>

-										<td id="active_color_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-

-							<td>&nbsp;</td>

-							<td>&nbsp;</td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#fullpage_dlg.appearance_style}</legend>

-

-					<table border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td class="column1"><label for="stylesheet">{#fullpage_dlg.stylesheet}</label></td> 

-							<td><table border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="stylesheet" name="stylesheet" type="text" value="" /></td>

-										<td id="stylesheet_browsercontainer">&nbsp;</td>

-									</tr>

-								</table></td>

-						</tr>

-						<tr>

-							<td class="column1"><label for="style">{#fullpage_dlg.style}</label></td> 

-							<td><input id="style" name="style" type="text" value="" onchange="FullPageDialog.changedStyle();" /></td>

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<input type="submit" id="insert" name="update" value="{#update}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js
+++ /dev/null
@@ -1,233 +1,1 @@
-/**

- * fullpage.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinyMCEPopup.requireLangPack();

-

-	var defaultDocTypes = 

-		'XHTML 1.0 Transitional=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">,' +

-		'XHTML 1.0 Frameset=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">,' +

-		'XHTML 1.0 Strict=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">,' +

-		'XHTML 1.1=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">,' +

-		'HTML 4.01 Transitional=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">,' +

-		'HTML 4.01 Strict=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">,' +

-		'HTML 4.01 Frameset=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">';

-

-	var defaultEncodings = 

-		'Western european (iso-8859-1)=iso-8859-1,' +

-		'Central European (iso-8859-2)=iso-8859-2,' +

-		'Unicode (UTF-8)=utf-8,' +

-		'Chinese traditional (Big5)=big5,' +

-		'Cyrillic (iso-8859-5)=iso-8859-5,' +

-		'Japanese (iso-2022-jp)=iso-2022-jp,' +

-		'Greek (iso-8859-7)=iso-8859-7,' +

-		'Korean (iso-2022-kr)=iso-2022-kr,' +

-		'ASCII (us-ascii)=us-ascii';

-

-	var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';

-	var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px';

-

-	function setVal(id, value) {

-		var elm = document.getElementById(id);

-

-		if (elm) {

-			value = value || '';

-

-			if (elm.nodeName == "SELECT")

-				selectByValue(document.forms[0], id, value);

-			else if (elm.type == "checkbox")

-				elm.checked = !!value;

-			else

-				elm.value = value;

-		}

-	};

-

-	function getVal(id) {

-		var elm = document.getElementById(id);

-

-		if (elm.nodeName == "SELECT")

-			return elm.options[elm.selectedIndex].value;

-

-		if (elm.type == "checkbox")

-			return elm.checked;

-

-		return elm.value;

-	};

-

-	window.FullPageDialog = {

-		changedStyle : function() {

-			var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style'));

-

-			setVal('fontface', styles['font-face']);

-			setVal('fontsize', styles['font-size']);

-			setVal('textcolor', styles['color']);

-

-			if (val = styles['background-image'])

-				setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"));

-			else

-				setVal('bgimage', '');

-

-			setVal('bgcolor', styles['background-color']);

-

-			// Reset margin form elements

-			setVal('topmargin', '');

-			setVal('rightmargin', '');

-			setVal('bottommargin', '');

-			setVal('leftmargin', '');

-

-			// Expand margin

-			if (val = styles['margin']) {

-				val = val.split(' ');

-				styles['margin-top'] = val[0] || '';

-				styles['margin-right'] = val[1] || val[0] || '';

-				styles['margin-bottom'] = val[2] || val[0] || '';

-				styles['margin-left'] = val[3] || val[0] || '';

-			}

-

-			if (val = styles['margin-top'])

-				setVal('topmargin', val.replace(/px/, ''));

-

-			if (val = styles['margin-right'])

-				setVal('rightmargin', val.replace(/px/, ''));

-

-			if (val = styles['margin-bottom'])

-				setVal('bottommargin', val.replace(/px/, ''));

-

-			if (val = styles['margin-left'])

-				setVal('leftmargin', val.replace(/px/, ''));

-

-			updateColor('bgcolor_pick', 'bgcolor');

-			updateColor('textcolor_pick', 'textcolor');

-		},

-

-		changedStyleProp : function() {

-			var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style'));

-	

-			styles['font-face'] = getVal('fontface');

-			styles['font-size'] = getVal('fontsize');

-			styles['color'] = getVal('textcolor');

-			styles['background-color'] = getVal('bgcolor');

-

-			if (val = getVal('bgimage'))

-				styles['background-image'] = "url('" + val + "')";

-			else

-				styles['background-image'] = '';

-

-			delete styles['margin'];

-

-			if (val = getVal('topmargin'))

-				styles['margin-top'] = val + "px";

-			else

-				styles['margin-top'] = '';

-

-			if (val = getVal('rightmargin'))

-				styles['margin-right'] = val + "px";

-			else

-				styles['margin-right'] = '';

-

-			if (val = getVal('bottommargin'))

-				styles['margin-bottom'] = val + "px";

-			else

-				styles['margin-bottom'] = '';

-

-			if (val = getVal('leftmargin'))

-				styles['margin-left'] = val + "px";

-			else

-				styles['margin-left'] = '';

-

-			// Serialize, parse and reserialize this will compress redundant styles

-			setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles))));

-			this.changedStyle();

-		},

-		

-		update : function() {

-			var data = {};

-

-			tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) {

-				data[node.id] = getVal(node.id);

-			});

-

-			tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data);

-			tinyMCEPopup.close();

-		}

-	};

-	

-	function init() {

-		var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor;

-

-		// Setup doctype select box

-		list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(',');

-		for (i = 0; i < list.length; i++) {

-			item = list[i].split('=');

-

-			if (item.length > 1)

-				addSelectValue(form, 'doctype', item[0], item[1]);

-		}

-

-		// Setup fonts select box

-		list = editor.getParam("fullpage_fonts", defaultFontNames).split(';');

-		for (i = 0; i < list.length; i++) {

-			item = list[i].split('=');

-

-			if (item.length > 1)

-				addSelectValue(form, 'fontface', item[0], item[1]);

-		}

-

-		// Setup fontsize select box

-		list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(',');

-		for (i = 0; i < list.length; i++)

-			addSelectValue(form, 'fontsize', list[i], list[i]);

-

-		// Setup encodings select box

-		list = editor.getParam("fullpage_encodings", defaultEncodings).split(',');

-		for (i = 0; i < list.length; i++) {

-			item = list[i].split('=');

-

-			if (item.length > 1)

-				addSelectValue(form, 'docencoding', item[0], item[1]);

-		}

-

-		// Setup color pickers

-		document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

-		document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color');

-		document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color');

-		document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color');

-		document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor');

-		document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage');

-		document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage');

-

-		// Resize some elements

-		if (isVisible('stylesheetbrowser'))

-			document.getElementById('stylesheet').style.width = '220px';

-

-		if (isVisible('link_href_browser'))

-			document.getElementById('element_link_href').style.width = '230px';

-

-		if (isVisible('bgimage_browser'))

-			document.getElementById('bgimage').style.width = '210px';

-

-		// Update form

-		tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) {

-			setVal(key, value);

-		});

-

-		FullPageDialog.changedStyle();

-

-		// Update colors

-		updateColor('textcolor_pick', 'textcolor');

-		updateColor('bgcolor_pick', 'bgcolor');

-		updateColor('visited_color_pick', 'visited_color');

-		updateColor('active_color_pick', 'active_color');

-		updateColor('link_color_pick', 'link_color');

-	};

-

-	tinyMCEPopup.onInit.add(init);

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().firstChild);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
+++ /dev/null
@@ -1,159 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var DOM = tinymce.DOM;

-

-	tinymce.create('tinymce.plugins.FullScreenPlugin', {

-		init : function(ed, url) {

-			var t = this, s = {}, vp, posCss;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceFullScreen', function() {

-				var win, de = DOM.doc.documentElement;

-

-				if (ed.getParam('fullscreen_is_enabled')) {

-					if (ed.getParam('fullscreen_new_window'))

-						closeFullscreen(); // Call to close in new window

-					else {

-						DOM.win.setTimeout(function() {

-							tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);

-							tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent());

-							tinyMCE.remove(ed);

-							DOM.remove('mce_fullscreen_container');

-							de.style.overflow = ed.getParam('fullscreen_html_overflow');

-							DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));

-							DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));

-							tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings

-						}, 10);

-					}

-

-					return;

-				}

-

-				if (ed.getParam('fullscreen_new_window')) {

-					win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);

-					try {

-						win.resizeTo(screen.availWidth, screen.availHeight);

-					} catch (e) {

-						// Ignore

-					}

-				} else {

-					tinyMCE.oldSettings = tinyMCE.settings; // Store old settings

-					s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';

-					s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);

-					vp = DOM.getViewPort();

-					s.fullscreen_scrollx = vp.x;

-					s.fullscreen_scrolly = vp.y;

-

-					// Fixes an Opera bug where the scrollbars doesn't reappear

-					if (tinymce.isOpera && s.fullscreen_overflow == 'visible')

-						s.fullscreen_overflow = 'auto';

-

-					// Fixes an IE bug where horizontal scrollbars would appear

-					if (tinymce.isIE && s.fullscreen_overflow == 'scroll')

-						s.fullscreen_overflow = 'auto';

-

-					// Fixes an IE bug where the scrollbars doesn't reappear

-					if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))

-						s.fullscreen_html_overflow = 'auto'; 

-

-					if (s.fullscreen_overflow == '0px')

-						s.fullscreen_overflow = '';

-

-					DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');

-					de.style.overflow = 'hidden'; //Fix for IE6/7

-					vp = DOM.getViewPort();

-					DOM.win.scrollTo(0, 0);

-

-					if (tinymce.isIE)

-						vp.h -= 1;

-

-					// Use fixed position if it exists

-					if (tinymce.isIE6)

-						posCss = 'absolute;top:' + vp.y;

-					else

-						posCss = 'fixed;top:0';

-

-					n = DOM.add(DOM.doc.body, 'div', {

-						id : 'mce_fullscreen_container', 

-						style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});

-					DOM.add(n, 'div', {id : 'mce_fullscreen'});

-

-					tinymce.each(ed.settings, function(v, n) {

-						s[n] = v;

-					});

-

-					s.id = 'mce_fullscreen';

-					s.width = n.clientWidth;

-					s.height = n.clientHeight - 15;

-					s.fullscreen_is_enabled = true;

-					s.fullscreen_editor_id = ed.id;

-					s.theme_advanced_resizing = false;

-					s.save_onsavecallback = function() {

-						ed.setContent(tinyMCE.get(s.id).getContent());

-						ed.execCommand('mceSave');

-					};

-

-					tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {

-						s[k] = v;

-					});

-

-					if (s.theme_advanced_toolbar_location === 'external')

-						s.theme_advanced_toolbar_location = 'top';

-

-					t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);

-					t.fullscreenEditor.onInit.add(function() {

-						t.fullscreenEditor.setContent(ed.getContent());

-						t.fullscreenEditor.focus();

-					});

-

-					t.fullscreenEditor.render();

-

-					t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');

-					t.fullscreenElement.update();

-					//document.body.overflow = 'hidden';

-

-					t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {

-						var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;

-

-						// Get outer/inner size to get a delta size that can be used to calc the new iframe size

-						outerSize = fed.dom.getSize(fed.getContainer().firstChild);

-						innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);

-

-						fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);

-					});

-				}

-			});

-

-			// Register buttons

-			ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});

-

-			ed.onNodeChange.add(function(ed, cm) {

-				cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Fullscreen',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm
+++ /dev/null
@@ -1,111 +1,1 @@
-<!DOCTYPE html>

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title></title>

-	<meta http-equiv="X-UA-Compatible" content="IE=edge" />

-	<script type="text/javascript" src="../../tiny_mce.js"></script>

-	<script type="text/javascript">

-		function patchCallback(settings, key) {

-			if (settings[key])

-				settings[key] = "window.opener." + settings[key];

-		}

-

-		var settings = {}, paSe = window.opener.tinyMCE.activeEditor.settings, oeID = window.opener.tinyMCE.activeEditor.id;

-

-		// Clone array

-		for (var n in paSe)

-			settings[n] = paSe[n];

-

-		// Override options for fullscreen

-		for (var n in paSe.fullscreen_settings)

-			settings[n] = paSe.fullscreen_settings[n];

-

-		// Patch callbacks, make them point to window.opener

-		patchCallback(settings, 'urlconverter_callback');

-		patchCallback(settings, 'insertlink_callback');

-		patchCallback(settings, 'insertimage_callback');

-		patchCallback(settings, 'setupcontent_callback');

-		patchCallback(settings, 'save_callback');

-		patchCallback(settings, 'onchange_callback');

-		patchCallback(settings, 'init_instance_callback');

-		patchCallback(settings, 'file_browser_callback');

-		patchCallback(settings, 'cleanup_callback');

-		patchCallback(settings, 'execcommand_callback');

-		patchCallback(settings, 'oninit');

-

-		// Set options

-		delete settings.id;

-		settings['mode'] = 'exact';

-		settings['elements'] = 'fullscreenarea';

-		settings['add_unload_trigger'] = false;

-		settings['ask'] = false;

-		settings['document_base_url'] = window.opener.tinyMCE.activeEditor.documentBaseURI.getURI();

-		settings['fullscreen_is_enabled'] = true;

-		settings['fullscreen_editor_id'] = oeID;

-		settings['theme_advanced_resizing'] = false;

-		settings['strict_loading_mode'] = true;

-

-		settings.save_onsavecallback = function() {

-			window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'});

-			window.opener.tinyMCE.get(oeID).execCommand('mceSave');

-			window.close();

-		};

-

-		function unloadHandler(e) {

-			moveContent();

-		}

-

-		function moveContent() {

-			window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent());

-		}

-

-		function closeFullscreen() {

-			moveContent();

-			window.close();

-		}

-

-		function doParentSubmit() {

-			moveContent();

-

-			if (window.opener.tinyMCE.selectedInstance.formElement.form)

-				window.opener.tinyMCE.selectedInstance.formElement.form.submit();

-

-			window.close();

-

-			return false;

-		}

-

-		function render() {

-			var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM;

-

-			e.value = window.opener.tinyMCE.get(oeID).getContent();

-

-			vp = dom.getViewPort();

-			settings.width = vp.w;

-			settings.height = vp.h - 15;

-

-			tinymce.dom.Event.add(window, 'resize', function() {

-				var vp = dom.getViewPort();

-

-				tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);

-			});

-

-			tinyMCE.init(settings);

-		}

-

-		// Add onunload

-		tinymce.dom.Event.add(window, "beforeunload", unloadHandler);

-	</script>

-</head>

-<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">

-<form onsubmit="doParentSubmit();">

-<textarea id="fullscreenarea" style="width:100%; height:100%"></textarea>

-</form>

-

-<script type="text/javascript">

-	render();

-</script>

-

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js
+++ /dev/null
@@ -1,54 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.IESpell', {

-		init : function(ed, url) {

-			var t = this, sp;

-

-			if (!tinymce.isIE)

-				return;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceIESpell', function() {

-				try {

-					sp = new ActiveXObject("ieSpell.ieSpellExtension");

-					sp.CheckDocumentNode(ed.getDoc().documentElement);

-				} catch (e) {

-					if (e.number == -2146827859) {

-						ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) {

-							if (s)

-								window.open('http://www.iespell.com/download.php', 'ieSpellDownload', '');

-						});

-					} else

-						ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number);

-				}

-			});

-

-			// Register buttons

-			ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'IESpell (IE Only)',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","<br />"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(i,k){var g=this,f,j=d.doc,h,k;k=g._findId(k||i);if(!g.windows[k]){g.parent(i);return}g.count--;if(g.count==0){d.remove("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","false");g.editor.focus()}if(f=g.windows[k]){g.onClose.dispatch(g);a.remove(j,"mousedown",f.mousedownFunc);a.remove(j,"click",f.clickFunc);a.clear(k);a.clear(k+"_ifr");d.setAttrib(k+"_ifr","src",'javascript:""');f.element.remove();delete g.windows[k];h=g._frontWindow();if(h){g.focus(h.id)}}},_frontWindow:function(){var g,f=0;e(this.windows,function(h){if(h.zIndex>f){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
+++ /dev/null
@@ -1,700 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;

-

-	tinymce.create('tinymce.plugins.InlinePopups', {

-		init : function(ed, url) {

-			// Replace window manager

-			ed.onBeforeRenderUI.add(function() {

-				ed.windowManager = new tinymce.InlineWindowManager(ed);

-				DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css");

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'InlinePopups',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', {

-		InlineWindowManager : function(ed) {

-			var t = this;

-

-			t.parent(ed);

-			t.zIndex = 300000;

-			t.count = 0;

-			t.windows = {};

-		},

-

-		open : function(f, p) {

-			var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow;

-

-			f = f || {};

-			p = p || {};

-

-			// Run native windows

-			if (!f.inline)

-				return t.parent(f, p);

-

-			parentWindow = t._frontWindow();

-			if (parentWindow && DOM.get(parentWindow.id + '_ifr')) {

-				parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement;

-			}

-			

-			// Only store selection if the type is a normal window

-			if (!f.type)

-				t.bookmark = ed.selection.getBookmark(1);

-

-			id = DOM.uniqueId();

-			vp = DOM.getViewPort();

-			f.width = parseInt(f.width || 320);

-			f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);

-			f.min_width = parseInt(f.min_width || 150);

-			f.min_height = parseInt(f.min_height || 100);

-			f.max_width = parseInt(f.max_width || 2000);

-			f.max_height = parseInt(f.max_height || 2000);

-			f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0)));

-			f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0)));

-			f.movable = f.resizable = true;

-			p.mce_width = f.width;

-			p.mce_height = f.height;

-			p.mce_inline = true;

-			p.mce_window_id = id;

-			p.mce_auto_focus = f.auto_focus;

-

-			// Transpose

-//			po = DOM.getPos(ed.getContainer());

-//			f.left -= po.x;

-//			f.top -= po.y;

-

-			t.features = f;

-			t.params = p;

-			t.onOpen.dispatch(t, f, p);

-

-			if (f.type) {

-				opt += ' mceModal';

-

-				if (f.type)

-					opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1);

-

-				f.resizable = false;

-			}

-

-			if (f.statusbar)

-				opt += ' mceStatusbar';

-

-			if (f.resizable)

-				opt += ' mceResizable';

-

-			if (f.minimizable)

-				opt += ' mceMinimizable';

-

-			if (f.maximizable)

-				opt += ' mceMaximizable';

-

-			if (f.movable)

-				opt += ' mceMovable';

-

-			// Create DOM objects

-			t._addAll(DOM.doc.body, 

-				['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, 

-					['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},

-						['div', {id : id + '_top', 'class' : 'mceTop'}, 

-							['div', {'class' : 'mceLeft'}],

-							['div', {'class' : 'mceCenter'}],

-							['div', {'class' : 'mceRight'}],

-							['span', {id : id + '_title'}, f.title || '']

-						],

-

-						['div', {id : id + '_middle', 'class' : 'mceMiddle'}, 

-							['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}],

-							['span', {id : id + '_content'}],

-							['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}]

-						],

-

-						['div', {id : id + '_bottom', 'class' : 'mceBottom'},

-							['div', {'class' : 'mceLeft'}],

-							['div', {'class' : 'mceCenter'}],

-							['div', {'class' : 'mceRight'}],

-							['span', {id : id + '_status'}, 'Content']

-						],

-

-						['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}],

-						['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

-						['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

-						['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

-						['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

-						['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}],

-						['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}],

-						['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}],

-						['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}],

-						['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}],

-						['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}],

-						['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}],

-						['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}]

-					]

-				]

-			);

-

-			DOM.setStyles(id, {top : -10000, left : -10000});

-

-			// Fix gecko rendering bug, where the editors iframe messed with window contents

-			if (tinymce.isGecko)

-				DOM.setStyle(id, 'overflow', 'auto');

-

-			// Measure borders

-			if (!f.type) {

-				dw += DOM.get(id + '_left').clientWidth;

-				dw += DOM.get(id + '_right').clientWidth;

-				dh += DOM.get(id + '_top').clientHeight;

-				dh += DOM.get(id + '_bottom').clientHeight;

-			}

-

-			// Resize window

-			DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh});

-

-			u = f.url || f.file;

-			if (u) {

-				if (tinymce.relaxedDomain)

-					u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;

-

-				u = tinymce._addVer(u);

-			}

-

-			if (!f.type) {

-				DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'});

-				DOM.setStyles(id + '_ifr', {width : f.width, height : f.height});

-				DOM.setAttrib(id + '_ifr', 'src', u);

-			} else {

-				DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok');

-

-				if (f.type == 'confirm')

-					DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel');

-

-				DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'});

-				DOM.setHTML(id + '_content', f.content.replace('\n', '<br />'));

-				

-				Event.add(id, 'keyup', function(evt) {

-					var VK_ESCAPE = 27;

-					if (evt.keyCode === VK_ESCAPE) {

-						f.button_func(false);

-						return Event.cancel(evt);

-					}

-				});

-

-				Event.add(id, 'keydown', function(evt) {

-					var cancelButton, VK_TAB = 9;

-					if (evt.keyCode === VK_TAB) {

-						cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0];

-						if (cancelButton && cancelButton !== evt.target) {

-							cancelButton.focus();

-						} else {

-							DOM.get(id + '_ok').focus();

-						}

-						return Event.cancel(evt);

-					}

-				});

-			}

-

-			// Register events

-			mdf = Event.add(id, 'mousedown', function(e) {

-				var n = e.target, w, vp;

-

-				w = t.windows[id];

-				t.focus(id);

-

-				if (n.nodeName == 'A' || n.nodeName == 'a') {

-					if (n.className == 'mceClose') {

-						t.close(null, id);

-						return Event.cancel(e);

-					} else if (n.className == 'mceMax') {

-						w.oldPos = w.element.getXY();

-						w.oldSize = w.element.getSize();

-

-						vp = DOM.getViewPort();

-

-						// Reduce viewport size to avoid scrollbars

-						vp.w -= 2;

-						vp.h -= 2;

-

-						w.element.moveTo(vp.x, vp.y);

-						w.element.resizeTo(vp.w, vp.h);

-						DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight});

-						DOM.addClass(id + '_wrapper', 'mceMaximized');

-					} else if (n.className == 'mceMed') {

-						// Reset to old size

-						w.element.moveTo(w.oldPos.x, w.oldPos.y);

-						w.element.resizeTo(w.oldSize.w, w.oldSize.h);

-						w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight);

-

-						DOM.removeClass(id + '_wrapper', 'mceMaximized');

-					} else if (n.className == 'mceMove')

-						return t._startDrag(id, e, n.className);

-					else if (DOM.hasClass(n, 'mceResize'))

-						return t._startDrag(id, e, n.className.substring(13));

-				}

-			});

-

-			clf = Event.add(id, 'click', function(e) {

-				var n = e.target;

-

-				t.focus(id);

-

-				if (n.nodeName == 'A' || n.nodeName == 'a') {

-					switch (n.className) {

-						case 'mceClose':

-							t.close(null, id);

-							return Event.cancel(e);

-

-						case 'mceButton mceOk':

-						case 'mceButton mceCancel':

-							f.button_func(n.className == 'mceButton mceOk');

-							return Event.cancel(e);

-					}

-				}

-			});

-			

-			// Make sure the tab order loops within the dialog.

-			Event.add([id + '_left', id + '_right'], 'focus', function(evt) {

-				var iframe = DOM.get(id + '_ifr');

-				if (iframe) {

-					var body = iframe.contentWindow.document.body;

-					var focusable = DOM.select(':input:enabled,*[tabindex=0]', body);

-					if (evt.target.id === (id + '_left')) {

-						focusable[focusable.length - 1].focus();

-					} else {

-						focusable[0].focus();

-					}

-				} else {

-					DOM.get(id + '_ok').focus();

-				}

-			});

-			

-			// Add window

-			w = t.windows[id] = {

-				id : id,

-				mousedown_func : mdf,

-				click_func : clf,

-				element : new Element(id, {blocker : 1, container : ed.getContainer()}),

-				iframeElement : new Element(id + '_ifr'),

-				features : f,

-				deltaWidth : dw,

-				deltaHeight : dh

-			};

-

-			w.iframeElement.on('focus', function() {

-				t.focus(id);

-			});

-

-			// Setup blocker

-			if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') {

-				DOM.add(DOM.doc.body, 'div', {

-					id : 'mceModalBlocker',

-					'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker',

-					style : {zIndex : t.zIndex - 1}

-				});

-

-				DOM.show('mceModalBlocker'); // Reduces flicker in IE

-				DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true');

-			} else

-				DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);

-

-			if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))

-				DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});

-

-			DOM.setAttrib(id, 'aria-hidden', 'false');

-			t.focus(id);

-			t._fixIELayout(id, 1);

-

-			// Focus ok button

-			if (DOM.get(id + '_ok'))

-				DOM.get(id + '_ok').focus();

-			t.count++;

-

-			return w;

-		},

-

-		focus : function(id) {

-			var t = this, w;

-

-			if (w = t.windows[id]) {

-				w.zIndex = this.zIndex++;

-				w.element.setStyle('zIndex', w.zIndex);

-				w.element.update();

-

-				id = id + '_wrapper';

-				DOM.removeClass(t.lastId, 'mceFocus');

-				DOM.addClass(id, 'mceFocus');

-				t.lastId = id;

-				

-				if (w.focussedElement) {

-					w.focussedElement.focus();

-				} else if (DOM.get(id + '_ok')) {

-					DOM.get(w.id + '_ok').focus();

-				} else if (DOM.get(w.id + '_ifr')) {

-					DOM.get(w.id + '_ifr').focus();

-				}

-			}

-		},

-

-		_addAll : function(te, ne) {

-			var i, n, t = this, dom = tinymce.DOM;

-

-			if (is(ne, 'string'))

-				te.appendChild(dom.doc.createTextNode(ne));

-			else if (ne.length) {

-				te = te.appendChild(dom.create(ne[0], ne[1]));

-

-				for (i=2; i<ne.length; i++)

-					t._addAll(te, ne[i]);

-			}

-		},

-

-		_startDrag : function(id, se, ac) {

-			var t = this, mu, mm, d = DOM.doc, eb, w = t.windows[id], we = w.element, sp = we.getXY(), p, sz, ph, cp, vp, sx, sy, sex, sey, dx, dy, dw, dh;

-

-			// Get positons and sizes

-//			cp = DOM.getPos(t.editor.getContainer());

-			cp = {x : 0, y : 0};

-			vp = DOM.getViewPort();

-

-			// Reduce viewport size to avoid scrollbars while dragging

-			vp.w -= 2;

-			vp.h -= 2;

-

-			sex = se.screenX;

-			sey = se.screenY;

-			dx = dy = dw = dh = 0;

-

-			// Handle mouse up

-			mu = Event.add(d, 'mouseup', function(e) {

-				Event.remove(d, 'mouseup', mu);

-				Event.remove(d, 'mousemove', mm);

-

-				if (eb)

-					eb.remove();

-

-				we.moveBy(dx, dy);

-				we.resizeBy(dw, dh);

-				sz = we.getSize();

-				DOM.setStyles(id + '_ifr', {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight});

-				t._fixIELayout(id, 1);

-

-				return Event.cancel(e);

-			});

-

-			if (ac != 'Move')

-				startMove();

-

-			function startMove() {

-				if (eb)

-					return;

-

-				t._fixIELayout(id, 0);

-

-				// Setup event blocker

-				DOM.add(d.body, 'div', {

-					id : 'mceEventBlocker',

-					'class' : 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'),

-					style : {zIndex : t.zIndex + 1}

-				});

-

-				if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))

-					DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});

-

-				eb = new Element('mceEventBlocker');

-				eb.update();

-

-				// Setup placeholder

-				p = we.getXY();

-				sz = we.getSize();

-				sx = cp.x + p.x - vp.x;

-				sy = cp.y + p.y - vp.y;

-				DOM.add(eb.get(), 'div', {id : 'mcePlaceHolder', 'class' : 'mcePlaceHolder', style : {left : sx, top : sy, width : sz.w, height : sz.h}});

-				ph = new Element('mcePlaceHolder');

-			};

-

-			// Handle mouse move/drag

-			mm = Event.add(d, 'mousemove', function(e) {

-				var x, y, v;

-

-				startMove();

-

-				x = e.screenX - sex;

-				y = e.screenY - sey;

-

-				switch (ac) {

-					case 'ResizeW':

-						dx = x;

-						dw = 0 - x;

-						break;

-

-					case 'ResizeE':

-						dw = x;

-						break;

-

-					case 'ResizeN':

-					case 'ResizeNW':

-					case 'ResizeNE':

-						if (ac == "ResizeNW") {

-							dx = x;

-							dw = 0 - x;

-						} else if (ac == "ResizeNE")

-							dw = x;

-

-						dy = y;

-						dh = 0 - y;

-						break;

-

-					case 'ResizeS':

-					case 'ResizeSW':

-					case 'ResizeSE':

-						if (ac == "ResizeSW") {

-							dx = x;

-							dw = 0 - x;

-						} else if (ac == "ResizeSE")

-							dw = x;

-

-						dh = y;

-						break;

-

-					case 'mceMove':

-						dx = x;

-						dy = y;

-						break;

-				}

-

-				// Boundary check

-				if (dw < (v = w.features.min_width - sz.w)) {

-					if (dx !== 0)

-						dx += dw - v;

-

-					dw = v;

-				}

-	

-				if (dh < (v = w.features.min_height - sz.h)) {

-					if (dy !== 0)

-						dy += dh - v;

-

-					dh = v;

-				}

-

-				dw = Math.min(dw, w.features.max_width - sz.w);

-				dh = Math.min(dh, w.features.max_height - sz.h);

-				dx = Math.max(dx, vp.x - (sx + vp.x));

-				dy = Math.max(dy, vp.y - (sy + vp.y));

-				dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x));

-				dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y));

-

-				// Move if needed

-				if (dx + dy !== 0) {

-					if (sx + dx < 0)

-						dx = 0;

-	

-					if (sy + dy < 0)

-						dy = 0;

-

-					ph.moveTo(sx + dx, sy + dy);

-				}

-

-				// Resize if needed

-				if (dw + dh !== 0)

-					ph.resizeTo(sz.w + dw, sz.h + dh);

-

-				return Event.cancel(e);

-			});

-

-			return Event.cancel(se);

-		},

-

-		resizeBy : function(dw, dh, id) {

-			var w = this.windows[id];

-

-			if (w) {

-				w.element.resizeBy(dw, dh);

-				w.iframeElement.resizeBy(dw, dh);

-			}

-		},

-

-		close : function(win, id) {

-			var t = this, w, d = DOM.doc, fw, id;

-

-			id = t._findId(id || win);

-

-			// Probably not inline

-			if (!t.windows[id]) {

-				t.parent(win);

-				return;

-			}

-

-			t.count--;

-

-			if (t.count == 0) {

-				DOM.remove('mceModalBlocker');

-				DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'false');

-				t.editor.focus();

-			}

-

-			if (w = t.windows[id]) {

-				t.onClose.dispatch(t);

-				Event.remove(d, 'mousedown', w.mousedownFunc);

-				Event.remove(d, 'click', w.clickFunc);

-				Event.clear(id);

-				Event.clear(id + '_ifr');

-

-				DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak

-				w.element.remove();

-				delete t.windows[id];

-

-				fw = t._frontWindow();

-

-				if (fw)

-					t.focus(fw.id);

-			}

-		},

-		

-		// Find front most window

-		_frontWindow : function() {

-			var fw, ix = 0;

-			// Find front most window and focus that

-			each (this.windows, function(w) {

-				if (w.zIndex > ix) {

-					fw = w;

-					ix = w.zIndex;

-				}

-			});

-			return fw;

-		},

-

-		setTitle : function(w, ti) {

-			var e;

-

-			w = this._findId(w);

-

-			if (e = DOM.get(w + '_title'))

-				e.innerHTML = DOM.encode(ti);

-		},

-

-		alert : function(txt, cb, s) {

-			var t = this, w;

-

-			w = t.open({

-				title : t,

-				type : 'alert',

-				button_func : function(s) {

-					if (cb)

-						cb.call(s || t, s);

-

-					t.close(null, w.id);

-				},

-				content : DOM.encode(t.editor.getLang(txt, txt)),

-				inline : 1,

-				width : 400,

-				height : 130

-			});

-		},

-

-		confirm : function(txt, cb, s) {

-			var t = this, w;

-

-			w = t.open({

-				title : t,

-				type : 'confirm',

-				button_func : function(s) {

-					if (cb)

-						cb.call(s || t, s);

-

-					t.close(null, w.id);

-				},

-				content : DOM.encode(t.editor.getLang(txt, txt)),

-				inline : 1,

-				width : 400,

-				height : 130

-			});

-		},

-

-		// Internal functions

-

-		_findId : function(w) {

-			var t = this;

-

-			if (typeof(w) == 'string')

-				return w;

-

-			each(t.windows, function(wo) {

-				var ifr = DOM.get(wo.id + '_ifr');

-

-				if (ifr && w == ifr.contentWindow) {

-					w = wo.id;

-					return false;

-				}

-			});

-

-			return w;

-		},

-

-		_fixIELayout : function(id, s) {

-			var w, img;

-

-			if (!tinymce.isIE6)

-				return;

-

-			// Fixes the bug where hover flickers and does odd things in IE6

-			each(['n','s','w','e','nw','ne','sw','se'], function(v) {

-				var e = DOM.get(id + '_resize_' + v);

-

-				DOM.setStyles(e, {

-					width : s ? e.clientWidth : '',

-					height : s ? e.clientHeight : '',

-					cursor : DOM.getStyle(e, 'cursor', 1)

-				});

-

-				DOM.setStyle(id + "_bottom", 'bottom', '-1px');

-

-				e = 0;

-			});

-

-			// Fixes graphics glitch

-			if (w = this.windows[id]) {

-				// Fixes rendering bug after resize

-				w.element.hide();

-				w.element.show();

-

-				// Forced a repaint of the window

-				//DOM.get(id).style.filter = '';

-

-				// IE has a bug where images used in CSS won't get loaded

-				// sometimes when the cache in the browser is disabled

-				// This fix tries to solve it by loading the images using the image object

-				each(DOM.select('div,a', id), function(e, i) {

-					if (e.currentStyle.backgroundImage != 'none') {

-						img = new Image();

-						img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1');

-					}

-				});

-

-				DOM.get(id).style.filter = '';

-			}

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups);

-})();

-

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
+++ /dev/null
@@ -1,91 +1,1 @@
-/* Clearlooks 2 */
 
-/* Reset */
-.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block}
-
-/* General */
-.clearlooks2 {position:absolute; direction:ltr}
-.clearlooks2 .mceWrapper {position:static}
-.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%}
-.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)}
-.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none}
-
-/* Top */
-.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px}
-.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)}
-.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)}
-.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0}
-.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold}
-.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0}
-.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px}
-.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0}
-.clearlooks2 .mceFocus .mceTop span {color:#FFF}
-
-/* Middle */
-.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0}
-.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)}
-.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0}
-.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF}
-.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)}
-
-/* Bottom */
-.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px}
-.clearlooks2 .mceBottom {left:0; bottom:0; width:100%}
-.clearlooks2 .mceBottom div {top:0}
-.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px}
-.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px}
-.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0}
-.clearlooks2 .mceBottom span {display:none}
-.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px}
-.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0}
-.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px}
-.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0}
-.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px}
-
-/* Actions */
-.clearlooks2 a {width:29px; height:16px; top:3px;}
-.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0}
-.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0}
-.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0}
-.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0}
-.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px}
-.clearlooks2 .mceMovable .mceMove {display:block}
-.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px}
-.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px}
-.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px}
-.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px}
-.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
-.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
-.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px}
-.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px}
-.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px}
-
-/* Resize */
-.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px}
-.clearlooks2 .mceResizable .mceResize {display:block}
-.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none}
-.clearlooks2 .mceMinimizable .mceMin {display:block}
-.clearlooks2 .mceMaximizable .mceMax {display:block}
-.clearlooks2 .mceMaximized .mceMed {display:block}
-.clearlooks2 .mceMaximized .mceMax {display:none}
-.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize}
-.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize}
-.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize}
-.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;}
-.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize}
-.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize}
-.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize}
-.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize}
-
-/* Alert/Confirm */
-.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0}
-.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px}
-.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal}
-.clearlooks2 a:hover {font-weight:bold;}
-.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5}
-.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px}
-.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)}
-.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px}
-.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto}
-.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)}
-

--- a/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm
+++ /dev/null
@@ -1,388 +1,1 @@
-<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -->

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-<title>Template for dialogs</title>

-<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />

-</head>

-<body>

-

-<div class="mceEditor">

-	<div class="clearlooks2" style="width:400px; height:100px; left:10px;">

-		<div class="mceWrapper">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Blured</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:100px; left:420px;">

-		<div class="mceWrapper mceMovable mceFocus">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Focused</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">

-		<div class="mceWrapper mceMovable mceFocus mceStatusbar">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">

-		<div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar, Resizable</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">

-		<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Resizable, Maximizable</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">

-		<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Blurred, Maximizable, Statusbar, Resizable</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">

-		<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Maximized, Maximizable, Minimizable</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">

-		<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Blured</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>Content</span>

-				<div class="mceRight"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Statusbar text.</span>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceMin" href="#"></a>

-			<a class="mceMax" href="#"></a>

-			<a class="mceMed" href="#"></a>

-			<a class="mceClose" href="#"></a>

-			<a class="mceResize mceResizeN" href="#"></a>

-			<a class="mceResize mceResizeS" href="#"></a>

-			<a class="mceResize mceResizeW" href="#"></a>

-			<a class="mceResize mceResizeE" href="#"></a>

-			<a class="mceResize mceResizeNW" href="#"></a>

-			<a class="mceResize mceResizeNE" href="#"></a>

-			<a class="mceResize mceResizeSW" href="#"></a>

-			<a class="mceResize mceResizeSE" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">

-		<div class="mceWrapper mceMovable mceFocus mceModal mceAlert">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Alert</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-				</span>

-				<div class="mceRight"></div>

-				<div class="mceIcon"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceButton mceOk" href="#">Ok</a>

-			<a class="mceClose" href="#"></a>

-		</div>

-	</div>

-

-	<div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">

-		<div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">

-			<div class="mceTop">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-				<span>Confirm</span>

-			</div>

-

-			<div class="mceMiddle">

-				<div class="mceLeft"></div>

-				<span>

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					This is a very long error message. This is a very long error message.

-					</span>

-				<div class="mceRight"></div>

-				<div class="mceIcon"></div>

-			</div>

-

-			<div class="mceBottom">

-				<div class="mceLeft"></div>

-				<div class="mceCenter"></div>

-				<div class="mceRight"></div>

-			</div>

-

-			<a class="mceMove" href="#"></a>

-			<a class="mceButton mceOk" href="#">Ok</a>

-			<a class="mceButton mceCancel" href="#">Cancel</a>

-			<a class="mceClose" href="#"></a>

-		</div>

-	</div>

-</div>

-

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length<d){for(var f=0;f<(d-g.length);f++){g="0"+g}}return g}a=a.replace("%D","%m/%d/%y");a=a.replace("%r","%I:%M:%S %p");a=a.replace("%Y",""+e.getFullYear());a=a.replace("%y",""+e.getYear());a=a.replace("%m",b(e.getMonth()+1,2));a=a.replace("%d",b(e.getDate(),2));a=a.replace("%H",""+b(e.getHours(),2));a=a.replace("%M",""+b(e.getMinutes(),2));a=a.replace("%S",""+b(e.getSeconds(),2));a=a.replace("%I",""+((e.getHours()+11)%12+1));a=a.replace("%p",""+(e.getHours()<12?"AM":"PM"));a=a.replace("%B",""+c.getLang("insertdatetime.months_long").split(",")[e.getMonth()]);a=a.replace("%b",""+c.getLang("insertdatetime.months_short").split(",")[e.getMonth()]);a=a.replace("%A",""+c.getLang("insertdatetime.day_long").split(",")[e.getDay()]);a=a.replace("%a",""+c.getLang("insertdatetime.day_short").split(",")[e.getDay()]);a=a.replace("%%","%");return a}});tinymce.PluginManager.add("insertdatetime",tinymce.plugins.InsertDateTime)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
+++ /dev/null
@@ -1,83 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.InsertDateTime', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			ed.addCommand('mceInsertDate', function() {

-				var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_dateFormat", ed.getLang('insertdatetime.date_fmt')));

-

-				ed.execCommand('mceInsertContent', false, str);

-			});

-

-			ed.addCommand('mceInsertTime', function() {

-				var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_timeFormat", ed.getLang('insertdatetime.time_fmt')));

-

-				ed.execCommand('mceInsertContent', false, str);

-			});

-

-			ed.addButton('insertdate', {title : 'insertdatetime.insertdate_desc', cmd : 'mceInsertDate'});

-			ed.addButton('inserttime', {title : 'insertdatetime.inserttime_desc', cmd : 'mceInsertTime'});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Insert date/time',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Private methods

-

-		_getDateTime : function(d, fmt) {

-			var ed = this.editor;

-

-			function addZeros(value, len) {

-				value = "" + value;

-

-				if (value.length < len) {

-					for (var i=0; i<(len-value.length); i++)

-						value = "0" + value;

-				}

-

-				return value;

-			};

-

-			fmt = fmt.replace("%D", "%m/%d/%y");

-			fmt = fmt.replace("%r", "%I:%M:%S %p");

-			fmt = fmt.replace("%Y", "" + d.getFullYear());

-			fmt = fmt.replace("%y", "" + d.getYear());

-			fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));

-			fmt = fmt.replace("%d", addZeros(d.getDate(), 2));

-			fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));

-			fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));

-			fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));

-			fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));

-			fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));

-			fmt = fmt.replace("%B", "" + ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);

-			fmt = fmt.replace("%b", "" + ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);

-			fmt = fmt.replace("%A", "" + ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);

-			fmt = fmt.replace("%a", "" + ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);

-			fmt = fmt.replace("%%", "%");

-

-			return fmt;

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('insertdatetime', tinymce.plugins.InsertDateTime);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){function a(b){do{if(b.className&&b.className.indexOf("mceItemLayer")!=-1){return b}}while(b=b.parentNode)}tinymce.create("tinymce.plugins.Layer",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceInsertLayer",d._insertLayer,d);b.addCommand("mceMoveForward",function(){d._move(1)});b.addCommand("mceMoveBackward",function(){d._move(-1)});b.addCommand("mceMakeAbsolute",function(){d._toggleAbsolute()});b.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});b.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});b.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});b.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});b.onInit.add(function(){var e=b.dom;if(tinymce.isIE){b.getDoc().execCommand("2D-Position",false,true)}});b.onMouseUp.add(function(f,h){var g=a(h.target);if(g){f.dom.setAttrib(g,"data-mce-style","")}});b.onMouseDown.add(function(f,j){var h=j.target,i=f.getDoc(),g;if(tinymce.isGecko){if(a(h)){if(i.designMode!=="on"){i.designMode="on";h=i.body;g=h.parentNode;g.removeChild(h);g.appendChild(h)}}else{if(i.designMode=="on"){i.designMode="off"}}}});b.onNodeChange.add(d._nodeChange,d);b.onVisualAid.add(d._visualAid,d)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(c,b,f){var d,e;d=this._getParentLayer(f);e=c.dom.getParent(f,"DIV,P,IMG");if(!e){b.setDisabled("absolute",1);b.setDisabled("moveforward",1);b.setDisabled("movebackward",1)}else{b.setDisabled("absolute",0);b.setDisabled("moveforward",!d);b.setDisabled("movebackward",!d);b.setActive("absolute",d&&d.style.position.toLowerCase()=="absolute")}},_visualAid:function(b,d,c){var f=b.dom;tinymce.each(f.select("div,p",d),function(g){if(/^(absolute|relative|fixed)$/i.test(g.style.position)){if(c){f.addClass(g,"mceItemVisualAid")}else{f.removeClass(g,"mceItemVisualAid")}f.addClass(g,"mceItemLayer")}})},_move:function(j){var c=this.editor,g,h=[],f=this._getParentLayer(c.selection.getNode()),e=-1,k=-1,b;b=[];tinymce.walk(c.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){b.push(d)}},"childNodes");for(g=0;g<b.length;g++){h[g]=b[g].style.zIndex?parseInt(b[g].style.zIndex):0;if(e<0&&b[g]==f){e=g}}if(j<0){for(g=0;g<h.length;g++){if(h[g]<h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;g<h.length;g++){if(h[g]>h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js
+++ /dev/null
@@ -1,262 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	function findParentLayer(node) {

-		do {

-			if (node.className && node.className.indexOf('mceItemLayer') != -1) {

-				return node;

-			}

-		} while (node = node.parentNode);

-	};

-

-	tinymce.create('tinymce.plugins.Layer', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceInsertLayer', t._insertLayer, t);

-

-			ed.addCommand('mceMoveForward', function() {

-				t._move(1);

-			});

-

-			ed.addCommand('mceMoveBackward', function() {

-				t._move(-1);

-			});

-

-			ed.addCommand('mceMakeAbsolute', function() {

-				t._toggleAbsolute();

-			});

-

-			// Register buttons

-			ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});

-			ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});

-			ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});

-			ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});

-

-			ed.onInit.add(function() {

-				var dom = ed.dom;

-

-				if (tinymce.isIE)

-					ed.getDoc().execCommand('2D-Position', false, true);

-			});

-

-			// Remove serialized styles when selecting a layer since it might be changed by a drag operation

-			ed.onMouseUp.add(function(ed, e) {

-				var layer = findParentLayer(e.target);

-	

-				if (layer) {

-					ed.dom.setAttrib(layer, 'data-mce-style', '');

-				}

-			});

-

-			// Fixes edit focus issues with layers on Gecko

-			// This will enable designMode while inside a layer and disable it when outside

-			ed.onMouseDown.add(function(ed, e) {

-				var node = e.target, doc = ed.getDoc(), parent;

-

-				if (tinymce.isGecko) {

-					if (findParentLayer(node)) {

-						if (doc.designMode !== 'on') {

-							doc.designMode = 'on';

-

-							// Repaint caret

-							node = doc.body;

-							parent = node.parentNode;

-							parent.removeChild(node);

-							parent.appendChild(node);

-						}

-					} else if (doc.designMode == 'on') {

-						doc.designMode = 'off';

-					}

-				}

-			});

-

-			ed.onNodeChange.add(t._nodeChange, t);

-			ed.onVisualAid.add(t._visualAid, t);

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Layer',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Private methods

-

-		_nodeChange : function(ed, cm, n) {

-			var le, p;

-

-			le = this._getParentLayer(n);

-			p = ed.dom.getParent(n, 'DIV,P,IMG');

-

-			if (!p) {

-				cm.setDisabled('absolute', 1);

-				cm.setDisabled('moveforward', 1);

-				cm.setDisabled('movebackward', 1);

-			} else {

-				cm.setDisabled('absolute', 0);

-				cm.setDisabled('moveforward', !le);

-				cm.setDisabled('movebackward', !le);

-				cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");

-			}

-		},

-

-		// Private methods

-

-		_visualAid : function(ed, e, s) {

-			var dom = ed.dom;

-

-			tinymce.each(dom.select('div,p', e), function(e) {

-				if (/^(absolute|relative|fixed)$/i.test(e.style.position)) {

-					if (s)

-						dom.addClass(e, 'mceItemVisualAid');

-					else

-						dom.removeClass(e, 'mceItemVisualAid');

-

-					dom.addClass(e, 'mceItemLayer');

-				}

-			});

-		},

-

-		_move : function(d) {

-			var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;

-

-			nl = [];

-			tinymce.walk(ed.getBody(), function(n) {

-				if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))

-					nl.push(n); 

-			}, 'childNodes');

-

-			// Find z-indexes

-			for (i=0; i<nl.length; i++) {

-				z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;

-

-				if (ci < 0 && nl[i] == le)

-					ci = i;

-			}

-

-			if (d < 0) {

-				// Move back

-

-				// Try find a lower one

-				for (i=0; i<z.length; i++) {

-					if (z[i] < z[ci]) {

-						fi = i;

-						break;

-					}

-				}

-

-				if (fi > -1) {

-					nl[ci].style.zIndex = z[fi];

-					nl[fi].style.zIndex = z[ci];

-				} else {

-					if (z[ci] > 0)

-						nl[ci].style.zIndex = z[ci] - 1;

-				}

-			} else {

-				// Move forward

-

-				// Try find a higher one

-				for (i=0; i<z.length; i++) {

-					if (z[i] > z[ci]) {

-						fi = i;

-						break;

-					}

-				}

-

-				if (fi > -1) {

-					nl[ci].style.zIndex = z[fi];

-					nl[fi].style.zIndex = z[ci];

-				} else

-					nl[ci].style.zIndex = z[ci] + 1;

-			}

-

-			ed.execCommand('mceRepaint');

-		},

-

-		_getParentLayer : function(n) {

-			return this.editor.dom.getParent(n, function(n) {

-				return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);

-			});

-		},

-

-		_insertLayer : function() {

-			var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody();

-

-			ed.dom.add(body, 'div', {

-				style : {

-					position : 'absolute',

-					left : p.x,

-					top : (p.y > 20 ? p.y : 20),

-					width : 100,

-					height : 100

-				},

-				'class' : 'mceItemVisualAid mceItemLayer'

-			}, ed.selection.getContent() || ed.getLang('layer.content'));

-

-			// Workaround for IE where it messes up the JS engine if you insert a layer on IE 6,7

-			if (tinymce.isIE)

-				dom.setHTML(body, body.innerHTML);

-		},

-

-		_toggleAbsolute : function() {

-			var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());

-

-			if (!le)

-				le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');

-

-			if (le) {

-				if (le.style.position.toLowerCase() == "absolute") {

-					ed.dom.setStyles(le, {

-						position : '',

-						left : '',

-						top : '',

-						width : '',

-						height : ''

-					});

-

-					ed.dom.removeClass(le, 'mceItemVisualAid');

-					ed.dom.removeClass(le, 'mceItemLayer');

-				} else {

-					if (le.style.left == "")

-						le.style.left = 20 + 'px';

-

-					if (le.style.top == "")

-						le.style.top = 20 + 'px';

-

-					if (le.style.width == "")

-						le.style.width = le.width ? (le.width + 'px') : '100px';

-

-					if (le.style.height == "")

-						le.style.height = le.height ? (le.height + 'px') : '100px';

-

-					le.style.position = "absolute";

-

-					ed.dom.setAttrib(le, 'data-mce-style', '');

-					ed.addVisual(ed.getBody());

-				}

-

-				ed.execCommand('mceRepaint');

-				ed.nodeChanged();

-			}

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('layer', tinymce.plugins.Layer);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce);
+

--- a/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js
+++ /dev/null
@@ -1,140 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- *

- * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align

- * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash

- *

- * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are

- * not apart of the newer specifications for HTML and XHTML.

- */

-

-(function(tinymce) {

-	// Override inline_styles setting to force TinyMCE to produce deprecated contents

-	tinymce.onAddEditor.addToTop(function(tinymce, editor) {

-		editor.settings.inline_styles = false;

-	});

-

-	// Create the legacy ouput plugin

-	tinymce.create('tinymce.plugins.LegacyOutput', {

-		init : function(editor) {

-			editor.onInit.add(function() {

-				var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',

-					fontSizes = tinymce.explode(editor.settings.font_size_style_values),

-					schema = editor.schema;

-

-				// Override some internal formats to produce legacy elements and attributes

-				editor.formatter.register({

-					// Change alignment formats to use the deprecated align attribute

-					alignleft : {selector : alignElements, attributes : {align : 'left'}},

-					aligncenter : {selector : alignElements, attributes : {align : 'center'}},

-					alignright : {selector : alignElements, attributes : {align : 'right'}},

-					alignfull : {selector : alignElements, attributes : {align : 'justify'}},

-

-					// Change the basic formatting elements to use deprecated element types
-					bold : [

-						{inline : 'b', remove : 'all'},

-						{inline : 'strong', remove : 'all'},

-						{inline : 'span', styles : {fontWeight : 'bold'}}

-					],

-					italic : [

-						{inline : 'i', remove : 'all'},

-						{inline : 'em', remove : 'all'},

-						{inline : 'span', styles : {fontStyle : 'italic'}}

-					],

-					underline : [

-						{inline : 'u', remove : 'all'},

-						{inline : 'span', styles : {textDecoration : 'underline'}, exact : true}

-					],

-					strikethrough : [

-						{inline : 'strike', remove : 'all'},

-						{inline : 'span', styles : {textDecoration: 'line-through'}, exact : true}

-					],
-

-					// Change font size and font family to use the deprecated font element

-					fontname : {inline : 'font', attributes : {face : '%value'}},

-					fontsize : {

-						inline : 'font',

-						attributes : {

-							size : function(vars) {

-								return tinymce.inArray(fontSizes, vars.value) + 1;

-							}

-						}

-					},

-

-					// Setup font elements for colors as well

-					forecolor : {inline : 'font', styles : {color : '%value'}},

-					hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}

-				});

-

-				// Check that deprecated elements are allowed if not add them

-				tinymce.each('b,i,u,strike'.split(','), function(name) {

-					schema.addValidElements(name + '[*]');

-				});

-

-				// Add font element if it's missing

-				if (!schema.getElementRule("font"))

-					schema.addValidElements("font[face|size|color|style]");

-

-				// Add the missing and depreacted align attribute for the serialization engine

-				tinymce.each(alignElements.split(','), function(name) {

-					var rule = schema.getElementRule(name), found;

-

-					if (rule) {

-						if (!rule.attributes.align) {

-							rule.attributes.align = {};

-							rule.attributesOrder.push('align');

-						}

-					}

-				});

-

-				// Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes

-				editor.onNodeChange.add(function(editor, control_manager) {

-					var control, fontElm, fontName, fontSize;

-

-					// Find font element get it's name and size

-					fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');

-					if (fontElm) {

-						fontName = fontElm.face;

-						fontSize = fontElm.size;

-					}

-

-					// Select/unselect the font name in droplist

-					if (control = control_manager.get('fontselect')) {

-						control.select(function(value) {

-							return value == fontName;

-						});

-					}

-

-					// Select/unselect the font size in droplist

-					if (control = control_manager.get('fontsizeselect')) {

-						control.select(function(value) {

-							var index = tinymce.inArray(fontSizes, value.fontSize);

-

-							return index + 1 == fontSize;

-						});

-					}

-				});

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'LegacyOutput',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput);

-})(tinymce);

 

--- a/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{return v&&u.tagName==="P"&&t.tagName==="P"}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(y){var v="TABBING";var s="EMPTY";var I="ESCAPE";var z="PARAGRAPH";var M="UNKNOWN";var x=M;function E(U){return U.keyCode===tinymce.VK.TAB&&!(U.altKey||U.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function D(){var U=y.selection.getRng();var V=U.startContainer;if(V.nodeType==3){return(U.endOffset==V.nodeValue.length)}else{if(V.nodeType==1){return U.endOffset==V.childNodes.length}}return false}function N(){var V=y.selection.getNode();var U=V.tagName==="P"&&V.parentNode.tagName==="LI"&&V.parentNode.lastChild===V;return y.selection.isCollapsed()&&U&&D()}function w(){var U=B();var W=U.parentNode.parentNode;var V=U.parentNode.lastChild===U;return V&&!t(W)&&P(U)}function t(U){if(n(U)){return U.parentNode&&U.parentNode.tagName==="LI"}else{return U.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&P(B())}function B(){var U=y.selection.getStart();return((U.tagName=="BR"||U.tagName=="")&&U.parentNode.tagName=="LI")?U.parentNode:U}function P(U){var V=U.childNodes.length;if(U.tagName==="LI"){return V==0?true:V==1&&(U.firstChild.tagName==""||U.firstChild.tagName=="BR"||H(U))}return false}function H(U){var V=tinymce.grep(U.parentNode.childNodes,function(Y){return Y.tagName=="LI"});var W=U==V[V.length-1];var X=U.firstChild;return tinymce.isIE9&&W&&(X.nodeValue==String.fromCharCode(160)||X.nodeValue==String.fromCharCode(32))}function T(U){return U.keyCode===tinymce.VK.ENTER}function A(U){return T(U)&&!U.shiftKey}function L(U){if(E(U)){return v}else{if(A(U)&&w()){return I}else{if(A(U)&&F()){return s}else{if(A(U)&&N()){return z}else{return M}}}}}function C(U,V){if(x==v||x==s||tinymce.isGecko&&x==I){r.cancel(V)}}function J(W,Y){if(x==z){var X=W.selection.getNode();var V=W.dom.create("li");var U=W.dom.getParent(X,"li");W.dom.insertAfter(V,U);if(tinyMCE.isIE8){V.appendChild(W.dom.create("&nbsp;"));W.selection.setCursorLocation(V,1)}else{if(tinyMCE.isGecko){setTimeout(function(){var Z=W.getDoc().createTextNode("\uFEFF");V.appendChild(Z);W.selection.setCursorLocation(V,0)},0)}else{W.selection.setCursorLocation(V,0)}}r.cancel(Y)}}function u(X,Z){var ac;if(!tinymce.isGecko){return}var V=X.selection.getStart();if(Z.keyCode!=tinymce.VK.BACKSPACE||V.tagName!=="IMG"){return}function W(ag){var ah=ag.firstChild;var af=null;do{if(!ah){break}if(ah.tagName==="LI"){af=ah}}while(ah=ah.nextSibling);return af}function ae(ag,af){while(ag.childNodes.length>0){af.appendChild(ag.childNodes[0])}}ac=V.parentNode.previousSibling;if(!ac){return}var aa;if(ac.tagName==="UL"||ac.tagName==="OL"){aa=ac}else{if(ac.previousSibling&&(ac.previousSibling.tagName==="UL"||ac.previousSibling.tagName==="OL")){aa=ac.previousSibling}else{return}}var ad=W(aa);var U=X.dom.createRng();U.setStart(ad,1);U.setEnd(ad,1);X.selection.setRng(U);X.selection.collapse(true);var Y=X.selection.getBookmark();var ab=V.parentNode.cloneNode(true);if(ab.tagName==="P"||ab.tagName==="DIV"){ae(ab,ad)}else{ad.appendChild(ab)}V.parentNode.parentNode.removeChild(V.parentNode);X.selection.moveToBookmark(Y)}function G(U){var V=y.dom.getParent(U,"ol,ul");if(V!=null){var W=V.lastChild;W.appendChild(y.getDoc().createElement(""));y.selection.setCursorLocation(W,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var V=y.selection,W=y.dom;function U(X){X=W.getParent(X,W.isBlock);return X&&(parseInt(y.dom.getStyle(X,"margin-left")||0,10)+parseInt(y.dom.getStyle(X,"padding-left")||0,10))>0}return U(V.getStart())||U(V.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(V,W){if(x==v){V.execCommand(W.shiftKey?"Outdent":"Indent",true,null);x=M;return r.cancel(W)}else{if(x==s){var U=B();var Y=V.settings.list_outdent_on_enter===true||W.shiftKey;V.execCommand(Y?"Outdent":"Indent",true,null);if(tinymce.isIE){G(U)}return r.cancel(W)}else{if(x==I){if(tinymce.isIE8){var X=V.getDoc().createTextNode("\uFEFF");V.selection.getNode().appendChild(X)}else{if(tinymce.isIE9||tinymce.isGecko){V.execCommand("Outdent");return r.cancel(W)}}}}}});function K(V,U){var W=y.getDoc().createTextNode("\uFEFF");V.insertBefore(W,U);y.selection.setCursorLocation(W,0);y.execCommand("mceRepaint")}function R(V,X){if(T(X)){var U=B();if(U){var W=U.parentNode;var Y=W&&W.parentNode;if(Y&&Y.nodeName=="LI"&&Y.firstChild==W&&U==W.firstChild){K(Y,W)}}}}function S(V,X){if(T(X)){var U=B();if(V.dom.select("ul li",U).length===1){var W=U.firstChild;K(U,W)}}}function Q(V,Z){function W(ad,aa){var ac=[];var ae=new tinymce.dom.TreeWalker(aa,ad);for(var ab=ae.current();ab;ab=ae.next()){if(V.dom.is(ab,"ol,ul,li")){ac.push(ab)}}return ac}if(Z.keyCode==tinymce.VK.BACKSPACE){var U=B();if(U){var Y=V.dom.getParent(U,"ol,ul");if(Y&&Y.firstChild===U){var X=W(Y,U);V.execCommand("Outdent",false,X);V.undoManager.add();return r.cancel(Z)}}}}function O(V,X){var U=B();if(X.keyCode===tinymce.VK.BACKSPACE&&V.dom.is(U,"li")&&U.parentNode.firstChild!==U){if(V.dom.select("ul,ol",U).length===1){var Z=U.previousSibling;V.dom.remove(V.dom.select("br",U));V.dom.remove(U,true);var W=tinymce.grep(Z.childNodes,function(aa){return aa.nodeType===3});if(W.length===1){var Y=W[0];V.selection.setCursorLocation(Y,Y.length)}V.undoManager.add();return r.cancel(X)}}}y.onKeyDown.add(function(U,V){x=L(V)});y.onKeyDown.add(C);y.onKeyDown.add(u);y.onKeyDown.add(J);if(tinymce.isGecko){y.onKeyUp.add(R)}if(tinymce.isIE8){y.onKeyUp.add(S)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(Q)}if(tinymce.isWebKit){y.onKeyDown.add(O)}},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(M.tagName==="P"||G.length>1)){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true)}return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}if(t.childNodes.length===0){t.innerHTML='<br _mce_bogus="1" />'}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w&&!H||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks()}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x)}function C(s,t){return t>=0&&s.hasChildNodes()&&t<s.childNodes.length&&s.childNodes[t].tagName==="BR"}function D(){var t=w.getNode();var s=z.getParent(t,"td");return s!==null}E=y.elements;u=w.getRng(true);if(!u.collapsed){if(C(u.endContainer,u.endOffset-1)){u.setEnd(u.endContainer,u.endOffset-1);w.setRng(u)}if(C(u.startContainer,u.startOffset)){u.setStart(u.startContainer,u.startOffset+1);w.setRng(u)}}if(tinymce.isIE8){var G=F.ed.selection.getNode();if(G.tagName==="LI"&&!(G.parentNode.lastChild===G)){var A=F.ed.getDoc().createTextNode("\uFEFF");G.appendChild(A)}}g=w.getBookmark();y.OL=y.UL=v;F.splitSafeEach(E,x);w.moveToBookmark(g);g=null;if(!D()){F.ed.execCommand("mceRepaint")}},splitSafeEach:function(t,s){if(tinymce.isGecko&&(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent)||/Firefox\/3\.[0-4]/.test(navigator.userAgent))){this.classBasedEach(t,s)}else{e(t,s)}},classBasedEach:function(v,u){var w=this.ed.dom,s,t;e(v,function(x){w.addClass(x,"_mce_act_on")});s=w.select("._mce_act_on");while(s.length>0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},selectedBlocks:function(){var s=this.ed;var t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}());
+

--- a/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
+++ /dev/null
@@ -1,947 +1,1 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2011, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
 
-(function() {
-	var each = tinymce.each, Event = tinymce.dom.Event, bookmark;
-
-	// Skips text nodes that only contain whitespace since they aren't semantically important.
-	function skipWhitespaceNodes(e, next) {
-		while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) {
-			e = next(e);
-		}
-		return e;
-	}
-
-	function skipWhitespaceNodesBackwards(e) {
-		return skipWhitespaceNodes(e, function(e) {
-			return e.previousSibling;
-		});
-	}
-
-	function skipWhitespaceNodesForwards(e) {
-		return skipWhitespaceNodes(e, function(e) {
-			return e.nextSibling;
-		});
-	}
-
-	function hasParentInList(ed, e, list) {
-		return ed.dom.getParent(e, function(p) {
-			return tinymce.inArray(list, p) !== -1;
-		});
-	}
-
-	function isList(e) {
-		return e && (e.tagName === 'OL' || e.tagName === 'UL');
-	}
-
-	function splitNestedLists(element, dom) {
-		var tmp, nested, wrapItem;
-		tmp = skipWhitespaceNodesBackwards(element.lastChild);
-		while (isList(tmp)) {
-			nested = tmp;
-			tmp = skipWhitespaceNodesBackwards(nested.previousSibling);
-		}
-		if (nested) {
-			wrapItem = dom.create('li', { style: 'list-style-type: none;'});
-			dom.split(element, nested);
-			dom.insertAfter(wrapItem, nested);
-			wrapItem.appendChild(nested);
-			wrapItem.appendChild(nested);
-			element = wrapItem.previousSibling;
-		}
-		return element;
-	}
-
-	function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) {
-		e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs);
-		return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs);
-	}
-
-	function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) {
-		var prev = skipWhitespaceNodesBackwards(e.previousSibling);
-		if (prev) {
-			return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs);
-		} else {
-			return e;
-		}
-	}
-
-	function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) {
-		var next = skipWhitespaceNodesForwards(e.nextSibling);
-		if (next) {
-			return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs);
-		} else {
-			return e;
-		}
-	}
-
-	function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) {
-		if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) {
-			return merge(e1, e2, differentStylesMasterElement);
-		} else if (e1 && e1.tagName === 'LI' && isList(e2)) {
-			// Fix invalidly nested lists.
-			e1.appendChild(e2);
-		}
-		return e2;
-	}
-
-	function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) {
-		if (!e1 || !e2) {
-			return false;
-		} else if (e1.tagName === 'LI' && e2.tagName === 'LI') {
-			return e2.style.listStyleType === 'none' || containsOnlyAList(e2);
-		} else if (isList(e1)) {
-			return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2);
-		} else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P';
-	}
-
-	function isListForIndent(e) {
-		var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild);
-		return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI));
-	}
-
-	function containsOnlyAList(e) {
-		var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild);
-		return firstChild && lastChild && firstChild === lastChild && isList(firstChild);
-	}
-
-	function merge(e1, e2, masterElement) {
-		var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild);
-		if (e1.tagName === 'P') {
-			e1.appendChild(e1.ownerDocument.createElement('br'));
-		}
-		while (e2.firstChild) {
-			e1.appendChild(e2.firstChild);
-		}
-		if (masterElement) {
-			e1.style.listStyleType = masterElement.style.listStyleType;
-		}
-		e2.parentNode.removeChild(e2);
-		attemptMerge(lastOriginal, firstNew, false);
-		return e1;
-	}
-
-	function findItemToOperateOn(e, dom) {
-		var item;
-		if (!dom.is(e, 'li,ol,ul')) {
-			item = dom.getParent(e, 'li');
-			if (item) {
-				e = item;
-			}
-		}
-		return e;
-	}
-
-	tinymce.create('tinymce.plugins.Lists', {
-		init: function(ed) {
-			var LIST_TABBING = 'TABBING';
-			var LIST_EMPTY_ITEM = 'EMPTY';
-			var LIST_ESCAPE = 'ESCAPE';
-			var LIST_PARAGRAPH = 'PARAGRAPH';
-			var LIST_UNKNOWN = 'UNKNOWN';
-			var state = LIST_UNKNOWN;
-
-			function isTabInList(e) {
-                // Don't indent on Ctrl+Tab or Alt+Tab
-				return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) &&
-					(ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
-			}
-
-            function isCursorAtEndOfContainer() {
-				var range = ed.selection.getRng();
-                var startContainer = range.startContainer;
-                if (startContainer.nodeType == 3) {
-                    return (range.endOffset == startContainer.nodeValue.length);
-                } else if (startContainer.nodeType == 1) {
-                    return range.endOffset == startContainer.childNodes.length;
-                }
-                return false;
-            }
-			
-            // If we are at the end of a paragraph in a list item, pressing enter should create a new list item instead of a new paragraph.
-            function isEndOfParagraph() {
-				var node = ed.selection.getNode();
-				var isLastParagraphOfLi = node.tagName === 'P' && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
-				return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
-			}
-
-			function isOnLastListItem() {
-				var li = getLi();
-				var grandParent = li.parentNode.parentNode;
-				var isLastItem = li.parentNode.lastChild === li;
-				return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li);
-			}
-
-			function isNestedList(grandParent) {
-				if (isList(grandParent)) {
-					return grandParent.parentNode && grandParent.parentNode.tagName === 'LI';
-				} else {
-					return  grandParent.tagName === 'LI';
-				}
-			}
-
-			function isInEmptyListItem() {
-				return ed.selection.isCollapsed() && isEmptyListItem(getLi());
-			}
-
-			function getLi() {
-				var n = ed.selection.getStart();
-				// Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position
-				return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n;
-			}
-
-			function isEmptyListItem(li) {
-				var numChildren = li.childNodes.length;
-				if (li.tagName === 'LI') {
-					return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li));
-				}
-				return false;
-			}
-
-			function isEmptyIE9Li(li) {
-				// only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these
-				var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'});
-				var isLastLi = li == lis[lis.length - 1];
-				var child = li.firstChild;
-				return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32));
-			}
-
-			function isEnter(e) {
-				return e.keyCode === tinymce.VK.ENTER;
-            }
-
-            function isEnterWithoutShift(e) {
-                return isEnter(e) && !e.shiftKey;
-            }
-
-			function getListKeyState(e) {
-				if (isTabInList(e)) {
-					return LIST_TABBING;
-				} else if (isEnterWithoutShift(e) && isOnLastListItem()) {
-					return LIST_ESCAPE;
-				} else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
-					return LIST_EMPTY_ITEM;
-				} else if (isEnterWithoutShift(e) && isEndOfParagraph()) {
-                    return LIST_PARAGRAPH;
-                } else {
-					return LIST_UNKNOWN;
-				}
-			}
-
-			function cancelDefaultEvents(ed, e) {
-				// list escape is done manually using outdent as it does not create paragraphs correctly in td's
-				if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) {
-					Event.cancel(e);
-				}
-			}
-			
-            // Creates a new list item after the current selection's list item parent
-            function createNewLi(ed, e) {
-                if (state == LIST_PARAGRAPH) {
-					var node = ed.selection.getNode();
-					var li = ed.dom.create("li");
-					var parentLi = ed.dom.getParent(node, 'li');
-					ed.dom.insertAfter(li, parentLi);
-
-                    // Move caret to new list element.
-                    if (tinyMCE.isIE8) {
-                        li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
-                        ed.selection.setCursorLocation(li, 1);
-                    } else if (tinyMCE.isGecko) {
-                        // This setTimeout is a hack as FF behaves badly if there is no content after the bullet point
-                        setTimeout(function () {
-							var n = ed.getDoc().createTextNode('\uFEFF');
-                            li.appendChild(n);
-                            ed.selection.setCursorLocation(li, 0);
-                        }, 0);
-                    } else {
-                        ed.selection.setCursorLocation(li, 0);
-                    }
-					Event.cancel(e);
-				}
-            }
-
-			function imageJoiningListItem(ed, e) {
-				var prevSibling;
-
-				if (!tinymce.isGecko)
-					return;
-
-				var n = ed.selection.getStart();
-				if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG')
-					return;
-
-				function lastLI(node) {
-					var child = node.firstChild;
-					var li = null;
-					do {
-						if (!child)
-							break;
-
-						if (child.tagName === 'LI')
-							li = child;
-					} while (child = child.nextSibling);
-
-					return li;
-				}
-
-				function addChildren(parentNode, destination) {
-					while (parentNode.childNodes.length > 0)
-						destination.appendChild(parentNode.childNodes[0]);
-				}
-
-				// Check if there is a previous sibling
-				prevSibling = n.parentNode.previousSibling;
-				if (!prevSibling)
-					return;
-
-				var ul;
-				if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL')
-					ul = prevSibling;
-				else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL'))
-					ul = prevSibling.previousSibling;
-				else
-					return;
-
-				var li = lastLI(ul);
-
-				// move the caret to the end of the list item
-				var rng = ed.dom.createRng();
-				rng.setStart(li, 1);
-				rng.setEnd(li, 1);
-				ed.selection.setRng(rng);
-				ed.selection.collapse(true);
-
-				// save a bookmark at the end of the list item
-				var bookmark = ed.selection.getBookmark();
-
-				// copy the image an its text to the list item
-				var clone = n.parentNode.cloneNode(true);
-				if (clone.tagName === 'P' || clone.tagName === 'DIV')
-					addChildren(clone, li);
-				else
-					li.appendChild(clone);
-
-				// remove the old copy of the image
-				n.parentNode.parentNode.removeChild(n.parentNode);
-
-				// move the caret where we saved the bookmark
-				ed.selection.moveToBookmark(bookmark);
-			}
-
-			// fix the cursor position to ensure it is correct in IE
-			function setCursorPositionToOriginalLi(li) {
-				var list = ed.dom.getParent(li, 'ol,ul');
-				if (list != null) {
-					var lastLi = list.lastChild;
-					lastLi.appendChild(ed.getDoc().createElement(''));
-					ed.selection.setCursorLocation(lastLi, 0);
-				}
-			}
-
-			this.ed = ed;
-			ed.addCommand('Indent', this.indent, this);
-			ed.addCommand('Outdent', this.outdent, this);
-			ed.addCommand('InsertUnorderedList', function() {
-				this.applyList('UL', 'OL');
-			}, this);
-			ed.addCommand('InsertOrderedList', function() {
-				this.applyList('OL', 'UL');
-			}, this);
-
-			ed.onInit.add(function() {
-				ed.editorCommands.addCommands({
-					'outdent': function() {
-						var sel = ed.selection, dom = ed.dom;
-
-						function hasStyleIndent(n) {
-							n = dom.getParent(n, dom.isBlock);
-							return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0;
-						}
-
-						return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList');
-					}
-				}, 'state');
-			});
-
-			ed.onKeyUp.add(function(ed, e) {
-				if (state == LIST_TABBING) {
-					ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
-                    state = LIST_UNKNOWN;
-                    return Event.cancel(e);
-				} else if (state == LIST_EMPTY_ITEM) {
-					var li = getLi();
-					var shouldOutdent =  ed.settings.list_outdent_on_enter === true || e.shiftKey;
-					ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null);
-					if (tinymce.isIE) {
-						setCursorPositionToOriginalLi(li);
-					}
-
-					return Event.cancel(e);
-				} else if (state == LIST_ESCAPE) {
-					if (tinymce.isIE8) {
-						// append a zero sized nbsp so that caret is positioned correctly in IE8 after escaping and applying formatting.
-						// if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after
-						// escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag.
-						var n = ed.getDoc().createTextNode('\uFEFF');
-						ed.selection.getNode().appendChild(n);
-					} else if (tinymce.isIE9 || tinymce.isGecko) {
-						// IE9 does not escape the list so we use outdent to do this and cancel the default behaviour
-						// Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves
-						ed.execCommand('Outdent');
-						return Event.cancel(e);
-                    }
-				}
-			});
-
-			function fixListItem(parent, reference) {
-				// a zero-sized non-breaking space is placed in the empty list item so that the nested list is
-				// displayed on the below line instead of next to it
-				var n = ed.getDoc().createTextNode('\uFEFF');
-				parent.insertBefore(n, reference);
-				ed.selection.setCursorLocation(n, 0);
-				// repaint to remove rendering artifact. only visible when creating new list
-				ed.execCommand('mceRepaint');
-			}
-
-			function fixIndentedListItemForGecko(ed, e) {
-				if (isEnter(e)) {
-					var li = getLi();
-					if (li) {
-						var parent = li.parentNode;
-						var grandParent = parent && parent.parentNode;
-						if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) {
-							fixListItem(grandParent, parent);
-						}
-					}
-				}
-			}
-
-			function fixIndentedListItemForIE8(ed, e) {
-				if (isEnter(e)) {
-					var li = getLi();
-					if (ed.dom.select('ul li', li).length === 1) {
-						var list = li.firstChild;
-						fixListItem(li, list);
-					}
-				}
-			}
-
-			function fixDeletingFirstCharOfList(ed, e) {
-				function listElements(list, li) {
-					var elements = [];
-					var walker = new tinymce.dom.TreeWalker(li, list);
-					for (var node = walker.current(); node; node = walker.next()) {
-						if (ed.dom.is(node, 'ol,ul,li')) {
-							elements.push(node);
-						}
-					}
-					return elements;
-				}
-
-				if (e.keyCode == tinymce.VK.BACKSPACE) {
-					var li = getLi();
-					if (li) {
-						var list = ed.dom.getParent(li, 'ol,ul');
-						if (list && list.firstChild === li) {
-							var elements = listElements(list, li);
-							ed.execCommand("Outdent", false, elements);
-							ed.undoManager.add();
-							return Event.cancel(e);
-						}
-					}
-				}
-			}
-
-			function fixDeletingEmptyLiInWebkit(ed, e) {
-				var li = getLi();
-				if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) {
-					if (ed.dom.select('ul,ol', li).length === 1) {
-						var prevLi = li.previousSibling;
-						ed.dom.remove(ed.dom.select('br', li));
-						ed.dom.remove(li, true);
-						var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 });
-						if (textNodes.length === 1) {
-							var textNode = textNodes[0]
-							ed.selection.setCursorLocation(textNode, textNode.length);
-						}
-						ed.undoManager.add();
-						return Event.cancel(e);
-					}
-				}
-			}
-
-			ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); });
-			ed.onKeyDown.add(cancelDefaultEvents);
-			ed.onKeyDown.add(imageJoiningListItem);
-            ed.onKeyDown.add(createNewLi);
-
-			if (tinymce.isGecko) {
-				ed.onKeyUp.add(fixIndentedListItemForGecko);
-			}
-			if (tinymce.isIE8) {
-				ed.onKeyUp.add(fixIndentedListItemForIE8);
-			}
-			if (tinymce.isGecko || tinymce.isWebKit) {
-				ed.onKeyDown.add(fixDeletingFirstCharOfList);
-			}
-			if (tinymce.isWebKit) {
-				ed.onKeyDown.add(fixDeletingEmptyLiInWebkit);
-			}
-		},
-
-		applyList: function(targetListType, oppositeListType) {
-			var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions,
-					selectedBlocks = ed.selection.getSelectedBlocks();
-
-			function cleanupBr(e) {
-				if (e && e.tagName === 'BR') {
-					dom.remove(e);
-				}
-			}
-
-			function makeList(element) {
-				var list = dom.create(targetListType), li;
-
-				function adjustIndentForNewList(element) {
-					// If there's a margin-left, outdent one level to account for the extra list margin.
-					if (element.style.marginLeft || element.style.paddingLeft) {
-						t.adjustPaddingFunction(false)(element);
-					}
-				}
-
-				if (element.tagName === 'LI') {
-					// No change required.
-				} else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') {
-					processBrs(element, function(startSection, br) {
-						doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
-						li = startSection.parentNode;
-						adjustIndentForNewList(li);
-						cleanupBr(br);
-					});
-					if (li) {
-						if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) {
-							dom.split(li.parentNode.parentNode, li.parentNode);
-						}
-						attemptMergeWithAdjacent(li.parentNode, true);
-					}
-					return;
-				} else {
-					// Put the list around the element.
-					li = dom.create('li');
-					dom.insertAfter(li, element);
-					li.appendChild(element);
-					adjustIndentForNewList(element);
-					element = li;
-				}
-				dom.insertAfter(list, element);
-				list.appendChild(element);
-				attemptMergeWithAdjacent(list, true);
-				applied.push(element);
-			}
-
-			function doWrapList(start, end, template) {
-				var li, n = start, tmp;
-				while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) {
-					start = dom.split(start.parentNode, start.previousSibling);
-					start = start.nextSibling;
-					n = start;
-				}
-				if (template) {
-					li = template.cloneNode(true);
-					start.parentNode.insertBefore(li, start);
-					while (li.firstChild) dom.remove(li.firstChild);
-					li = dom.rename(li, 'li');
-				} else {
-					li = dom.create('li');
-					start.parentNode.insertBefore(li, start);
-				}
-                while (n && n != end) {
-					tmp = n.nextSibling;
-					li.appendChild(n);
-					n = tmp;
-				}
-				if (li.childNodes.length === 0) {
-					li.innerHTML = '<br _mce_bogus="1" />';
-				}
-				makeList(li);
-			}
-
-			function processBrs(element, callback) {
-				var startSection, previousBR, END_TO_START = 3, START_TO_END = 1,
-						breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl';
-
-				function isAnyPartSelected(start, end) {
-					var r = dom.createRng(), sel;
-					bookmark.keep = true;
-					ed.selection.moveToBookmark(bookmark);
-					bookmark.keep = false;
-					sel = ed.selection.getRng(true);
-					if (!end) {
-						end = start.parentNode.lastChild;
-					}
-					r.setStartBefore(start);
-					r.setEndAfter(end);
-					return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0);
-				}
-
-				function nextLeaf(br) {
-					if (br.nextSibling)
-						return br.nextSibling;
-					if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot())
-						return nextLeaf(br.parentNode);
-				}
-
-				// Split on BRs within the range and process those.
-				startSection = element.firstChild;
-				// First mark the BRs that have any part of the previous section selected.
-				var trailingContentSelected = false;
-				each(dom.select(breakElements, element), function(br) {
-					if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
-						return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
-					}
-					if (isAnyPartSelected(startSection, br)) {
-						dom.addClass(br, '_mce_tagged_br');
-						startSection = nextLeaf(br);
-					}
-				});
-				trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined));
-				startSection = element.firstChild;
-				each(dom.select(breakElements, element), function(br) {
-					// Got a section from start to br.
-					var tmp = nextLeaf(br);
-					if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
-						return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
-					}
-					if (dom.hasClass(br, '_mce_tagged_br')) {
-						callback(startSection, br, previousBR);
-						previousBR = null;
-					} else {
-						previousBR = br;
-					}
-					startSection = tmp;
-				});
-				if (trailingContentSelected) {
-					callback(startSection, undefined, previousBR);
-				}
-			}
-
-			function wrapList(element) {
-				processBrs(element, function(startSection, br, previousBR) {
-					// Need to indent this part
-					doWrapList(startSection, br);
-					cleanupBr(br);
-					cleanupBr(previousBR);
-				});
-			}
-
-			function changeList(element) {
-				if (tinymce.inArray(applied, element) !== -1) {
-					return;
-				}
-				if (element.parentNode.tagName === oppositeListType) {
-					dom.split(element.parentNode, element);
-					makeList(element);
-					attemptMergeWithNext(element.parentNode, false);
-				}
-				applied.push(element);
-			}
-
-			function convertListItemToParagraph(element) {
-				var child, nextChild, mergedElement, splitLast;
-				if (tinymce.inArray(applied, element) !== -1) {
-					return;
-				}
-				element = splitNestedLists(element, dom);
-				while (dom.is(element.parentNode, 'ol,ul,li')) {
-					dom.split(element.parentNode, element);
-				}
-				// Push the original element we have from the selection, not the renamed one.
-				applied.push(element);
-				element = dom.rename(element, 'p');
-				mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines);
-				if (mergedElement === element) {
-					// Now split out any block elements that can't be contained within a P.
-					// Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each)
-					child = element.firstChild;
-					while (child) {
-						if (dom.isBlock(child)) {
-							child = dom.split(child.parentNode, child);
-							splitLast = true;
-							nextChild = child.nextSibling && child.nextSibling.firstChild;
-						} else {
-							nextChild = child.nextSibling;
-							if (splitLast && child.tagName === 'BR') {
-								dom.remove(child);
-							}
-							splitLast = false;
-						}
-						child = nextChild;
-					}
-				}
-			}
-
-			each(selectedBlocks, function(e) {
-				e = findItemToOperateOn(e, dom);
-				if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) {
-					hasOppositeType = true;
-				} else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) {
-					hasSameType = true;
-				} else {
-					hasNonList = true;
-				}
-			});
-
-			if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) {
-				actions = {
-					'LI': changeList,
-					'H1': makeList,
-					'H2': makeList,
-					'H3': makeList,
-					'H4': makeList,
-					'H5': makeList,
-					'H6': makeList,
-					'P': makeList,
-					'BODY': makeList,
-					'DIV': selectedBlocks.length > 1 ? makeList : wrapList,
-					defaultAction: wrapList,
-					elements: this.selectedBlocks()
-				};
-			} else {
-				actions = {
-					defaultAction: convertListItemToParagraph,
-					elements: this.selectedBlocks()
-				};
-			}
-			this.process(actions);
-		},
-
-		indent: function() {
-			var ed = this.ed, dom = ed.dom, indented = [];
-
-			function createWrapItem(element) {
-				var wrapItem = dom.create('li', { style: 'list-style-type: none;'});
-				dom.insertAfter(wrapItem, element);
-				return wrapItem;
-			}
-
-			function createWrapList(element) {
-				var wrapItem = createWrapItem(element),
-						list = dom.getParent(element, 'ol,ul'),
-						listType = list.tagName,
-						listStyle = dom.getStyle(list, 'list-style-type'),
-						attrs = {},
-						wrapList;
-				if (listStyle !== '') {
-					attrs.style = 'list-style-type: ' + listStyle + ';';
-				}
-				wrapList = dom.create(listType, attrs);
-				wrapItem.appendChild(wrapList);
-				return wrapList;
-			}
-
-			function indentLI(element) {
-				if (!hasParentInList(ed, element, indented)) {
-					element = splitNestedLists(element, dom);
-					var wrapList = createWrapList(element);
-					wrapList.appendChild(element);
-					attemptMergeWithAdjacent(wrapList.parentNode, false);
-					attemptMergeWithAdjacent(wrapList, false);
-					indented.push(element);
-				}
-			}
-
-			this.process({
-				'LI': indentLI,
-				defaultAction: this.adjustPaddingFunction(true),
-				elements: this.selectedBlocks()
-			});
-
-		},
-
-		outdent: function(ui, elements) {
-			var t = this, ed = t.ed, dom = ed.dom, outdented = [];
-
-			function outdentLI(element) {
-				var listElement, targetParent, align;
-				if (!hasParentInList(ed, element, outdented)) {
-					if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') {
-						return t.adjustPaddingFunction(false)(element);
-					}
-					align = dom.getStyle(element, 'text-align', true);
-					if (align === 'center' || align === 'right') {
-						dom.setStyle(element, 'text-align', 'left');
-						return;
-					}
-					element = splitNestedLists(element, dom);
-					listElement = element.parentNode;
-					targetParent = element.parentNode.parentNode;
-					if (targetParent.tagName === 'P') {
-						dom.split(targetParent, element.parentNode);
-					} else {
-						dom.split(listElement, element);
-						if (targetParent.tagName === 'LI') {
-							// Nested list, need to split the LI and go back out to the OL/UL element.
-							dom.split(targetParent, element);
-						} else if (!dom.is(targetParent, 'ol,ul')) {
-							dom.rename(element, 'p');
-						}
-					}
-					outdented.push(element);
-				}
-			}
-
-			var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks();
-			this.process({
-				'LI': outdentLI,
-				defaultAction: this.adjustPaddingFunction(false),
-				elements: listElements
-			});
-
-			each(outdented, attemptMergeWithAdjacent);
-		},
-
-		process: function(actions) {
-			var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
-
-			function isEmptyElement(element) {
-				var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) {
-					return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark'
-							|| n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == ''));
-				});
-				return excludeBrsAndBookmarks.length === 0;
-			}
-
-			function processElement(element) {
-				dom.removeClass(element, '_mce_act_on');
-				if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) {
-					return;
-				}
-				element = findItemToOperateOn(element, dom);
-				var action = actions[element.tagName];
-				if (!action) {
-					action = actions.defaultAction;
-				}
-				action(element);
-			}
-
-			function recurse(element) {
-				t.splitSafeEach(element.childNodes, processElement);
-			}
-
-			function brAtEdgeOfSelection(container, offset) {
-				return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length &&
-						container.childNodes[offset].tagName === 'BR';
-			}
-
-			function isInTable() {
-				var n = sel.getNode();
-				var p = dom.getParent(n, 'td');
-				return p !== null;
-			}
-
-			selectedBlocks = actions.elements;
-
-			r = sel.getRng(true);
-			if (!r.collapsed) {
-				if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) {
-					r.setEnd(r.endContainer, r.endOffset - 1);
-					sel.setRng(r);
-				}
-				if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) {
-					r.setStart(r.startContainer, r.startOffset + 1);
-					sel.setRng(r);
-				}
-			}
-
-
-			if (tinymce.isIE8) {
-				// append a zero sized nbsp so that caret is restored correctly using bookmark
-				var s = t.ed.selection.getNode();
-				if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) {
-					var i = t.ed.getDoc().createTextNode('\uFEFF');
-					s.appendChild(i);
-				}
-			}
-
-			bookmark = sel.getBookmark();
-			actions.OL = actions.UL = recurse;
-			t.splitSafeEach(selectedBlocks, processElement);
-			sel.moveToBookmark(bookmark);
-			bookmark = null;
-
-			// we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6
-			if (!isInTable()) {
-				// Avoids table or image handles being left behind in Firefox.
-				t.ed.execCommand('mceRepaint');
-			}
-		},
-
-		splitSafeEach: function(elements, f) {
-			if (tinymce.isGecko && (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
-					/Firefox\/3\.[0-4]/.test(navigator.userAgent))) {
-				this.classBasedEach(elements, f);
-			} else {
-				each(elements, f);
-			}
-		},
-
-		classBasedEach: function(elements, f) {
-			var dom = this.ed.dom, nodes, element;
-			// Mark nodes
-			each(elements, function(element) {
-				dom.addClass(element, '_mce_act_on');
-			});
-			nodes = dom.select('._mce_act_on');
-			while (nodes.length > 0) {
-				element = nodes.shift();
-				dom.removeClass(element, '_mce_act_on');
-				f(element);
-				nodes = dom.select('._mce_act_on');
-			}
-		},
-
-		adjustPaddingFunction: function(isIndent) {
-			var indentAmount, indentUnits, ed = this.ed;
-			indentAmount = ed.settings.indentation;
-			indentUnits = /[a-z%]+/i.exec(indentAmount);
-			indentAmount = parseInt(indentAmount, 10);
-			return function(element) {
-				var currentIndent, newIndentAmount;
-				currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10);
-				if (isIndent) {
-					newIndentAmount = currentIndent + indentAmount;
-				} else {
-					newIndentAmount = currentIndent - indentAmount;
-				}
-				ed.dom.setStyle(element, 'padding-left', '');
-				ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : '');
-			};
-		},
-
-		selectedBlocks: function() {
-			var ed = this.ed
-			var selectedBlocks = ed.selection.getSelectedBlocks();
-			return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
-		},
-
-		getInfo: function() {
-			return {
-				longname : 'Lists',
-				author : 'Moxiecode Systems AB',
-				authorurl : 'http://tinymce.moxiecode.com',
-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists',
-				version : tinymce.majorVersion + "." + tinymce.minorVersion
-			};
-		}
-	});
-	tinymce.PluginManager.add("lists", tinymce.plugins.Lists);
-}());
-

--- a/tinymce/jscripts/tiny_mce/plugins/media/css/media.css
+++ /dev/null
@@ -1,18 +1,1 @@
-#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }

-#hspace, #vspace { width: 50px }

-#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }

-#flash_base, #flash_flashvars, #html5_altsource1, #html5_altsource2, #html5_poster { width: 240px }

-#width, #height { width: 40px }

-#src, #media_type { width: 250px }

-#class { width: 120px }

-#prev { margin: 0; border: 1px solid black; width: 380px; height: 260px; overflow: auto }

-.panel_wrapper div.current { height: 420px; overflow: auto }

-#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none }

-.mceAddSelectValue { background-color: #DDDDDD }

-#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px }

-#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px }

-#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px }

-#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px }

-#qt_qtsrc { width: 200px }

-iframe {border: 1px solid gray}

 

--- a/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var d=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),h=tinymce.makeMap(d.join(",")),b=tinymce.html.Node,f,a,g=tinymce.util.JSON,e;f=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["EmbeddedAudio"],["Audio"]];function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(i){return i&&i.nodeName==="IMG"&&n.dom.hasClass(i,"mceItemMedia")}r.editor=n;r.url=j;a="";for(m=0;m<f.length;m++){k=f[m][0];q={name:k,clsids:tinymce.explode(f[m][1]||""),mimes:tinymce.explode(f[m][2]||""),codebase:f[m][3]};for(p=0;p<q.clsids.length;p++){l["clsid:"+q.clsids[p]]=q}for(p=0;p<q.mimes.length;p++){l[q.mimes[p]]=q}l["mceItem"+k]=q;l[k.toLowerCase()]=q;a+=(a?"|":"")+k}tinymce.each(n.getParam("media_types","video=mp4,m4v,ogv,webm;silverlight=xap;flash=swf,flv;shockwave=dcr;quicktime=mov,qt,mpg,mpeg;shockwave=dcr;windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;realmedia=rm,ra,ram;java=jar;audio=mp3,ogg").split(";"),function(v){var s,u,t;v=v.split(/=/);u=tinymce.explode(v[1].toLowerCase());for(s=0;s<u.length;s++){t=l[v[0].toLowerCase()];if(t){l[u[s]]=t}}});a=new RegExp("write("+a+")\\(([^)]+)\\)");r.lookup=l;n.onPreInit.add(function(){n.schema.addValidElements("object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]");n.parser.addNodeFilter("object,embed,video,audio,script,iframe",function(s){var t=s.length;while(t--){r.objectToImg(s[t])}});n.serializer.addNodeFilter("img",function(s,u,t){var v=s.length,w;while(v--){w=s[v];if((w.attr("class")||"").indexOf("mceItemMedia")!==-1){r.imgToObject(w,t)}}})});n.onInit.add(function(){if(n.theme&&n.theme.onResolveName){n.theme.onResolveName.add(function(i,s){if(s.name==="img"&&n.dom.hasClass(s.node,"mceItemMedia")){s.name="media"}})}if(n&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(function(s,t,i){if(i.nodeName==="IMG"&&i.className.indexOf("mceItemMedia")!==-1){t.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});n.addCommand("mceMedia",function(){var s,i;i=n.selection.getNode();if(o(i)){s=n.dom.getAttrib(i,"data-mce-json");if(s){s=g.parse(s);tinymce.each(d,function(t){var u=n.dom.getAttrib(i,t);if(u){s[t]=u}});s.type=r.getType(i.className).name.toLowerCase()}}if(!s){s={type:"flash",video:{sources:[]},params:{}}}n.windowManager.open({file:j+"/media.htm",width:430+parseInt(n.getLang("media.delta_width",0)),height:500+parseInt(n.getLang("media.delta_height",0)),inline:1},{plugin_url:j,data:s})});n.addButton("media",{title:"media.desc",cmd:"mceMedia"});n.onNodeChange.add(function(s,i,t){i.setActive("media",o(t))})},convertUrl:function(k,n){var j=this,m=j.editor,l=m.settings,o=l.url_converter,i=l.url_converter_scope||j;if(!k){return k}if(n){return m.documentBaseURI.toAbsolute(k)}return o.call(i,k,"src","object")},getInfo:function(){return{longname:"Media",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media",version:tinymce.majorVersion+"."+tinymce.minorVersion}},dataToImg:function(m,k){var r=this,o=r.editor,p=o.documentBaseURI,j,q,n,l;m.params.src=r.convertUrl(m.params.src,k);q=m.video.attrs;if(q){q.src=r.convertUrl(q.src,k)}if(q){q.poster=r.convertUrl(q.poster,k)}j=c(m.video.sources);if(j){for(l=0;l<j.length;l++){j[l].src=r.convertUrl(j[l].src,k)}}n=r.editor.dom.create("img",{id:m.id,style:m.style,align:m.align,hspace:m.hspace,vspace:m.vspace,src:r.editor.theme.url+"/img/trans.gif","class":"mceItemMedia mceItem"+r.getType(m.type).name,"data-mce-json":g.serialize(m,"'")});n.width=m.width||(m.type=="audio"?"300":"320");n.height=m.height||(m.type=="audio"?"32":"240");return n},dataToHtml:function(i,j){return this.editor.serializer.serialize(this.dataToImg(i,j),{forced_root_block:"",force_absolute:j})},htmlToData:function(k){var j,i,l;l={type:"flash",video:{sources:[]},params:{}};j=this.editor.parser.parse(k);i=j.getAll("img")[0];if(i){l=g.parse(i.attr("data-mce-json"));l.type=this.getType(i.attr("class")).name.toLowerCase();tinymce.each(d,function(m){var n=i.attr(m);if(n){l[m]=n}})}return l},getType:function(m){var k,j,l;j=tinymce.explode(m," ");for(k=0;k<j.length;k++){l=this.lookup[j[k]];if(l){return l}}},imgToObject:function(z,o){var u=this,p=u.editor,C,H,j,t,I,y,G,w,k,E,s,q,A,D,m,x,l,B,F;function r(i,n){var M,L,N,K,J;J=p.getParam("flash_video_player_url",u.convertUrl(u.url+"/moxieplayer.swf"));if(J){M=p.documentBaseURI;G.params.src=J;if(p.getParam("flash_video_player_absvideourl",true)){i=M.toAbsolute(i||"",true);n=M.toAbsolute(n||"",true)}N="";L=p.getParam("flash_video_player_flashvars",{url:"$url",poster:"$poster"});tinymce.each(L,function(P,O){P=P.replace(/\$url/,i||"");P=P.replace(/\$poster/,n||"");if(P.length>0){N+=(N?"&":"")+O+"="+escape(P)}});if(N.length){G.params.flashvars=N}K=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(K,function(P,O){G.params[O]=""+P})}}G=z.attr("data-mce-json");if(!G){return}G=g.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}if(q.name==="Iframe"){x=new b("iframe",1);tinymce.each(d,function(i){var n=z.attr(i);if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&n.length>0){x.attr(i,n)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new b("script",1).attr("type","text/javascript");y=new b("#text",3);y.value="write"+q.name+"("+g.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new b("video",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A<k.length;A++){if(/\.mp4$/.test(k[A].src)){m=k[A].src}}if(!k[0].type){C.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;C.append(w)}if(m){r(m,l);q=u.getType("flash")}else{G.params.src=""}}if(q.name==="Audio"&&G.video.sources[0]){F=new b("audio",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);if(!k[0].type){F.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;F.append(w)}G.params.src=""}if(q.name==="EmbeddedAudio"){j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:z.attr("type")});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});G.params.src=""}if(G.params.src){if(/\.flv$/i.test(G.params.src)){r(G.params.src,"")}if(o&&o.force_absolute){G.params.src=p.documentBaseURI.toAbsolute(G.params.src)}H=new b("object",1).attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B});tinymce.each(d,function(i){var n=G[i];if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&i!="type"){H.attr(i,n)}});for(I in G.params){s=new b("param",1);s.shortEnded=true;y=G.params[I];if(I==="src"&&q.name==="WindowsMedia"){I="url"}s.attr({name:I,value:y});H.append(s)}if(this.editor.getParam("media_strict",true)){H.attr({data:G.params.src,type:q.mimes[0]})}else{H.attr({classid:"clsid:"+q.clsids[0],codebase:q.codebase});j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:q.mimes[0]});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});H.append(j)}if(G.object_html){y=new b("#text",3);y.raw=true;y.value=G.object_html;H.append(y)}if(C){C.append(H)}}if(C){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;C.append(y)}}if(F){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;F.append(y)}}var v=C||F||H||j;if(v){z.replace(v)}else{z.remove()}},objectToImg:function(C){var L,k,F,s,M,N,y,A,x,G,E,t,q,I,B,l,K,o,H=this.lookup,m,z,v=this.editor.settings.url_converter,n=this.editor.settings.url_converter_scope,w,r,D,j;function u(i){return new tinymce.html.Serializer({inner:true,validate:false}).serialize(i)}function J(O,i){return H[(O.attr(i)||"").toLowerCase()]}function p(O){var i=O.replace(/^.*\.([^.]+)$/,"$1");return H[i.toLowerCase()||""]}if(!C.parent){return}if(C.name==="script"){if(C.firstChild){m=a.exec(C.firstChild.value)}if(!m){return}o=m[1];K={video:{},params:g.parse(m[2])};A=K.params.width;x=K.params.height}K=K||{video:{},params:{}};M=new b("img",1);M.attr({src:this.editor.theme.url+"/img/trans.gif"});N=C.name;if(N==="video"||N=="audio"){F=C;L=C.getAll("object")[0];k=C.getAll("embed")[0];A=F.attr("width");x=F.attr("height");y=F.attr("id");K.video={attrs:{},sources:[]};z=K.video.attrs;for(N in F.attributes.map){z[N]=F.attributes.map[N]}B=C.attr("src");if(B){K.video.sources.push({src:v.call(n,B,"src",C.name)})}l=F.getAll("source");for(E=0;E<l.length;E++){B=l[E].remove();K.video.sources.push({src:v.call(n,B.attr("src"),"src","source"),type:B.attr("type"),media:B.attr("media")})}if(z.poster){z.poster=v.call(n,z.poster,"poster",C.name)}}if(C.name==="object"){L=C;k=C.getAll("embed")[0]}if(C.name==="embed"){k=C}if(C.name==="iframe"){s=C;o="Iframe"}if(L){A=A||L.attr("width");x=x||L.attr("height");G=G||L.attr("style");y=y||L.attr("id");w=w||L.attr("hspace");r=r||L.attr("vspace");D=D||L.attr("align");j=j||L.attr("bgcolor");K.name=L.attr("name");I=L.getAll("param");for(E=0;E<I.length;E++){q=I[E];N=q.remove().attr("name");if(!h[N]){K.params[N]=q.attr("value")}}K.params.src=K.params.src||L.attr("data")}if(k){A=A||k.attr("width");x=x||k.attr("height");G=G||k.attr("style");y=y||k.attr("id");w=w||k.attr("hspace");r=r||k.attr("vspace");D=D||k.attr("align");j=j||k.attr("bgcolor");for(N in k.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=k.attributes.map[N]}}}if(s){A=s.attr("width");x=s.attr("height");G=G||s.attr("style");y=s.attr("id");w=s.attr("hspace");r=s.attr("vspace");D=s.attr("align");j=s.attr("bgcolor");tinymce.each(d,function(i){M.attr(i,s.attr(i))});for(N in s.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=s.attributes.map[N]}}}if(K.params.movie){K.params.src=K.params.src||K.params.movie;delete K.params.movie}if(K.params.src){K.params.src=v.call(n,K.params.src,"src","object")}if(F){if(C.name==="video"){o=H.video.name}else{if(C.name==="audio"){o=H.audio.name}}}if(L&&!o){o=(J(L,"clsid")||J(L,"classid")||J(L,"type")||{}).name}if(k&&!o){o=(J(k,"type")||p(K.params.src)||{}).name}if(k&&o=="EmbeddedAudio"){K.params.type=k.attr("type")}C.replace(M);if(k){k.remove()}if(L){t=u(L.remove());if(t){K.object_html=t}}if(F){t=u(F.remove());if(t){K.video_html=t}}K.hspace=w;K.vspace=r;K.align=D;K.bgcolor=j;M.attr({id:y,"class":"mceItemMedia mceItem"+(o||"Flash"),style:G,width:A||(C.name=="audio"?"300":"320"),height:x||(C.name=="audio"?"32":"240"),hspace:w,vspace:r,align:D,bgcolor:j,"data-mce-json":g.serialize(K,"'")})}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js
+++ /dev/null
@@ -1,891 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var rootAttributes = tinymce.explode('id,name,width,height,style,align,class,hspace,vspace,bgcolor,type'), excludedAttrs = tinymce.makeMap(rootAttributes.join(',')), Node = tinymce.html.Node,

-		mediaTypes, scriptRegExp, JSON = tinymce.util.JSON, mimeTypes;

-

-	// Media types supported by this plugin

-	mediaTypes = [

-		// Type, clsid:s, mime types, codebase

-		["Flash", "d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],

-		["ShockWave", "166b1bca-3f9c-11cf-8075-444553540000", "application/x-director", "http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],

-		["WindowsMedia", "6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a", "application/x-mplayer2", "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],

-		["QuickTime", "02bf25d5-8c17-4b23-bc80-d3488abddc6b", "video/quicktime", "http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],

-		["RealMedia", "cfcdaa03-8be4-11cf-b84b-0020afbbccfa", "audio/x-pn-realaudio-plugin", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],

-		["Java", "8ad9c840-044e-11d1-b3e9-00805f499d93", "application/x-java-applet", "http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],

-		["Silverlight", "dfeaf541-f3e1-4c24-acac-99c30715084a", "application/x-silverlight-2"],

-		["Iframe"],

-		["Video"],

-		["EmbeddedAudio"],

-		["Audio"]

-	];

-

-	function toArray(obj) {

-		var undef, out, i;

-

-		if (obj && !obj.splice) {

-			out = [];

-

-			for (i = 0; true; i++) {

-				if (obj[i])

-					out[i] = obj[i];

-				else

-					break;

-			}

-

-			return out;

-		}

-

-		return obj;

-	};

-

-	tinymce.create('tinymce.plugins.MediaPlugin', {

-		init : function(ed, url) {

-			var self = this, lookup = {}, i, y, item, name;

-

-			function isMediaImg(node) {

-				return node && node.nodeName === 'IMG' && ed.dom.hasClass(node, 'mceItemMedia');

-			};

-

-			self.editor = ed;

-			self.url = url;

-

-			// Parse media types into a lookup table

-			scriptRegExp = '';

-			for (i = 0; i < mediaTypes.length; i++) {

-				name = mediaTypes[i][0];

-

-				item = {

-					name : name,

-					clsids : tinymce.explode(mediaTypes[i][1] || ''),

-					mimes : tinymce.explode(mediaTypes[i][2] || ''),

-					codebase : mediaTypes[i][3]

-				};

-

-				for (y = 0; y < item.clsids.length; y++)

-					lookup['clsid:' + item.clsids[y]] = item;

-

-				for (y = 0; y < item.mimes.length; y++)

-					lookup[item.mimes[y]] = item;

-

-				lookup['mceItem' + name] = item;

-				lookup[name.toLowerCase()] = item;

-

-				scriptRegExp += (scriptRegExp ? '|' : '') + name;

-			}

-

-			// Handle the media_types setting

-			tinymce.each(ed.getParam("media_types",

-				"video=mp4,m4v,ogv,webm;" +

-				"silverlight=xap;" +

-				"flash=swf,flv;" +

-				"shockwave=dcr;" +

-				"quicktime=mov,qt,mpg,mpeg;" +

-				"shockwave=dcr;" +

-				"windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;" +

-				"realmedia=rm,ra,ram;" +

-				"java=jar;" +

-				"audio=mp3,ogg"

-			).split(';'), function(item) {

-				var i, extensions, type;

-

-				item = item.split(/=/);

-				extensions = tinymce.explode(item[1].toLowerCase());

-				for (i = 0; i < extensions.length; i++) {

-					type = lookup[item[0].toLowerCase()];

-

-					if (type)

-						lookup[extensions[i]] = type;

-				}

-			});

-

-			scriptRegExp = new RegExp('write(' + scriptRegExp + ')\\(([^)]+)\\)');

-			self.lookup = lookup;

-

-			ed.onPreInit.add(function() {

-				// Allow video elements

-				ed.schema.addValidElements('object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]');

-

-				// Convert video elements to image placeholder

-				ed.parser.addNodeFilter('object,embed,video,audio,script,iframe', function(nodes) {

-					var i = nodes.length;

-

-					while (i--)

-						self.objectToImg(nodes[i]);

-				});

-

-				// Convert image placeholders to video elements

-				ed.serializer.addNodeFilter('img', function(nodes, name, args) {

-					var i = nodes.length, node;

-

-					while (i--) {

-						node = nodes[i];

-						if ((node.attr('class') || '').indexOf('mceItemMedia') !== -1)

-							self.imgToObject(node, args);

-					}

-				});

-			});

-

-			ed.onInit.add(function() {

-				// Display "media" instead of "img" in element path

-				if (ed.theme && ed.theme.onResolveName) {

-					ed.theme.onResolveName.add(function(theme, path_object) {

-						if (path_object.name === 'img' && ed.dom.hasClass(path_object.node, 'mceItemMedia'))

-							path_object.name = 'media';

-					});

-				}

-

-				// Add contect menu if it's loaded

-				if (ed && ed.plugins.contextmenu) {

-					ed.plugins.contextmenu.onContextMenu.add(function(plugin, menu, element) {

-						if (element.nodeName === 'IMG' && element.className.indexOf('mceItemMedia') !== -1)

-							menu.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});

-					});

-				}

-			});

-

-			// Register commands

-			ed.addCommand('mceMedia', function() {

-				var data, img;

-

-				img = ed.selection.getNode();

-				if (isMediaImg(img)) {

-					data = ed.dom.getAttrib(img, 'data-mce-json');

-					if (data) {

-						data = JSON.parse(data);

-

-						// Add some extra properties to the data object

-						tinymce.each(rootAttributes, function(name) {

-							var value = ed.dom.getAttrib(img, name);

-

-							if (value)

-								data[name] = value;

-						});

-

-						data.type = self.getType(img.className).name.toLowerCase();

-					}

-				}

-

-				if (!data) {

-					data = {

-						type : 'flash',

-						video: {sources:[]},

-						params: {}

-					};

-				}

-

-				ed.windowManager.open({

-					file : url + '/media.htm',

-					width : 430 + parseInt(ed.getLang('media.delta_width', 0)),

-					height : 500 + parseInt(ed.getLang('media.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url,

-					data : data

-				});

-			});

-

-			// Register buttons

-			ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});

-

-			// Update media selection status

-			ed.onNodeChange.add(function(ed, cm, node) {

-				cm.setActive('media', isMediaImg(node));

-			});

-		},

-

-		convertUrl : function(url, force_absolute) {

-			var self = this, editor = self.editor, settings = editor.settings,

-				urlConverter = settings.url_converter,

-				urlConverterScope = settings.url_converter_scope || self;

-

-			if (!url)

-				return url;

-

-			if (force_absolute)

-				return editor.documentBaseURI.toAbsolute(url);

-

-			return urlConverter.call(urlConverterScope, url, 'src', 'object');

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Media',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		/**

-		 * Converts the JSON data object to an img node.

-		 */

-		dataToImg : function(data, force_absolute) {

-			var self = this, editor = self.editor, baseUri = editor.documentBaseURI, sources, attrs, img, i;

-

-			data.params.src = self.convertUrl(data.params.src, force_absolute);

-

-			attrs = data.video.attrs;

-			if (attrs)

-				attrs.src = self.convertUrl(attrs.src, force_absolute);

-

-			if (attrs)

-				attrs.poster = self.convertUrl(attrs.poster, force_absolute);

-

-			sources = toArray(data.video.sources);

-			if (sources) {

-				for (i = 0; i < sources.length; i++)

-					sources[i].src = self.convertUrl(sources[i].src, force_absolute);

-			}

-

-			img = self.editor.dom.create('img', {

-				id : data.id,

-				style : data.style,

-				align : data.align,

-				hspace : data.hspace,

-				vspace : data.vspace,

-				src : self.editor.theme.url + '/img/trans.gif',

-				'class' : 'mceItemMedia mceItem' + self.getType(data.type).name,

-				'data-mce-json' : JSON.serialize(data, "'")

-			});

-

-			img.width = data.width || (data.type == 'audio' ? "300" : "320");

-			img.height = data.height || (data.type == 'audio' ? "32" : "240");

-

-			return img;

-		},

-

-		/**

-		 * Converts the JSON data object to a HTML string.

-		 */

-		dataToHtml : function(data, force_absolute) {

-			return this.editor.serializer.serialize(this.dataToImg(data, force_absolute), {forced_root_block : '', force_absolute : force_absolute});

-		},

-

-		/**

-		 * Converts the JSON data object to a HTML string.

-		 */

-		htmlToData : function(html) {

-			var fragment, img, data;

-

-			data = {

-				type : 'flash',

-				video: {sources:[]},

-				params: {}

-			};

-

-			fragment = this.editor.parser.parse(html);

-			img = fragment.getAll('img')[0];

-

-			if (img) {

-				data = JSON.parse(img.attr('data-mce-json'));

-				data.type = this.getType(img.attr('class')).name.toLowerCase();

-

-				// Add some extra properties to the data object

-				tinymce.each(rootAttributes, function(name) {

-					var value = img.attr(name);

-

-					if (value)

-						data[name] = value;

-				});

-			}

-

-			return data;

-		},

-

-		/**

-		 * Get type item by extension, class, clsid or mime type.

-		 *

-		 * @method getType

-		 * @param {String} value Value to get type item by.

-		 * @return {Object} Type item object or undefined.

-		 */

-		getType : function(value) {

-			var i, values, typeItem;

-

-			// Find type by checking the classes

-			values = tinymce.explode(value, ' ');

-			for (i = 0; i < values.length; i++) {

-				typeItem = this.lookup[values[i]];

-

-				if (typeItem)

-					return typeItem;

-			}

-		},

-

-		/**

-		 * Converts a tinymce.html.Node image element to video/object/embed.

-		 */

-		imgToObject : function(node, args) {

-			var self = this, editor = self.editor, video, object, embed, iframe, name, value, data,

-				source, sources, params, param, typeItem, i, item, mp4Source, replacement,

-				posterSrc, style, audio;

-

-			// Adds the flash player

-			function addPlayer(video_src, poster_src) {

-				var baseUri, flashVars, flashVarsOutput, params, flashPlayer;

-

-				flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf'));

-				if (flashPlayer) {

-					baseUri = editor.documentBaseURI;

-					data.params.src = flashPlayer;

-

-					// Convert the movie url to absolute urls

-					if (editor.getParam('flash_video_player_absvideourl', true)) {

-						video_src = baseUri.toAbsolute(video_src || '', true);

-						poster_src = baseUri.toAbsolute(poster_src || '', true);

-					}

-

-					// Generate flash vars

-					flashVarsOutput = '';

-					flashVars = editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'});

-					tinymce.each(flashVars, function(value, name) {

-						// Replace $url and $poster variables in flashvars value

-						value = value.replace(/\$url/, video_src || '');

-						value = value.replace(/\$poster/, poster_src || '');

-

-						if (value.length > 0)

-							flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value);

-					});

-

-					if (flashVarsOutput.length)

-						data.params.flashvars = flashVarsOutput;

-

-					params = editor.getParam('flash_video_player_params', {

-						allowfullscreen: true,

-						allowscriptaccess: true

-					});

-

-					tinymce.each(params, function(value, name) {

-						data.params[name] = "" + value;

-					});

-				}

-			};

-

-			data = node.attr('data-mce-json');

-			if (!data)

-				return;

-

-			data = JSON.parse(data);

-			typeItem = this.getType(node.attr('class'));

-

-			style = node.attr('data-mce-style')

-			if (!style) {

-				style = node.attr('style');

-

-				if (style)

-					style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img'));

-			}

-

-			// Handle iframe

-			if (typeItem.name === 'Iframe') {

-				replacement = new Node('iframe', 1);

-

-				tinymce.each(rootAttributes, function(name) {

-					var value = node.attr(name);

-

-					if (name == 'class' && value)

-						value = value.replace(/mceItem.+ ?/g, '');

-

-					if (value && value.length > 0)

-						replacement.attr(name, value);

-				});

-

-				for (name in data.params)

-					replacement.attr(name, data.params[name]);

-

-				replacement.attr({

-					style: style,

-					src: data.params.src

-				});

-

-				node.replace(replacement);

-

-				return;

-			}

-

-			// Handle scripts

-			if (this.editor.settings.media_use_script) {

-				replacement = new Node('script', 1).attr('type', 'text/javascript');

-

-				value = new Node('#text', 3);

-				value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, {

-					width: node.attr('width'),

-					height: node.attr('height')

-				})) + ');';

-

-				replacement.append(value);

-				node.replace(replacement);

-

-				return;

-			}

-

-			// Add HTML5 video element

-			if (typeItem.name === 'Video' && data.video.sources[0]) {

-				// Create new object element

-				video = new Node('video', 1).attr(tinymce.extend({

-					id : node.attr('id'),

-					width: node.attr('width'),

-					height: node.attr('height'),

-					style : style

-				}, data.video.attrs));

-

-				// Get poster source and use that for flash fallback

-				if (data.video.attrs)

-					posterSrc = data.video.attrs.poster;

-

-				sources = data.video.sources = toArray(data.video.sources);

-				for (i = 0; i < sources.length; i++) {

-					if (/\.mp4$/.test(sources[i].src))

-						mp4Source = sources[i].src;

-				}

-

-				if (!sources[0].type) {

-					video.attr('src', sources[0].src);

-					sources.splice(0, 1);

-				}

-

-				for (i = 0; i < sources.length; i++) {

-					source = new Node('source', 1).attr(sources[i]);

-					source.shortEnded = true;

-					video.append(source);

-				}

-

-				// Create flash fallback for video if we have a mp4 source

-				if (mp4Source) {

-					addPlayer(mp4Source, posterSrc);

-					typeItem = self.getType('flash');

-				} else

-					data.params.src = '';

-			}

-

-			// Add HTML5 audio element

-			if (typeItem.name === 'Audio' && data.video.sources[0]) {

-				// Create new object element

-				audio = new Node('audio', 1).attr(tinymce.extend({

-					id : node.attr('id'),

-					width: node.attr('width'),

-					height: node.attr('height'),

-					style : style

-				}, data.video.attrs));

-

-				// Get poster source and use that for flash fallback

-				if (data.video.attrs)

-					posterSrc = data.video.attrs.poster;

-

-				sources = data.video.sources = toArray(data.video.sources);

-				if (!sources[0].type) {

-					audio.attr('src', sources[0].src);

-					sources.splice(0, 1);

-				}

-

-				for (i = 0; i < sources.length; i++) {

-					source = new Node('source', 1).attr(sources[i]);

-					source.shortEnded = true;

-					audio.append(source);

-				}

-

-				data.params.src = '';

-			}

-

-			if (typeItem.name === 'EmbeddedAudio') {

-				embed = new Node('embed', 1);

-				embed.shortEnded = true;

-				embed.attr({

-					id: node.attr('id'),

-					width: node.attr('width'),

-					height: node.attr('height'),

-					style : style,

-					type: node.attr('type')

-				});

-

-				for (name in data.params)

-					embed.attr(name, data.params[name]);

-

-				tinymce.each(rootAttributes, function(name) {

-					if (data[name] && name != 'type')

-						embed.attr(name, data[name]);

-				});

-

-				data.params.src = '';

-			}

-

-			// Do we have a params src then we can generate object

-			if (data.params.src) {

-				// Is flv movie add player for it

-				if (/\.flv$/i.test(data.params.src))

-					addPlayer(data.params.src, '');

-

-				if (args && args.force_absolute)

-					data.params.src = editor.documentBaseURI.toAbsolute(data.params.src);

-

-				// Create new object element

-				object = new Node('object', 1).attr({

-					id : node.attr('id'),

-					width: node.attr('width'),

-					height: node.attr('height'),

-					style : style

-				});

-

-				tinymce.each(rootAttributes, function(name) {

-					var value = data[name];

-

-					if (name == 'class' && value)

-						value = value.replace(/mceItem.+ ?/g, '');

-

-					if (value && name != 'type')

-						object.attr(name, value);

-				});

-

-				// Add params

-				for (name in data.params) {

-					param = new Node('param', 1);

-					param.shortEnded = true;

-					value = data.params[name];

-

-					// Windows media needs to use url instead of src for the media URL

-					if (name === 'src' && typeItem.name === 'WindowsMedia')

-						name = 'url';

-

-					param.attr({name: name, value: value});

-					object.append(param);

-				}

-

-				// Setup add type and classid if strict is disabled

-				if (this.editor.getParam('media_strict', true)) {

-					object.attr({

-						data: data.params.src,

-						type: typeItem.mimes[0]

-					});

-				} else {

-					object.attr({

-						classid: "clsid:" + typeItem.clsids[0],

-						codebase: typeItem.codebase

-					});

-

-					embed = new Node('embed', 1);

-					embed.shortEnded = true;

-					embed.attr({

-						id: node.attr('id'),

-						width: node.attr('width'),

-						height: node.attr('height'),

-						style : style,

-						type: typeItem.mimes[0]

-					});

-

-					for (name in data.params)

-						embed.attr(name, data.params[name]);

-

-					tinymce.each(rootAttributes, function(name) {

-						if (data[name] && name != 'type')

-							embed.attr(name, data[name]);

-					});

-

-					object.append(embed);

-				}

-

-				// Insert raw HTML

-				if (data.object_html) {

-					value = new Node('#text', 3);

-					value.raw = true;

-					value.value = data.object_html;

-					object.append(value);

-				}

-

-				// Append object to video element if it exists

-				if (video)

-					video.append(object);

-			}

-

-			if (video) {

-				// Insert raw HTML

-				if (data.video_html) {

-					value = new Node('#text', 3);

-					value.raw = true;

-					value.value = data.video_html;

-					video.append(value);

-				}

-			}

-

-			if (audio) {

-				// Insert raw HTML

-				if (data.video_html) {

-					value = new Node('#text', 3);

-					value.raw = true;

-					value.value = data.video_html;

-					audio.append(value);

-				}

-			}

-

-			var n = video || audio || object || embed;

-			if (n)

-				node.replace(n);

-			else

-				node.remove();

-		},

-

-		/**

-		 * Converts a tinymce.html.Node video/object/embed to an img element.

-		 *

-		 * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this:

-		 * <img class="mceItemMedia mceItemFlash" width="100" height="100" data-mce-json="{..}" />

-		 *

-		 * The JSON structure will be like this:

-		 * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}}

-		 */

-		objectToImg : function(node) {

-			var object, embed, video, iframe, img, name, id, width, height, style, i, html,

-				param, params, source, sources, data, type, lookup = this.lookup,

-				matches, attrs, urlConverter = this.editor.settings.url_converter,

-				urlConverterScope = this.editor.settings.url_converter_scope,

-				hspace, vspace, align, bgcolor;

-

-			function getInnerHTML(node) {

-				return new tinymce.html.Serializer({

-					inner: true,

-					validate: false

-				}).serialize(node);

-			};

-

-			function lookupAttribute(o, attr) {

-				return lookup[(o.attr(attr) || '').toLowerCase()];

-			}

-

-			function lookupExtension(src) {

-				var ext = src.replace(/^.*\.([^.]+)$/, '$1');

-				return lookup[ext.toLowerCase() || ''];

-			}

-

-			// If node isn't in document

-			if (!node.parent)

-				return;

-

-			// Handle media scripts

-			if (node.name === 'script') {

-				if (node.firstChild)

-					matches = scriptRegExp.exec(node.firstChild.value);

-

-				if (!matches)

-					return;

-

-				type = matches[1];

-				data = {video : {}, params : JSON.parse(matches[2])};

-				width = data.params.width;

-				height = data.params.height;

-			}

-

-			// Setup data objects

-			data = data || {

-				video : {},

-				params : {}

-			};

-

-			// Setup new image object

-			img = new Node('img', 1);

-			img.attr({

-				src : this.editor.theme.url + '/img/trans.gif'

-			});

-

-			// Video element

-			name = node.name;

-			if (name === 'video' || name == 'audio') {

-				video = node;

-				object = node.getAll('object')[0];

-				embed = node.getAll('embed')[0];

-				width = video.attr('width');

-				height = video.attr('height');

-				id = video.attr('id');

-				data.video = {attrs : {}, sources : []};

-

-				// Get all video attributes

-				attrs = data.video.attrs;

-				for (name in video.attributes.map)

-					attrs[name] = video.attributes.map[name];

-

-				source = node.attr('src');

-				if (source)

-					data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)});

-

-				// Get all sources

-				sources = video.getAll("source");

-				for (i = 0; i < sources.length; i++) {

-					source = sources[i].remove();

-

-					data.video.sources.push({

-						src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'),

-						type: source.attr('type'),

-						media: source.attr('media')

-					});

-				}

-

-				// Convert the poster URL

-				if (attrs.poster)

-					attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name);

-			}

-

-			// Object element

-			if (node.name === 'object') {

-				object = node;

-				embed = node.getAll('embed')[0];

-			}

-

-			// Embed element

-			if (node.name === 'embed')

-				embed = node;

-

-			// Iframe element

-			if (node.name === 'iframe') {

-				iframe = node;

-				type = 'Iframe';

-			}

-

-			if (object) {

-				// Get width/height

-				width = width || object.attr('width');

-				height = height || object.attr('height');

-				style = style || object.attr('style');

-				id = id || object.attr('id');

-				hspace = hspace || object.attr('hspace');

-				vspace = vspace || object.attr('vspace');

-				align = align || object.attr('align');

-				bgcolor = bgcolor || object.attr('bgcolor');

-				data.name = object.attr('name');

-

-				// Get all object params

-				params = object.getAll("param");

-				for (i = 0; i < params.length; i++) {

-					param = params[i];

-					name = param.remove().attr('name');

-

-					if (!excludedAttrs[name])

-						data.params[name] = param.attr('value');

-				}

-

-				data.params.src = data.params.src || object.attr('data');

-			}

-

-			if (embed) {

-				// Get width/height

-				width = width || embed.attr('width');

-				height = height || embed.attr('height');

-				style = style || embed.attr('style');

-				id = id || embed.attr('id');

-				hspace = hspace || embed.attr('hspace');

-				vspace = vspace || embed.attr('vspace');

-				align = align || embed.attr('align');

-				bgcolor = bgcolor || embed.attr('bgcolor');

-

-				// Get all embed attributes

-				for (name in embed.attributes.map) {

-					if (!excludedAttrs[name] && !data.params[name])

-						data.params[name] = embed.attributes.map[name];

-				}

-			}

-

-			if (iframe) {

-				// Get width/height

-				width = iframe.attr('width');

-				height = iframe.attr('height');

-				style = style || iframe.attr('style');

-				id = iframe.attr('id');

-				hspace = iframe.attr('hspace');

-				vspace = iframe.attr('vspace');

-				align = iframe.attr('align');

-				bgcolor = iframe.attr('bgcolor');

-

-				tinymce.each(rootAttributes, function(name) {

-					img.attr(name, iframe.attr(name));

-				});

-

-				// Get all iframe attributes

-				for (name in iframe.attributes.map) {

-					if (!excludedAttrs[name] && !data.params[name])

-						data.params[name] = iframe.attributes.map[name];

-				}

-			}

-

-			// Use src not movie

-			if (data.params.movie) {

-				data.params.src = data.params.src || data.params.movie;

-				delete data.params.movie;

-			}

-

-			// Convert the URL to relative/absolute depending on configuration

-			if (data.params.src)

-				data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object');

-

-			if (video) {

-				if (node.name === 'video')

-					type = lookup.video.name;

-				else if (node.name === 'audio')

-					type = lookup.audio.name;

-			}

-

-			if (object && !type)

-				type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name;

-

-			if (embed && !type)

-				type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name;

-

-			// for embedded audio we preserve the original specified type

-			if (embed && type == 'EmbeddedAudio') {

-				data.params.type = embed.attr('type');

-			}

-

-			// Replace the video/object/embed element with a placeholder image containing the data

-			node.replace(img);

-

-			// Remove embed

-			if (embed)

-				embed.remove();

-

-			// Serialize the inner HTML of the object element

-			if (object) {

-				html = getInnerHTML(object.remove());

-

-				if (html)

-					data.object_html = html;

-			}

-

-			// Serialize the inner HTML of the video element

-			if (video) {

-				html = getInnerHTML(video.remove());

-

-				if (html)

-					data.video_html = html;

-			}

-

-			data.hspace = hspace;

-			data.vspace = vspace;

-			data.align = align;

-			data.bgcolor = bgcolor;

-

-			// Set width/height of placeholder

-			img.attr({

-				id : id,

-				'class' : 'mceItemMedia mceItem' + (type || 'Flash'),

-				style : style,

-				width : width || (node.name == 'audio' ? "300" : "320"),

-				height : height || (node.name == 'audio' ? "32" : "240"),

-				hspace : hspace,

-				vspace : vspace,

-				align : align,

-				bgcolor : bgcolor,

-				"data-mce-json" : JSON.serialize(data, "'")

-			});

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js
+++ /dev/null
@@ -1,74 +1,1 @@
-/**

- * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.

- */

-

-function writeFlash(p) {

-	writeEmbed(

-		'D27CDB6E-AE6D-11cf-96B8-444553540000',

-		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

-		'application/x-shockwave-flash',

-		p

-	);

-}

-

-function writeShockWave(p) {

-	writeEmbed(

-	'166B1BCA-3F9C-11CF-8075-444553540000',

-	'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',

-	'application/x-director',

-		p

-	);

-}

-

-function writeQuickTime(p) {

-	writeEmbed(

-		'02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',

-		'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',

-		'video/quicktime',

-		p

-	);

-}

-

-function writeRealMedia(p) {

-	writeEmbed(

-		'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',

-		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

-		'audio/x-pn-realaudio-plugin',

-		p

-	);

-}

-

-function writeWindowsMedia(p) {

-	p.url = p.src;

-	writeEmbed(

-		'6BF52A52-394A-11D3-B153-00C04F79FAA6',

-		'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',

-		'application/x-mplayer2',

-		p

-	);

-}

-

-function writeEmbed(cls, cb, mt, p) {

-	var h = '', n;

-

-	h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';

-	h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';

-	h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';

-	h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';

-	h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';

-	h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';

-	h += '>';

-

-	for (n in p)

-		h += '<param name="' + n + '" value="' + p[n] + '">';

-

-	h += '<embed type="' + mt + '"';

-

-	for (n in p)

-		h += n + '="' + p[n] + '" ';

-

-	h += '></embed></object>';

-

-	document.write(h);

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/media/js/media.js
+++ /dev/null
@@ -1,465 +1,1 @@
-(function() {

-	var url;

-

-	if (url = tinyMCEPopup.getParam("media_external_list_url"))

-		document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

-

-	function get(id) {

-		return document.getElementById(id);

-	}

-

-	function clone(obj) {

-		var i, len, copy, attr;

-

-		if (null == obj || "object" != typeof obj)

-			return obj;

-

-		// Handle Array

-		if ('length' in obj) {

-			copy = [];

-

-			for (i = 0, len = obj.length; i < len; ++i) {

-				copy[i] = clone(obj[i]);

-			}

-

-			return copy;

-		}

-

-		// Handle Object

-		copy = {};

-		for (attr in obj) {

-			if (obj.hasOwnProperty(attr))

-				copy[attr] = clone(obj[attr]);

-		}

-

-		return copy;

-	}

-

-	function getVal(id) {

-		var elm = get(id);

-

-		if (elm.nodeName == "SELECT")

-			return elm.options[elm.selectedIndex].value;

-

-		if (elm.type == "checkbox")

-			return elm.checked;

-

-		return elm.value;

-	}

-

-	function setVal(id, value, name) {

-		if (typeof(value) != 'undefined' && value != null) {

-			var elm = get(id);

-

-			if (elm.nodeName == "SELECT")

-				selectByValue(document.forms[0], id, value);

-			else if (elm.type == "checkbox") {

-				if (typeof(value) == 'string') {

-					value = value.toLowerCase();

-					value = (!name && value === 'true') || (name && value === name.toLowerCase());

-				}

-				elm.checked = !!value;

-			} else

-				elm.value = value;

-		}

-	}

-

-	window.Media = {

-		init : function() {

-			var html, editor, self = this;

-

-			self.editor = editor = tinyMCEPopup.editor;

-

-			// Setup file browsers and color pickers

-			get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');

-			get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media');

-			get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

-			get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource1','video_altsource1','media','media');

-			get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource2','video_altsource2','media','media');

-			get('audio_altsource1_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource1','audio_altsource1','media','media');

-			get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media');

-			get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','media','image');

-

-			html = self.getMediaListHTML('medialist', 'src', 'media', 'media');

-			if (html == "")

-				get("linklistrow").style.display = 'none';

-			else

-				get("linklistcontainer").innerHTML = html;

-

-			if (isVisible('filebrowser'))

-				get('src').style.width = '230px';

-

-			if (isVisible('video_filebrowser_altsource1'))

-				get('video_altsource1').style.width = '220px';

-

-			if (isVisible('video_filebrowser_altsource2'))

-				get('video_altsource2').style.width = '220px';

-

-			if (isVisible('audio_filebrowser_altsource1'))

-				get('audio_altsource1').style.width = '220px';

-

-			if (isVisible('audio_filebrowser_altsource2'))

-				get('audio_altsource2').style.width = '220px';

-

-			if (isVisible('filebrowser_poster'))

-				get('video_poster').style.width = '220px';

-

-			editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor));

-

-			self.setDefaultDialogSettings(editor);

-			self.data = clone(tinyMCEPopup.getWindowArg('data'));

-			self.dataToForm();

-			self.preview();

-

-			updateColor('bgcolor_pick', 'bgcolor');

-		},

-

-		insert : function() {

-			var editor = tinyMCEPopup.editor;

-

-			this.formToData();

-			editor.execCommand('mceRepaint');

-			tinyMCEPopup.restoreSelection();

-			editor.selection.setNode(editor.plugins.media.dataToImg(this.data));

-			tinyMCEPopup.close();

-		},

-

-		preview : function() {

-			get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true);

-		},

-

-		moveStates : function(to_form, field) {

-			var data = this.data, editor = this.editor,

-				mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src;

-

-			defaultStates = {

-				// QuickTime

-				quicktime_autoplay : true,

-				quicktime_controller : true,

-

-				// Flash

-				flash_play : true,

-				flash_loop : true,

-				flash_menu : true,

-

-				// WindowsMedia

-				windowsmedia_autostart : true,

-				windowsmedia_enablecontextmenu : true,

-				windowsmedia_invokeurls : true,

-

-				// RealMedia

-				realmedia_autogotourl : true,

-				realmedia_imagestatus : true

-			};

-

-			function parseQueryParams(str) {

-				var out = {};

-

-				if (str) {

-					tinymce.each(str.split('&'), function(item) {

-						var parts = item.split('=');

-

-						out[unescape(parts[0])] = unescape(parts[1]);

-					});

-				}

-

-				return out;

-			};

-

-			function setOptions(type, names) {

-				var i, name, formItemName, value, list;

-

-				if (type == data.type || type == 'global') {

-					names = tinymce.explode(names);

-					for (i = 0; i < names.length; i++) {

-						name = names[i];

-						formItemName = type == 'global' ? name : type + '_' + name;

-

-						if (type == 'global')

-						list = data;

-					else if (type == 'video' || type == 'audio') {

-							list = data.video.attrs;

-

-							if (!list && !to_form)

-							data.video.attrs = list = {};

-						} else

-						list = data.params;

-

-						if (list) {

-							if (to_form) {

-								setVal(formItemName, list[name], type == 'video' || type == 'audio' ? name : '');

-							} else {

-								delete list[name];

-

-								value = getVal(formItemName);

-								if ((type == 'video' || type == 'audio') && value === true)

-									value = name;

-

-								if (defaultStates[formItemName]) {

-									if (value !== defaultStates[formItemName]) {

-										value = "" + value;

-										list[name] = value;

-									}

-								} else if (value) {

-									value = "" + value;

-									list[name] = value;

-								}

-							}

-						}

-					}

-				}

-			}

-

-			if (!to_form) {

-				data.type = get('media_type').options[get('media_type').selectedIndex].value;

-				data.width = getVal('width');

-				data.height = getVal('height');

-

-				// Switch type based on extension

-				src = getVal('src');

-				if (field == 'src') {

-					ext = src.replace(/^.*\.([^.]+)$/, '$1');

-					if (typeInfo = mediaPlugin.getType(ext))

-						data.type = typeInfo.name.toLowerCase();

-

-					setVal('media_type', data.type);

-				}

-

-				if (data.type == "video" || data.type == "audio") {

-					if (!data.video.sources)

-						data.video.sources = [];

-

-					data.video.sources[0] = {src: getVal('src')};

-				}

-			}

-

-			// Hide all fieldsets and show the one active

-			get('video_options').style.display = 'none';

-			get('audio_options').style.display = 'none';

-			get('flash_options').style.display = 'none';

-			get('quicktime_options').style.display = 'none';

-			get('shockwave_options').style.display = 'none';

-			get('windowsmedia_options').style.display = 'none';

-			get('realmedia_options').style.display = 'none';

-			get('embeddedaudio_options').style.display = 'none';

-

-			if (get(data.type + '_options'))

-				get(data.type + '_options').style.display = 'block';

-

-			setVal('media_type', data.type);

-

-			setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars');

-			setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc');

-			setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign');

-			setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume');

-			setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks');

-			setOptions('video', 'poster,autoplay,loop,muted,preload,controls');

-			setOptions('audio', 'autoplay,loop,preload,controls');

-			setOptions('embeddedaudio', 'autoplay,loop,controls');

-			setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height');

-

-			if (to_form) {

-				if (data.type == 'video') {

-					if (data.video.sources[0])

-						setVal('src', data.video.sources[0].src);

-

-					src = data.video.sources[1];

-					if (src)

-						setVal('video_altsource1', src.src);

-

-					src = data.video.sources[2];

-					if (src)

-						setVal('video_altsource2', src.src);

-                } else if (data.type == 'audio') {

-                    if (data.video.sources[0])

-                        setVal('src', data.video.sources[0].src);

-                    

-                    src = data.video.sources[1];

-                    if (src)

-                        setVal('audio_altsource1', src.src);

-                    

-                    src = data.video.sources[2];

-                    if (src)

-                        setVal('audio_altsource2', src.src);

-				} else {

-					// Check flash vars

-					if (data.type == 'flash') {

-						tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) {

-							if (value == '$url')

-								data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || '';

-						});

-					}

-

-					setVal('src', data.params.src);

-				}

-			} else {

-				src = getVal("src");

-

-				// YouTube *NEW*

-				if (src.match(/youtu.be\/[a-z1-9.-_]+/)) {

-					data.width = 425;

-					data.height = 350;

-					data.params.frameborder = '0';

-					data.type = 'iframe';

-					src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1];

-					setVal('src', src);

-					setVal('media_type', data.type);

-				}

-

-				// YouTube

-				if (src.match(/youtube.com(.+)v=([^&]+)/)) {

-					data.width = 425;

-					data.height = 350;

-					data.params.frameborder = '0';

-					data.type = 'iframe';

-					src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1];

-					setVal('src', src);

-					setVal('media_type', data.type);

-				}

-

-				// Google video

-				if (src.match(/video.google.com(.+)docid=([^&]+)/)) {

-					data.width = 425;

-					data.height = 326;

-					data.type = 'flash';

-					src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en';

-					setVal('src', src);

-					setVal('media_type', data.type);

-				}

-

-				if (data.type == 'video') {

-					if (!data.video.sources)

-						data.video.sources = [];

-

-					data.video.sources[0] = {src : src};

-

-					src = getVal("video_altsource1");

-					if (src)

-						data.video.sources[1] = {src : src};

-

-					src = getVal("video_altsource2");

-					if (src)

-						data.video.sources[2] = {src : src};

-                } else if (data.type == 'audio') {

-                    if (!data.video.sources)

-                        data.video.sources = [];

-                    

-                    data.video.sources[0] = {src : src};

-                    

-                    src = getVal("audio_altsource1");

-                    if (src)

-                        data.video.sources[1] = {src : src};

-                    

-                    src = getVal("audio_altsource2");

-                    if (src)

-                        data.video.sources[2] = {src : src};

-				} else

-					data.params.src = src;

-

-				// Set default size

-                setVal('width', data.width || (data.type == 'audio' ? 300 : 320));

-                setVal('height', data.height || (data.type == 'audio' ? 32 : 240));

-			}

-		},

-

-		dataToForm : function() {

-			this.moveStates(true);

-		},

-

-		formToData : function(field) {

-			if (field == "width" || field == "height")

-				this.changeSize(field);

-

-			if (field == 'source') {

-				this.moveStates(false, field);

-				setVal('source', this.editor.plugins.media.dataToHtml(this.data));

-				this.panel = 'source';

-			} else {

-				if (this.panel == 'source') {

-					this.data = clone(this.editor.plugins.media.htmlToData(getVal('source')));

-					this.dataToForm();

-					this.panel = '';

-				}

-

-				this.moveStates(false, field);

-				this.preview();

-			}

-		},

-

-		beforeResize : function() {

-            this.width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);

-            this.height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);

-		},

-

-		changeSize : function(type) {

-			var width, height, scale, size;

-

-			if (get('constrain').checked) {

-                width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);

-                height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);

-

-				if (type == 'width') {

-					this.height = Math.round((width / this.width) * height);

-					setVal('height', this.height);

-				} else {

-					this.width = Math.round((height / this.height) * width);

-					setVal('width', this.width);

-				}

-			}

-		},

-

-		getMediaListHTML : function() {

-			if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {

-				var html = "";

-

-				html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;Media.formToData(\'src\');">';

-				html += '<option value="">---</option>';

-

-				for (var i=0; i<tinyMCEMediaList.length; i++)

-					html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';

-

-				html += '</select>';

-

-				return html;

-			}

-

-			return "";

-		},

-

-		getMediaTypeHTML : function(editor) {

-			function option(media_type){

-				return '<option value="'+media_type+'">'+tinyMCEPopup.editor.translate("media_dlg."+media_type)+'</option>'

-			}

-			var html = "";

-			html += '<select id="media_type" name="media_type" onchange="Media.formToData(\'type\');">';

-			html += option("video");

-			html += option("audio");

-			html += option("flash");

-			html += option("quicktime");

-			html += option("shockwave");

-			html += option("windowsmedia");

-			html += option("realmedia");

-			html += option("iframe");

-

-			if (editor.getParam('media_embedded_audio', false)) {

-				html += option('embeddedaudio');

-			}

-			

-			html += '</select>';

-			return html;

-		},

-

-		setDefaultDialogSettings : function(editor) {

-			var defaultDialogSettings = editor.getParam("media_dialog_defaults", {});

-			tinymce.each(defaultDialogSettings, function(v, k) {

-				setVal(k, v);

-			});

-		}

-	};

-

-	tinyMCEPopup.requireLangPack();

-	tinyMCEPopup.onInit.add(function() {

-		Media.init();

-	});

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js
+++ /dev/null
@@ -1,2 +1,1 @@
-tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide", "embedded_audio_options":"Embedded Audio Options", video:"HTML5 Video", audio:"HTML5 Audio", flash:"Flash", quicktime:"QuickTime", shockwave:"Shockwave", windowsmedia:"Windows Media", realmedia:"Real Media", iframe:"Iframe", embeddedaudio:"Embedded Audio" }); 
 

--- a/tinymce/jscripts/tiny_mce/plugins/media/media.htm
+++ /dev/null
@@ -1,923 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#media_dlg.title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/media.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<link href="css/media.css" rel="stylesheet" type="text/css" />

-</head>

-<body style="display: none" role="application">

-<form onsubmit="Media.insert();return false;" action="#">

-		<div class="tabs" role="presentation">

-			<ul>

-				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.general}</a></span></li>

-				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>

-				<li id="source_tab" aria-controls="source_panel"><span><a href="javascript:mcTabs.displayTab('source_tab','source_panel');Media.formToData('source');" onmousedown="return false;">{#media_dlg.source}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="general_panel" class="panel current">

-				<fieldset>

-					<legend>{#media_dlg.general}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-							<tr>

-								<td><label for="media_type">{#media_dlg.type}</label></td>

-								<td>

-									<select id="media_type"></select>

-								</td>

-							</tr>

-							<tr>

-							<td><label for="src">{#media_dlg.file}</label></td>

-								<td>

-									<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="Media.formToData();" /></td>

-										<td id="filebrowsercontainer">&nbsp;</td>

-									</tr>

-									</table>

-								</td>

-							</tr>

-							<tr id="linklistrow">

-								<td><label for="linklist">{#media_dlg.list}</label></td>

-								<td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>

-							</tr>

-							<tr>

-								<td><label for="width">{#media_dlg.size}</label></td>

-								<td>

-									<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-										<tr>

-											<td><input type="text" id="width" name="width" value="" class="size" onchange="Media.formToData('width');" onfocus="Media.beforeResize();" /> x <input type="text" id="height" name="height" value="" class="size" onfocus="Media.beforeResize();" onchange="Media.formToData('height');" /></td>

-											<td>&nbsp;&nbsp;<input id="constrain" type="checkbox" name="constrain" class="checkbox" checked="checked" /></td>

-											<td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>

-										</tr>

-									</table>

-								</td>

-							</tr>

-					</table>

-				</fieldset>

-

-				<fieldset>

-					<legend>{#media_dlg.preview}</legend>

-					<div id="prev"></div>

-				</fieldset>

-			</div>

-

-			<div id="advanced_panel" class="panel">

-				<fieldset>

-					<legend>{#media_dlg.advanced}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">

-						<tr>

-							<td><label for="id">{#media_dlg.id}</label></td>

-							<td><input type="text" id="id" name="id" onchange="Media.formToData();" /></td>

-							<td><label for="name">{#media_dlg.name}</label></td>

-							<td><input type="text" id="name" name="name" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="align">{#media_dlg.align}</label></td>

-							<td>

-								<select id="align" name="align" onchange="Media.formToData();">

-									<option value="">{#not_set}</option> 

-									<option value="top">{#media_dlg.align_top}</option>

-									<option value="right">{#media_dlg.align_right}</option>

-									<option value="bottom">{#media_dlg.align_bottom}</option>

-									<option value="left">{#media_dlg.align_left}</option>

-								</select>

-							</td>

-

-							<td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');Media.formToData();" /></td>

-										<td id="bgcolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="vspace">{#media_dlg.vspace}</label></td>

-							<td><input type="text" id="vspace" name="vspace" class="number" onchange="Media.formToData();" /></td>

-							<td><label for="hspace">{#media_dlg.hspace}</label></td>

-							<td><input type="text" id="hspace" name="hspace" class="number" onchange="Media.formToData();" /></td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset id="video_options">

-					<legend>{#media_dlg.html5_video_options}</legend>

-

-					<table role="presentation">

-						<tr>

-							<td><label for="video_altsource1">{#media_dlg.altsource1}</label></td>

-							<td>

-								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input type="text" id="video_altsource1" name="video_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>

-										<td id="video_altsource1_filebrowser">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="video_altsource2">{#media_dlg.altsource2}</label></td>

-							<td>

-								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input type="text" id="video_altsource2" name="video_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>

-										<td id="video_altsource2_filebrowser">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="video_poster">{#media_dlg.poster}</label></td>

-							<td>

-								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input type="text" id="video_poster" name="video_poster" onchange="Media.formToData();" style="width: 240px" /></td>

-										<td id="video_poster_filebrowser">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="video_preload">{#media_dlg.preload}</label></td>

-							<td>

-								<select id="video_preload" name="video_preload" onchange="Media.formToData();">

-									<option value="none">{#media_dlg.preload_none}</option> 

-									<option value="metadata">{#media_dlg.preload_metadata}</option>

-									<option value="auto">{#media_dlg.preload_auto}</option>

-								</select>

-							</td>

-						</tr>

-					</table>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="video_autoplay" name="video_autoplay" onchange="Media.formToData();" /></td>

-										<td><label for="video_autoplay">{#media_dlg.play}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="video_muted" name="video_muted" onchange="Media.formToData();" /></td>

-										<td><label for="video_muted">{#media_dlg.mute}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td>

-									<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-											<tr>

-													<td><input type="checkbox" class="checkbox" id="video_loop" name="video_loop" onchange="Media.formToData();" /></td>

-													<td><label for="video_loop">{#media_dlg.loop}</label></td>

-											</tr>

-									</table>

-							</td>

-

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="video_controls" name="video_controls" onchange="Media.formToData();" /></td>

-										<td><label for="video_controls">{#media_dlg.controls}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset id="embeddedaudio_options">

-					<legend>{#media_dlg.embedded_audio_options}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="embeddedaudio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>

-										<td><label for="audio_autoplay">{#media_dlg.play}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="embeddedaudio_loop" name="audio_loop" onchange="Media.formToData();" /></td>

-										<td><label for="audio_loop">{#media_dlg.loop}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="embeddedaudio_controls" name="audio_controls" onchange="Media.formToData();" /></td>

-										<td><label for="audio_controls">{#media_dlg.controls}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset id="audio_options">

-					<legend>{#media_dlg.html5_audio_options}</legend>

-

-					<table role="presentation">

-						<tr>

-							<td><label for="audio_altsource1">{#media_dlg.altsource1}</label></td>

-							<td>

-								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input type="text" id="audio_altsource1" name="audio_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>

-										<td id="audio_altsource1_filebrowser">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="audio_altsource2">{#media_dlg.altsource2}</label></td>

-							<td>

-								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input type="text" id="audio_altsource2" name="audio_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>

-										<td id="audio_altsource2_filebrowser">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="audio_preload">{#media_dlg.preload}</label></td>

-							<td>

-								<select id="audio_preload" name="audio_preload" onchange="Media.formToData();">

-									<option value="none">{#media_dlg.preload_none}</option>

-									<option value="metadata">{#media_dlg.preload_metadata}</option>

-									<option value="auto">{#media_dlg.preload_auto}</option>

-								</select>

-							</td>

-						</tr>

-					</table>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="audio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>

-										<td><label for="audio_autoplay">{#media_dlg.play}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="audio_loop" name="audio_loop" onchange="Media.formToData();" /></td>

-										<td><label for="audio_loop">{#media_dlg.loop}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="audio_controls" name="audio_controls" onchange="Media.formToData();" /></td>

-										<td><label for="audio_controls">{#media_dlg.controls}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset id="flash_options">

-					<legend>{#media_dlg.flash_options}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td><label for="flash_quality">{#media_dlg.quality}</label></td>

-							<td>

-								<select id="flash_quality" name="flash_quality" onchange="Media.formToData();">

-									<option value="">{#not_set}</option> 

-									<option value="high">high</option>

-									<option value="low">low</option>

-									<option value="autolow">autolow</option>

-									<option value="autohigh">autohigh</option>

-									<option value="best">best</option>

-								</select>

-							</td>

-

-							<td><label for="flash_scale">{#media_dlg.scale}</label></td>

-							<td>

-								<select id="flash_scale" name="flash_scale" onchange="Media.formToData();">

-									<option value="">{#not_set}</option> 

-									<option value="showall">showall</option>

-									<option value="noborder">noborder</option>

-									<option value="exactfit">exactfit</option>

-									<option value="noscale">noscale</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="flash_wmode">{#media_dlg.wmode}</label></td>

-							<td>

-								<select id="flash_wmode" name="flash_wmode" onchange="Media.formToData();">

-									<option value="">{#not_set}</option> 

-									<option value="window">window</option>

-									<option value="opaque">opaque</option>

-									<option value="transparent">transparent</option>

-								</select>

-							</td>

-

-							<td><label for="flash_salign">{#media_dlg.salign}</label></td>

-							<td>

-								<select id="flash_salign" name="flash_salign" onchange="Media.formToData();">

-									<option value="">{#not_set}</option> 

-									<option value="l">{#media_dlg.align_left}</option>

-									<option value="t">{#media_dlg.align_top}</option>

-									<option value="r">{#media_dlg.align_right}</option>

-									<option value="b">{#media_dlg.align_bottom}</option>

-									<option value="tl">{#media_dlg.align_top_left}</option>

-									<option value="tr">{#media_dlg.align_top_right}</option>

-									<option value="bl">{#media_dlg.align_bottom_left}</option>

-									<option value="br">{#media_dlg.align_bottom_right}</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="flash_play">{#media_dlg.play}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="flash_loop">{#media_dlg.loop}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="flash_menu">{#media_dlg.menu}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="Media.formToData();" /></td>

-										<td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-					</table>

-

-					<table role="presentation">

-						<tr>

-							<td><label for="flash_base">{#media_dlg.base}</label></td>

-							<td><input type="text" id="flash_base" name="flash_base" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>

-							<td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="Media.formToData();" /></td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset id="quicktime_options">

-					<legend>{#media_dlg.qt_options}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_loop" name="quicktime_loop" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_loop">{#media_dlg.loop}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_autoplay" name="quicktime_autoplay" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_autoplay">{#media_dlg.play}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_cache" name="quicktime_cache" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_cache">{#media_dlg.cache}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_controller" name="quicktime_controller" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_controller">{#media_dlg.controller}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_correction" name="quicktime_correction" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_correction">{#media_dlg.correction}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_enablejavascript" name="quicktime_enablejavascript" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_enablejavascript">{#media_dlg.enablejavascript}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_kioskmode" name="quicktime_kioskmode" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_kioskmode">{#media_dlg.kioskmode}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_autohref" name="quicktime_autohref" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_autohref">{#media_dlg.autohref}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_playeveryframe" name="quicktime_playeveryframe" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_playeveryframe">{#media_dlg.playeveryframe}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="quicktime_targetcache" name="quicktime_targetcache" onchange="Media.formToData();" /></td>

-										<td><label for="quicktime_targetcache">{#media_dlg.targetcache}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="quicktime_scale">{#media_dlg.scale}</label></td>

-							<td><select id="quicktime_scale" name="quicktime_scale" class="mceEditableSelect" onchange="Media.formToData();">

-									<option value="">{#not_set}</option> 

-									<option value="tofit">tofit</option>

-									<option value="aspect">aspect</option>

-								</select>

-							</td>

-

-							<td colspan="2">&nbsp;</td>

-						</tr>

-

-						<tr>

-							<td><label for="quicktime_starttime">{#media_dlg.starttime}</label></td>

-							<td><input type="text" id="quicktime_starttime" name="quicktime_starttime" onchange="Media.formToData();" /></td>

-

-							<td><label for="quicktime_endtime">{#media_dlg.endtime}</label></td>

-							<td><input type="text" id="quicktime_endtime" name="quicktime_endtime" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="quicktime_target">{#media_dlg.target}</label></td>

-							<td><input type="text" id="quicktime_target" name="quicktime_target" onchange="Media.formToData();" /></td>

-

-							<td><label for="quicktime_href">{#media_dlg.href}</label></td>

-							<td><input type="text" id="quicktime_href" name="quicktime_href" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="quicktime_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>

-							<td><input type="text" id="quicktime_qtsrcchokespeed" name="quicktime_qtsrcchokespeed" onchange="Media.formToData();" /></td>

-

-							<td><label for="quicktime_volume">{#media_dlg.volume}</label></td>

-							<td><input type="text" id="quicktime_volume" name="quicktime_volume" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="quicktime_qtsrc">{#media_dlg.qtsrc}</label></td>

-							<td colspan="4">

-								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-									<tr>

-										<td><input type="text" id="quicktime_qtsrc" name="quicktime_qtsrc" onchange="Media.formToData();" /></td>

-										<td id="qtsrcfilebrowsercontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset id="windowsmedia_options">

-					<legend>{#media_dlg.wmp_options}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_autostart" name="windowsmedia_autostart" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_autostart">{#media_dlg.autostart}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_enabled" name="windowsmedia_enabled" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_enabled">{#media_dlg.enabled}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_enablecontextmenu" name="windowsmedia_enablecontextmenu" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_enablecontextmenu">{#media_dlg.menu}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_fullscreen" name="windowsmedia_fullscreen" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_fullscreen">{#media_dlg.fullscreen}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_invokeurls" name="windowsmedia_invokeurls" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_invokeurls">{#media_dlg.invokeurls}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_mute" name="windowsmedia_mute" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_mute">{#media_dlg.mute}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_stretchtofit" name="windowsmedia_stretchtofit" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_stretchtofit">{#media_dlg.stretchtofit}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="windowsmedia_windowlessvideo" name="windowsmedia_windowlessvideo" onchange="Media.formToData();" /></td>

-										<td><label for="windowsmedia_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="windowsmedia_balance">{#media_dlg.balance}</label></td>

-							<td><input type="text" id="windowsmedia_balance" name="windowsmedia_balance" onchange="Media.formToData();" /></td>

-

-							<td><label for="windowsmedia_baseurl">{#media_dlg.baseurl}</label></td>

-							<td><input type="text" id="windowsmedia_baseurl" name="windowsmedia_baseurl" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="windowsmedia_captioningid">{#media_dlg.captioningid}</label></td>

-							<td><input type="text" id="windowsmedia_captioningid" name="windowsmedia_captioningid" onchange="Media.formToData();" /></td>

-

-							<td><label for="windowsmedia_currentmarker">{#media_dlg.currentmarker}</label></td>

-							<td><input type="text" id="windowsmedia_currentmarker" name="windowsmedia_currentmarker" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="windowsmedia_currentposition">{#media_dlg.currentposition}</label></td>

-							<td><input type="text" id="windowsmedia_currentposition" name="windowsmedia_currentposition" onchange="Media.formToData();" /></td>

-

-							<td><label for="windowsmedia_defaultframe">{#media_dlg.defaultframe}</label></td>

-							<td><input type="text" id="windowsmedia_defaultframe" name="windowsmedia_defaultframe" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="windowsmedia_playcount">{#media_dlg.playcount}</label></td>

-							<td><input type="text" id="windowsmedia_playcount" name="windowsmedia_playcount" onchange="Media.formToData();" /></td>

-

-							<td><label for="windowsmedia_rate">{#media_dlg.rate}</label></td>

-							<td><input type="text" id="windowsmedia_rate" name="windowsmedia_rate" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="windowsmedia_uimode">{#media_dlg.uimode}</label></td>

-							<td><input type="text" id="windowsmedia_uimode" name="windowsmedia_uimode" onchange="Media.formToData();" /></td>

-

-							<td><label for="windowsmedia_volume">{#media_dlg.volume}</label></td>

-							<td><input type="text" id="windowsmedia_volume" name="windowsmedia_volume" onchange="Media.formToData();" /></td>

-						</tr>

-

-					</table>

-				</fieldset>

-

-				<fieldset id="realmedia_options">

-					<legend>{#media_dlg.rmp_options}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_autostart" name="realmedia_autostart" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_autostart">{#media_dlg.autostart}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_loop" name="realmedia_loop" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_loop">{#media_dlg.loop}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_autogotourl" name="realmedia_autogotourl" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_autogotourl">{#media_dlg.autogotourl}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_center" name="realmedia_center" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_center">{#media_dlg.center}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_imagestatus" name="realmedia_imagestatus" checked="checked" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_imagestatus">{#media_dlg.imagestatus}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_maintainaspect" name="realmedia_maintainaspect" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_maintainaspect">{#media_dlg.maintainaspect}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_nojava" name="realmedia_nojava" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_nojava">{#media_dlg.nojava}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_prefetch" name="realmedia_prefetch" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_prefetch">{#media_dlg.prefetch}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="realmedia_shuffle" name="realmedia_shuffle" onchange="Media.formToData();" /></td>

-										<td><label for="realmedia_shuffle">{#media_dlg.shuffle}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								&nbsp;

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="realmedia_console">{#media_dlg.console}</label></td>

-							<td><input type="text" id="realmedia_console" name="realmedia_console" onchange="Media.formToData();" /></td>

-

-							<td><label for="realmedia_controls">{#media_dlg.controls}</label></td>

-							<td><input type="text" id="realmedia_controls" name="realmedia_controls" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="realmedia_numloop">{#media_dlg.numloop}</label></td>

-							<td><input type="text" id="realmedia_numloop" name="realmedia_numloop" onchange="Media.formToData();" /></td>

-

-							<td><label for="realmedia_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>

-							<td><input type="text" id="realmedia_scriptcallbacks" name="realmedia_scriptcallbacks" onchange="Media.formToData();" /></td>

-						</tr>

-					</table>

-				</fieldset>

-

-				<fieldset id="shockwave_options">

-					<legend>{#media_dlg.shockwave_options}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>

-							<td>

-								<select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="Media.formToData();">

-									<option value="none">{#not_set}</option>

-									<option value="meet">Meet</option>

-									<option value="fill">Fill</option>

-									<option value="stage">Stage</option>

-								</select>

-							</td>

-

-							<td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>

-							<td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="Media.formToData();" /></td>

-						</tr>

-

-						<tr>

-							<td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>

-							<td>

-								<select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="Media.formToData();">

-									<option value="none">{#not_set}</option>

-									<option value="left">{#media_dlg.align_left}</option>

-									<option value="center">{#media_dlg.align_center}</option>

-									<option value="right">{#media_dlg.align_right}</option>

-								</select>

-							</td>

-

-							<td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>

-							<td>

-								<select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="Media.formToData();">

-									<option value="none">{#not_set}</option>

-									<option value="meet">Meet</option>

-									<option value="fill">Fill</option>

-									<option value="stage">Stage</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="Media.formToData();" checked="checked" /></td>

-										<td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="Media.formToData();" checked="checked" /></td>

-										<td><label for="shockwave_sound">{#media_dlg.sound}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-

-

-						<tr>

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="Media.formToData();" /></td>

-										<td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>

-									</tr>

-								</table>

-							</td>

-

-							<td colspan="2">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="Media.formToData();" checked="checked" /></td>

-										<td><label for="shockwave_progress">{#media_dlg.progress}</label></td>

-									</tr>

-								</table>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="source_panel" class="panel">

-				<fieldset>

-					<legend>{#media_dlg.source}</legend>

-					<textarea id="source" style="width: 99%; height: 390px"></textarea>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<input type="submit" id="insert" name="insert" value="{#insert}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body>

-</html>

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swf and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
+++ /dev/null
@@ -1,54 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.Nonbreaking', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceNonBreaking', function() {

-				ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');

-			});

-

-			// Register buttons

-			ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});

-

-			if (ed.getParam('nonbreaking_force_tab')) {

-				ed.onKeyDown.add(function(ed, e) {

-					if (e.keyCode == 9) {

-						e.preventDefault();

-	

-						ed.execCommand('mceNonBreaking');

-						ed.execCommand('mceNonBreaking');

-						ed.execCommand('mceNonBreaking');

-					}

-				});

-			}

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Nonbreaking space',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-

-		// Private methods

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b,g;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(i,h,l){var k,j;k=i.dom.getParent(i.selection.getStart(),function(m){return i.dom.hasClass(m,b)});j=i.dom.getParent(i.selection.getEnd(),function(m){return i.dom.hasClass(m,b)});if(k||j){g=1;f._setDisabled(1);return false}else{if(g==1){f._setDisabled(0);g=0}}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block);b.onContextMenu.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block);b.onContextMenu.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
+++ /dev/null
@@ -1,95 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var Event = tinymce.dom.Event;

-

-	tinymce.create('tinymce.plugins.NonEditablePlugin', {

-		init : function(ed, url) {

-			var t = this, editClass, nonEditClass, state;

-

-			t.editor = ed;

-			editClass = ed.getParam("noneditable_editable_class", "mceEditable");

-			nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable");

-

-			ed.onNodeChange.addToTop(function(ed, cm, n) {

-				var sc, ec;

-

-				// Block if start or end is inside a non editable element

-				sc = ed.dom.getParent(ed.selection.getStart(), function(n) {

-					return ed.dom.hasClass(n, nonEditClass);

-				});

-

-				ec = ed.dom.getParent(ed.selection.getEnd(), function(n) {

-					return ed.dom.hasClass(n, nonEditClass);

-				});

-

-				// Block or unblock

-				if (sc || ec) {

-					state = 1;

-					t._setDisabled(1);

-					return false;

-				} else if (state == 1) {

-					t._setDisabled(0);

-					state = 0;

-				}

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Non editable elements',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		_block : function(ed, e) {

-			var k = e.keyCode;

-

-			// Don't block arrow keys, pg up/down, and F1-F12

-			if ((k > 32 && k < 41) || (k > 111 && k < 124))

-				return;

-

-			return Event.cancel(e);

-		},

-

-		_setDisabled : function(s) {

-			var t = this, ed = t.editor;

-

-			tinymce.each(ed.controlManager.controls, function(c) {

-				c.setDisabled(s);

-			});

-

-			if (s !== t.disabled) {

-				if (s) {

-					ed.onKeyDown.addToTop(t._block);

-					ed.onKeyPress.addToTop(t._block);

-					ed.onKeyUp.addToTop(t._block);

-					ed.onPaste.addToTop(t._block);

-					ed.onContextMenu.addToTop(t._block);

-				} else {

-					ed.onKeyDown.remove(t._block);

-					ed.onKeyPress.remove(t._block);

-					ed.onKeyUp.remove(t._block);

-					ed.onPaste.remove(t._block);

-					ed.onContextMenu.remove(t._block);

-				}

-

-				t.disabled = s;

-			}

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+b.theme.url+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
+++ /dev/null
@@ -1,74 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.PageBreakPlugin', {

-		init : function(ed, url) {

-			var pb = '<img src="' + ed.theme.url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;

-

-			pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');

-

-			// Register commands

-			ed.addCommand('mcePageBreak', function() {

-				ed.execCommand('mceInsertContent', 0, pb);

-			});

-

-			// Register buttons

-			ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});

-

-			ed.onInit.add(function() {

-				if (ed.theme.onResolveName) {

-					ed.theme.onResolveName.add(function(th, o) {

-						if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))

-							o.name = 'pagebreak';

-					});

-				}

-			});

-

-			ed.onClick.add(function(ed, e) {

-				e = e.target;

-

-				if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))

-					ed.selection.select(e);

-			});

-

-			ed.onNodeChange.add(function(ed, cm, n) {

-				cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));

-			});

-

-			ed.onBeforeSetContent.add(function(ed, o) {

-				o.content = o.content.replace(pbRE, pb);

-			});

-

-			ed.onPostProcess.add(function(ed, o) {

-				if (o.get)

-					o.content = o.content.replace(/<img[^>]+>/g, function(im) {

-						if (im.indexOf('class="mcePageBreak') !== -1)

-							im = sep;

-

-						return im;

-					});

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'PageBreak',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"<br />"]])}else{if(e=="p"){h([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{h([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}d.execCommand("mceInsertContent",false,g)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
+++ /dev/null
@@ -1,872 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var each = tinymce.each,

-		defs = {

-			paste_auto_cleanup_on_paste : true,

-			paste_enable_default_filters : true,

-			paste_block_drop : false,

-			paste_retain_style_properties : "none",

-			paste_strip_class_attributes : "mso",

-			paste_remove_spans : false,

-			paste_remove_styles : false,

-			paste_remove_styles_if_webkit : true,

-			paste_convert_middot_lists : true,

-			paste_convert_headers_to_strong : false,

-			paste_dialog_width : "450",

-			paste_dialog_height : "400",

-			paste_text_use_dialog : false,

-			paste_text_sticky : false,

-			paste_text_sticky_default : false,

-			paste_text_notifyalways : false,

-			paste_text_linebreaktype : "combined",

-			paste_text_replacements : [

-				[/\u2026/g, "..."],

-				[/[\x93\x94\u201c\u201d]/g, '"'],

-				[/[\x60\x91\x92\u2018\u2019]/g, "'"]

-			]

-		};

-

-	function getParam(ed, name) {

-		return ed.getParam(name, defs[name]);

-	}

-

-	tinymce.create('tinymce.plugins.PastePlugin', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-			t.url = url;

-

-			// Setup plugin events

-			t.onPreProcess = new tinymce.util.Dispatcher(t);

-			t.onPostProcess = new tinymce.util.Dispatcher(t);

-

-			// Register default handlers

-			t.onPreProcess.add(t._preProcess);

-			t.onPostProcess.add(t._postProcess);

-

-			// Register optional preprocess handler

-			t.onPreProcess.add(function(pl, o) {

-				ed.execCallback('paste_preprocess', pl, o);

-			});

-

-			// Register optional postprocess

-			t.onPostProcess.add(function(pl, o) {

-				ed.execCallback('paste_postprocess', pl, o);

-			});

-

-			ed.onKeyDown.addToTop(function(ed, e) {

-				// Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that

-				if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))

-					return false; // Stop other listeners

-			});

-

-			// Initialize plain text flag

-			ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default');

-

-			// This function executes the process handlers and inserts the contents

-			// force_rich overrides plain text mode set by user, important for pasting with execCommand

-			function process(o, force_rich) {

-				var dom = ed.dom, rng;

-

-				// Execute pre process handlers

-				t.onPreProcess.dispatch(t, o);

-

-				// Create DOM structure

-				o.node = dom.create('div', 0, o.content);

-

-				// If pasting inside the same element and the contents is only one block

-				// remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element

-				if (tinymce.isGecko) {

-					rng = ed.selection.getRng(true);

-					if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) {

-						// Is only one block node and it doesn't contain word stuff

-						if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1)

-							dom.remove(o.node.firstChild, true);

-					}

-				}

-

-				// Execute post process handlers

-				t.onPostProcess.dispatch(t, o);

-

-				// Serialize content

-				o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''});

-

-				// Plain text option active?

-				if ((!force_rich) && (ed.pasteAsPlainText)) {

-					t._insertPlainText(o.content);

-

-					if (!getParam(ed, "paste_text_sticky")) {

-						ed.pasteAsPlainText = false;

-						ed.controlManager.setActive("pastetext", false);

-					}

-				} else {

-					t._insert(o.content);

-				}

-			}

-

-			// Add command for external usage

-			ed.addCommand('mceInsertClipboardContent', function(u, o) {

-				process(o, true);

-			});

-

-			if (!getParam(ed, "paste_text_use_dialog")) {

-				ed.addCommand('mcePasteText', function(u, v) {

-					var cookie = tinymce.util.Cookie;

-

-					ed.pasteAsPlainText = !ed.pasteAsPlainText;

-					ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);

-

-					if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {

-						if (getParam(ed, "paste_text_sticky")) {

-							ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));

-						} else {

-							ed.windowManager.alert(ed.translate('paste.plaintext_mode'));

-						}

-

-						if (!getParam(ed, "paste_text_notifyalways")) {

-							cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))

-						}

-					}

-				});

-			}

-

-			ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});

-			ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});

-

-			// This function grabs the contents from the clipboard by adding a

-			// hidden div and placing the caret inside it and after the browser paste

-			// is done it grabs that contents and processes that

-			function grabContent(e) {

-				var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent;

-

-				// Check if browser supports direct plaintext access

-				if (e.clipboardData || dom.doc.dataTransfer) {

-					textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text');

-

-					if (ed.pasteAsPlainText) {

-						e.preventDefault();

-						process({content : dom.encode(textContent).replace(/\r?\n/g, '<br />')});

-						return;

-					}

-				}

-

-				if (dom.get('_mcePaste'))

-					return;

-

-				// Create container to paste into

-				n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF');

-

-				// If contentEditable mode we need to find out the position of the closest element

-				if (body != ed.getDoc().body)

-					posY = dom.getPos(ed.selection.getStart(), body).y;

-				else

-					posY = body.scrollTop + dom.getViewPort(ed.getWin()).y;

-

-				// Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles

-				// If also needs to be in view on IE or the paste would fail

-				dom.setStyles(n, {

-					position : 'absolute',

-					left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div

-					top : posY - 25,

-					width : 1,

-					height : 1,

-					overflow : 'hidden'

-				});

-

-				if (tinymce.isIE) {

-					// Store away the old range

-					oldRng = sel.getRng();

-

-					// Select the container

-					rng = dom.doc.body.createTextRange();

-					rng.moveToElementText(n);

-					rng.execCommand('Paste');

-

-					// Remove container

-					dom.remove(n);

-

-					// Check if the contents was changed, if it wasn't then clipboard extraction failed probably due

-					// to IE security settings so we pass the junk though better than nothing right

-					if (n.innerHTML === '\uFEFF\uFEFF') {

-						ed.execCommand('mcePasteWord');

-						e.preventDefault();

-						return;

-					}

-

-					// Restore the old range and clear the contents before pasting

-					sel.setRng(oldRng);

-					sel.setContent('');

-

-					// For some odd reason we need to detach the the mceInsertContent call from the paste event

-					// It's like IE has a reference to the parent element that you paste in and the selection gets messed up

-					// when it tries to restore the selection

-					setTimeout(function() {

-						// Process contents

-						process({content : n.innerHTML});

-					}, 0);

-

-					// Block the real paste event

-					return tinymce.dom.Event.cancel(e);

-				} else {

-					function block(e) {

-						e.preventDefault();

-					};

-

-					// Block mousedown and click to prevent selection change

-					dom.bind(ed.getDoc(), 'mousedown', block);

-					dom.bind(ed.getDoc(), 'keydown', block);

-

-					or = ed.selection.getRng();

-

-					// Move select contents inside DIV

-					n = n.firstChild;

-					rng = ed.getDoc().createRange();

-					rng.setStart(n, 0);

-					rng.setEnd(n, 2);

-					sel.setRng(rng);

-

-					// Wait a while and grab the pasted contents

-					window.setTimeout(function() {

-						var h = '', nl;

-

-						// Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit

-						if (!dom.select('div.mcePaste > div.mcePaste').length) {

-							nl = dom.select('div.mcePaste');

-

-							// WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string

-							each(nl, function(n) {

-								var child = n.firstChild;

-

-								// WebKit inserts a DIV container with lots of odd styles

-								if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {

-									dom.remove(child, 1);

-								}

-

-								// Remove apply style spans

-								each(dom.select('span.Apple-style-span', n), function(n) {

-									dom.remove(n, 1);

-								});

-

-								// Remove bogus br elements

-								each(dom.select('br[data-mce-bogus]', n), function(n) {

-									dom.remove(n);

-								});

-

-								// WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV

-								if (n.parentNode.className != 'mcePaste')

-									h += n.innerHTML;

-							});

-						} else {

-							// Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc

-							// So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same

-							h = '<p>' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '</p><p>').replace(/\r?\n/g, '<br />') + '</p>';

-						}

-

-						// Remove the nodes

-						each(dom.select('div.mcePaste'), function(n) {

-							dom.remove(n);

-						});

-

-						// Restore the old selection

-						if (or)

-							sel.setRng(or);

-

-						process({content : h});

-

-						// Unblock events ones we got the contents

-						dom.unbind(ed.getDoc(), 'mousedown', block);

-						dom.unbind(ed.getDoc(), 'keydown', block);

-					}, 0);

-				}

-			}

-

-			// Check if we should use the new auto process method			

-			if (getParam(ed, "paste_auto_cleanup_on_paste")) {

-				// Is it's Opera or older FF use key handler

-				if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {

-					ed.onKeyDown.addToTop(function(ed, e) {

-						if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))

-							grabContent(e);

-					});

-				} else {

-					// Grab contents on paste event on Gecko and WebKit

-					ed.onPaste.addToTop(function(ed, e) {

-						return grabContent(e);

-					});

-				}

-			}

-

-			ed.onInit.add(function() {

-				ed.controlManager.setActive("pastetext", ed.pasteAsPlainText);

-

-				// Block all drag/drop events

-				if (getParam(ed, "paste_block_drop")) {

-					ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {

-						e.preventDefault();

-						e.stopPropagation();

-

-						return false;

-					});

-				}

-			});

-

-			// Add legacy support

-			t._legacySupport();

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Paste text/word',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		_preProcess : function(pl, o) {

-			var ed = this.editor,

-				h = o.content,

-				grep = tinymce.grep,

-				explode = tinymce.explode,

-				trim = tinymce.trim,

-				len, stripClass;

-

-			//console.log('Before preprocess:' + o.content);

-

-			function process(items) {

-				each(items, function(v) {

-					// Remove or replace

-					if (v.constructor == RegExp)

-						h = h.replace(v, '');

-					else

-						h = h.replace(v[0], v[1]);

-				});

-			}

-			

-			if (ed.settings.paste_enable_default_filters == false) {

-				return;

-			}

-

-			// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser

-			if (tinymce.isIE && document.documentMode >= 9) {

-				// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser

-				process([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g, '$1']]);

-

-				// IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break

-				process([

-					[/<br><br>/g, '<BR><BR>'], // Replace multiple BR elements with uppercase BR to keep them intact

-					[/<br>/g, ' '], // Replace single br elements with space since they are word wrap BR:s

-					[/<BR><BR>/g, '<br>'] // Replace back the double brs but into a single BR

-				]);

-			}

-

-			// Detect Word content and process it more aggressive

-			if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {

-				o.wordContent = true;			// Mark the pasted contents as word specific content

-				//console.log('Word contents detected.');

-

-				// Process away some basic content

-				process([

-					/^\s*(&nbsp;)+/gi,				// &nbsp; entities at the start of contents

-					/(&nbsp;|<br[^>]*>)+\s*$/gi		// &nbsp; entities at the end of contents

-				]);

-

-				if (getParam(ed, "paste_convert_headers_to_strong")) {

-					h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");

-				}

-

-				if (getParam(ed, "paste_convert_middot_lists")) {

-					process([

-						[/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'],					// Convert supportLists to a list item marker

-						[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'],		// Convert mso-list and symbol spans to item markers

-						[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__']				// Convert mso-list and symbol paragraphs to item markers (FF)

-					]);

-				}

-

-				process([

-					// Word comments like conditional comments etc

-					/<!--[\s\S]+?-->/gi,

-

-					// Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags

-					/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,

-

-					// Convert <s> into <strike> for line-though

-					[/<(\/?)s>/gi, "<$1strike>"],

-

-					// Replace nsbp entites to char since it's easier to handle

-					[/&nbsp;/gi, "\u00a0"]

-				]);

-

-				// Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.

-				// If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.

-				do {

-					len = h.length;

-					h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");

-				} while (len != h.length);

-

-				// Remove all spans if no styles is to be retained

-				if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {

-					h = h.replace(/<\/?span[^>]*>/gi, "");

-				} else {

-					// We're keeping styles, so at least clean them up.

-					// CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx

-

-					process([

-						// Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length

-						[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,

-							function(str, spaces) {

-								return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";

-							}

-						],

-

-						// Examine all styles: delete junk, transform some, and keep the rest

-						[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,

-							function(str, tag, style) {

-								var n = [],

-									i = 0,

-									s = explode(trim(style).replace(/&quot;/gi, "'"), ";");

-

-								// Examine each style definition within the tag's style attribute

-								each(s, function(v) {

-									var name, value,

-										parts = explode(v, ":");

-

-									function ensureUnits(v) {

-										return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";

-									}

-

-									if (parts.length == 2) {

-										name = parts[0].toLowerCase();

-										value = parts[1].toLowerCase();

-

-										// Translate certain MS Office styles into their CSS equivalents

-										switch (name) {

-											case "mso-padding-alt":

-											case "mso-padding-top-alt":

-											case "mso-padding-right-alt":

-											case "mso-padding-bottom-alt":

-											case "mso-padding-left-alt":

-											case "mso-margin-alt":

-											case "mso-margin-top-alt":

-											case "mso-margin-right-alt":

-											case "mso-margin-bottom-alt":

-											case "mso-margin-left-alt":

-											case "mso-table-layout-alt":

-											case "mso-height":

-											case "mso-width":

-											case "mso-vertical-align-alt":

-												n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);

-												return;

-

-											case "horiz-align":

-												n[i++] = "text-align:" + value;

-												return;

-

-											case "vert-align":

-												n[i++] = "vertical-align:" + value;

-												return;

-

-											case "font-color":

-											case "mso-foreground":

-												n[i++] = "color:" + value;

-												return;

-

-											case "mso-background":

-											case "mso-highlight":

-												n[i++] = "background:" + value;

-												return;

-

-											case "mso-default-height":

-												n[i++] = "min-height:" + ensureUnits(value);

-												return;

-

-											case "mso-default-width":

-												n[i++] = "min-width:" + ensureUnits(value);

-												return;

-

-											case "mso-padding-between-alt":

-												n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);

-												return;

-

-											case "text-line-through":

-												if ((value == "single") || (value == "double")) {

-													n[i++] = "text-decoration:line-through";

-												}

-												return;

-

-											case "mso-zero-height":

-												if (value == "yes") {

-													n[i++] = "display:none";

-												}

-												return;

-										}

-

-										// Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name

-										if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {

-											return;

-										}

-

-										// If it reached this point, it must be a valid CSS style

-										n[i++] = name + ":" + parts[1];		// Lower-case name, but keep value case

-									}

-								});

-

-								// If style attribute contained any valid styles the re-write it; otherwise delete style attribute.

-								if (i > 0) {

-									return tag + ' style="' + n.join(';') + '"';

-								} else {

-									return tag;

-								}

-							}

-						]

-					]);

-				}

-			}

-

-			// Replace headers with <strong>

-			if (getParam(ed, "paste_convert_headers_to_strong")) {

-				process([

-					[/<h[1-6][^>]*>/gi, "<p><strong>"],

-					[/<\/h[1-6][^>]*>/gi, "</strong></p>"]

-				]);

-			}

-

-			process([

-				// Copy paste from Java like Open Office will produce this junk on FF

-				[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, '']

-			]);

-

-			// Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").

-			// Note:-  paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.

-			stripClass = getParam(ed, "paste_strip_class_attributes");

-

-			if (stripClass !== "none") {

-				function removeClasses(match, g1) {

-						if (stripClass === "all")

-							return '';

-

-						var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),

-							function(v) {

-								return (/^(?!mso)/i.test(v));

-							}

-						);

-

-						return cls.length ? ' class="' + cls.join(" ") + '"' : '';

-				};

-

-				h = h.replace(/ class="([^"]+)"/gi, removeClasses);

-				h = h.replace(/ class=([\-\w]+)/gi, removeClasses);

-			}

-

-			// Remove spans option

-			if (getParam(ed, "paste_remove_spans")) {

-				h = h.replace(/<\/?span[^>]*>/gi, "");

-			}

-

-			//console.log('After preprocess:' + h);

-

-			o.content = h;

-		},

-

-		/**

-		 * Various post process items.

-		 */

-		_postProcess : function(pl, o) {

-			var t = this, ed = t.editor, dom = ed.dom, styleProps;

-

-			if (ed.settings.paste_enable_default_filters == false) {

-				return;

-			}

-			

-			if (o.wordContent) {

-				// Remove named anchors or TOC links

-				each(dom.select('a', o.node), function(a) {

-					if (!a.href || a.href.indexOf('#_Toc') != -1)

-						dom.remove(a, 1);

-				});

-

-				if (getParam(ed, "paste_convert_middot_lists")) {

-					t._convertLists(pl, o);

-				}

-

-				// Process styles

-				styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties

-

-				// Process only if a string was specified and not equal to "all" or "*"

-				if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {

-					styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));

-

-					// Retains some style properties

-					each(dom.select('*', o.node), function(el) {

-						var newStyle = {}, npc = 0, i, sp, sv;

-

-						// Store a subset of the existing styles

-						if (styleProps) {

-							for (i = 0; i < styleProps.length; i++) {

-								sp = styleProps[i];

-								sv = dom.getStyle(el, sp);

-

-								if (sv) {

-									newStyle[sp] = sv;

-									npc++;

-								}

-							}

-						}

-

-						// Remove all of the existing styles

-						dom.setAttrib(el, 'style', '');

-

-						if (styleProps && npc > 0)

-							dom.setStyles(el, newStyle); // Add back the stored subset of styles

-						else // Remove empty span tags that do not have class attributes

-							if (el.nodeName == 'SPAN' && !el.className)

-								dom.remove(el, true);

-					});

-				}

-			}

-

-			// Remove all style information or only specifically on WebKit to avoid the style bug on that browser

-			if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {

-				each(dom.select('*[style]', o.node), function(el) {

-					el.removeAttribute('style');

-					el.removeAttribute('data-mce-style');

-				});

-			} else {

-				if (tinymce.isWebKit) {

-					// We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />

-					// Removing the mce_style that contains the real value will force the Serializer engine to compress the styles

-					each(dom.select('*', o.node), function(el) {

-						el.removeAttribute('data-mce-style');

-					});

-				}

-			}

-		},

-

-		/**

-		 * Converts the most common bullet and number formats in Office into a real semantic UL/LI list.

-		 */

-		_convertLists : function(pl, o) {

-			var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;

-

-			// Convert middot lists into real semantic lists

-			each(dom.select('p', o.node), function(p) {

-				var sib, val = '', type, html, idx, parents;

-

-				// Get text node value at beginning of paragraph

-				for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)

-					val += sib.nodeValue;

-

-				val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');

-

-				// Detect unordered lists look for bullets

-				if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val))

-					type = 'ul';

-

-				// Detect ordered lists 1., a. or ixv.

-				if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val))

-					type = 'ol';

-

-				// Check if node value matches the list pattern: o&nbsp;&nbsp;

-				if (type) {

-					margin = parseFloat(p.style.marginLeft || 0);

-

-					if (margin > lastMargin)

-						levels.push(margin);

-

-					if (!listElm || type != lastType) {

-						listElm = dom.create(type);

-						dom.insertAfter(listElm, p);

-					} else {

-						// Nested list element

-						if (margin > lastMargin) {

-							listElm = li.appendChild(dom.create(type));

-						} else if (margin < lastMargin) {

-							// Find parent level based on margin value

-							idx = tinymce.inArray(levels, margin);

-							parents = dom.getParents(listElm.parentNode, type);

-							listElm = parents[parents.length - 1 - idx] || listElm;

-						}

-					}

-

-					// Remove middot or number spans if they exists

-					each(dom.select('span', p), function(span) {

-						var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');

-

-						// Remove span with the middot or the number

-						if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html))

-							dom.remove(span);

-						else if (/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))

-							dom.remove(span);

-					});

-

-					html = p.innerHTML;

-

-					// Remove middot/list items

-					if (type == 'ul')

-						html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/, '');

-					else

-						html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');

-

-					// Create li and add paragraph data into the new li

-					li = listElm.appendChild(dom.create('li', 0, html));

-					dom.remove(p);

-

-					lastMargin = margin;

-					lastType = type;

-				} else

-					listElm = lastMargin = 0; // End list element

-			});

-

-			// Remove any left over makers

-			html = o.node.innerHTML;

-			if (html.indexOf('__MCE_ITEM__') != -1)

-				o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');

-		},

-

-		/**

-		 * Inserts the specified contents at the caret position.

-		 */

-		_insert : function(h, skip_undo) {

-			var ed = this.editor, r = ed.selection.getRng();

-

-			// First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.

-			if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)

-				ed.getDoc().execCommand('Delete', false, null);

-

-			ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo});

-		},

-

-		/**

-		 * Instead of the old plain text method which tried to re-create a paste operation, the

-		 * new approach adds a plain text mode toggle switch that changes the behavior of paste.

-		 * This function is passed the same input that the regular paste plugin produces.

-		 * It performs additional scrubbing and produces (and inserts) the plain text.

-		 * This approach leverages all of the great existing functionality in the paste

-		 * plugin, and requires minimal changes to add the new functionality.

-		 * Speednet - June 2009

-		 */

-		_insertPlainText : function(content) {

-			var ed = this.editor,

-				linebr = getParam(ed, "paste_text_linebreaktype"),

-				rl = getParam(ed, "paste_text_replacements"),

-				is = tinymce.is;

-

-			function process(items) {

-				each(items, function(v) {

-					if (v.constructor == RegExp)

-						content = content.replace(v, "");

-					else

-						content = content.replace(v[0], v[1]);

-				});

-			};

-

-			if ((typeof(content) === "string") && (content.length > 0)) {

-				// If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line

-				if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) {

-					process([

-						/[\n\r]+/g

-					]);

-				} else {

-					// Otherwise just get rid of carriage returns (only need linefeeds)

-					process([

-						/\r+/g

-					]);

-				}

-

-				process([

-					[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"],		// Block tags get a blank line after them

-					[/<br[^>]*>|<\/tr>/gi, "\n"],				// Single linebreak for <br /> tags and table rows

-					[/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"],		// Table cells get tabs betweem them

-					/<[a-z!\/?][^>]*>/gi,						// Delete all remaining tags

-					[/&nbsp;/gi, " "],							// Convert non-break spaces to regular spaces (remember, *plain text*)

-					[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],// Cool little RegExp deletes whitespace around linebreak chars.

-					[/\n{3,}/g, "\n\n"]							// Max. 2 consecutive linebreaks

-				]);

-

-				content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content));

-

-				// Perform default or custom replacements

-				if (is(rl, "array")) {

-					process(rl);

-				} else if (is(rl, "string")) {

-					process(new RegExp(rl, "gi"));

-				}

-

-				// Treat paragraphs as specified in the config

-				if (linebr == "none") {

-					// Convert all line breaks to space

-					process([

-						[/\n+/g, " "]

-					]);

-				} else if (linebr == "br") {

-					// Convert all line breaks to <br />

-					process([

-						[/\n/g, "<br />"]

-					]);

-				} else if (linebr == "p") {

-					// Convert all line breaks to <p>...</p>

-					process([

-						[/\n+/g, "</p><p>"],

-						[/^(.*<\/p>)(<p>)$/, '<p>$1']

-					]);

-				} else {

-					// defaults to "combined"

-					// Convert single line breaks to <br /> and double line breaks to <p>...</p>

-					process([

-						[/\n\n/g, "</p><p>"],

-						[/^(.*<\/p>)(<p>)$/, '<p>$1'],

-						[/\n/g, "<br />"]

-					]);

-				}

-

-				ed.execCommand('mceInsertContent', false, content);

-			}

-		},

-

-		/**

-		 * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.

-		 */

-		_legacySupport : function() {

-			var t = this, ed = t.editor;

-

-			// Register command(s) for backwards compatibility

-			ed.addCommand("mcePasteWord", function() {

-				ed.windowManager.open({

-					file: t.url + "/pasteword.htm",

-					width: parseInt(getParam(ed, "paste_dialog_width")),

-					height: parseInt(getParam(ed, "paste_dialog_height")),

-					inline: 1

-				});

-			});

-

-			if (getParam(ed, "paste_text_use_dialog")) {

-				ed.addCommand("mcePasteText", function() {

-					ed.windowManager.open({

-						file : t.url + "/pastetext.htm",

-						width: parseInt(getParam(ed, "paste_dialog_width")),

-						height: parseInt(getParam(ed, "paste_dialog_height")),

-						inline : 1

-					});

-				});

-			}

-

-			// Register button for backwards compatibility

-			ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js
+++ /dev/null
@@ -1,37 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var PasteTextDialog = {

-	init : function() {

-		this.resize();

-	},

-

-	insert : function() {

-		var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;

-

-		// Convert linebreaks into paragraphs

-		if (document.getElementById('linebreaks').checked) {

-			lines = h.split(/\r?\n/);

-			if (lines.length > 1) {

-				h = '';

-				tinymce.each(lines, function(row) {

-					h += '<p>' + row + '</p>';

-				});

-			}

-		}

-

-		tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});

-		tinyMCEPopup.close();

-	},

-

-	resize : function() {

-		var vp = tinyMCEPopup.dom.getViewPort(window), el;

-

-		el = document.getElementById('content');

-

-		el.style.width  = (vp.w - 20) + 'px';

-		el.style.height = (vp.h - 90) + 'px';

-	}

-};

-

-tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js
+++ /dev/null
@@ -1,52 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var PasteWordDialog = {

-	init : function() {

-		var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';

-

-		// Create iframe

-		el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';

-		ifr = document.getElementById('iframe');

-		doc = ifr.contentWindow.document;

-

-		// Force absolute CSS urls

-		css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];

-		css = css.concat(tinymce.explode(ed.settings.content_css) || []);

-		tinymce.each(css, function(u) {

-			cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';

-		});

-

-		// Write content into iframe

-		doc.open();

-		doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');

-		doc.close();

-

-		doc.designMode = 'on';

-		this.resize();

-

-		window.setTimeout(function() {

-			ifr.contentWindow.focus();

-		}, 10);

-	},

-

-	insert : function() {

-		var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;

-

-		tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});

-		tinyMCEPopup.close();

-	},

-

-	resize : function() {

-		var vp = tinyMCEPopup.dom.getViewPort(window), el;

-

-		el = document.getElementById('iframe');

-

-		if (el) {

-			el.style.width  = (vp.w - 20) + 'px';

-			el.style.height = (vp.h - 90) + 'px';

-		}

-	}

-};

-

-tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."});
+

--- a/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm
+++ /dev/null
@@ -1,27 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#paste.paste_text_desc}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/pastetext.js"></script>

-</head>

-<body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;">

-	<form name="source" onsubmit="return PasteTextDialog.insert();" action="#">

-		<div style="float: left" class="title">{#paste.paste_text_desc}</div>

-

-		<div style="float: right">

-			<input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>

-		</div>

-

-		<br style="clear: both" />

-

-		<div>{#paste_dlg.text_title}</div>

-

-		<textarea id="content" name="content" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>

-

-		<div class="mceActionPanel">

-			<input type="submit" name="insert" value="{#insert}" id="insert" />

-			<input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />

-		</div>

-	</form>

-</body> 

-</html>
+

--- a/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm
+++ /dev/null
@@ -1,22 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#paste.paste_word_desc}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/pasteword.js"></script>

-</head>

-<body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;">

-	<form name="source" onsubmit="return PasteWordDialog.insert();" action="#">

-		<div class="title">{#paste.paste_word_desc}</div>

-

-		<div>{#paste_dlg.word_title}</div>

-

-		<div id="iframecontainer"></div>

-

-		<div class="mceActionPanel">

-			<input type="submit" id="insert" name="insert" value="{#insert}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js
+++ /dev/null
@@ -1,53 +1,1 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
 
-(function() {
-	tinymce.create('tinymce.plugins.Preview', {
-		init : function(ed, url) {
-			var t = this, css = tinymce.explode(ed.settings.content_css);
-
-			t.editor = ed;
-
-			// Force absolute CSS urls	
-			tinymce.each(css, function(u, k) {
-				css[k] = ed.documentBaseURI.toAbsolute(u);
-			});
-
-			ed.addCommand('mcePreview', function() {
-				ed.windowManager.open({
-					file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"),
-					width : parseInt(ed.getParam("plugin_preview_width", "550")),
-					height : parseInt(ed.getParam("plugin_preview_height", "600")),
-					resizable : "yes",
-					scrollbars : "yes",
-					popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"),
-					inline : ed.getParam("plugin_preview_inline", 1)
-				}, {
-					base : ed.documentBaseURI.getURI()
-				});
-			});
-
-			ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'});
-		},
-
-		getInfo : function() {
-			return {
-				longname : 'Preview',
-				author : 'Moxiecode Systems AB',
-				authorurl : 'http://tinymce.moxiecode.com',
-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview',
-				version : tinymce.majorVersion + "." + tinymce.minorVersion
-			};
-		}
-	});
-
-	// Register plugin
-	tinymce.PluginManager.add('preview', tinymce.plugins.Preview);
-})();

--- a/tinymce/jscripts/tiny_mce/plugins/preview/example.html
+++ /dev/null
@@ -1,29 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-<script language="javascript" src="../../tiny_mce_popup.js"></script>

-<script type="text/javascript" src="jscripts/embed.js"></script>

-<script type="text/javascript">

-tinyMCEPopup.onInit.add(function(ed) {

-	var dom = tinyMCEPopup.dom;

-

-	// Load editor content_css

-	tinymce.each(ed.settings.content_css.split(','), function(u) {

-		dom.loadCSS(ed.documentBaseURI.toAbsolute(u));

-	});

-

-	// Place contents inside div container

-	dom.setHTML('content', ed.getContent());

-});

-</script>

-<title>Example of a custom preview page</title>

-</head>

-<body>

-

-Editor contents: <br />

-<div id="content">

-<!-- Gets filled with editor contents -->

-</div>

-

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js
+++ /dev/null
@@ -1,74 +1,1 @@
-/**

- * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.

- */

-

-function writeFlash(p) {

-	writeEmbed(

-		'D27CDB6E-AE6D-11cf-96B8-444553540000',

-		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

-		'application/x-shockwave-flash',

-		p

-	);

-}

-

-function writeShockWave(p) {

-	writeEmbed(

-	'166B1BCA-3F9C-11CF-8075-444553540000',

-	'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',

-	'application/x-director',

-		p

-	);

-}

-

-function writeQuickTime(p) {

-	writeEmbed(

-		'02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',

-		'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',

-		'video/quicktime',

-		p

-	);

-}

-

-function writeRealMedia(p) {

-	writeEmbed(

-		'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',

-		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

-		'audio/x-pn-realaudio-plugin',

-		p

-	);

-}

-

-function writeWindowsMedia(p) {

-	p.url = p.src;

-	writeEmbed(

-		'6BF52A52-394A-11D3-B153-00C04F79FAA6',

-		'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',

-		'application/x-mplayer2',

-		p

-	);

-}

-

-function writeEmbed(cls, cb, mt, p) {

-	var h = '', n;

-

-	h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';

-	h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';

-	h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';

-	h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';

-	h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';

-	h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';

-	h += '>';

-

-	for (n in p)

-		h += '<param name="' + n + '" value="' + p[n] + '">';

-

-	h += '<embed type="' + mt + '"';

-

-	for (n in p)

-		h += n + '="' + p[n] + '" ';

-

-	h += '></embed></object>';

-

-	document.write(h);

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/preview/preview.html
+++ /dev/null
@@ -1,18 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-<script type="text/javascript" src="jscripts/embed.js"></script>

-<script type="text/javascript"><!--

-document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">');

-// -->

-</script>

-<title>{#preview.preview_desc}</title>

-</head>

-<body id="content">

-<script type="text/javascript">

-	document.write(tinyMCEPopup.editor.getContent());

-</script>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js
+++ /dev/null
@@ -1,35 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.Print', {

-		init : function(ed, url) {

-			ed.addCommand('mcePrint', function() {

-				ed.getWin().print();

-			});

-

-			ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Print',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('print', tinymce.plugins.Print);

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/safari/blank.htm
+++ /dev/null
@@ -1,1 +1,1 @@
-<!-- WebKit -->
+

--- a/tinymce/jscripts/tiny_mce/plugins/safari/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var Event=tinymce.dom.Event,grep=tinymce.grep,each=tinymce.each,inArray=tinymce.inArray,isOldWebKit=tinymce.isOldWebKit;tinymce.create('tinymce.plugins.Safari',{init:function(ed){var t=this,dom;if(!tinymce.isWebKit)return;t.editor=ed;t.webKitFontSizes=['x-small','small','medium','large','x-large','xx-large','-webkit-xxx-large'];t.namedFontSizes=['xx-small','x-small','small','medium','large','x-large','xx-large'];ed.onPaste.add(function(ed,e){function removeStyles(e){e=e.target;if(e.nodeType==1){e.style.cssText='';each(ed.dom.select('*',e),function(e){e.style.cssText='';});}};Event.add(ed.getDoc(),'DOMNodeInserted',removeStyles);window.setTimeout(function(){Event.remove(ed.getDoc(),'DOMNodeInserted',removeStyles);},0);});ed.onKeyUp.add(function(ed,e){var h,b;if(e.keyCode==46||e.keyCode==8){b=ed.getBody();h=b.innerHTML;if(b.childNodes.length==1&&!/<(img|hr)/.test(h)&&tinymce.trim(h.replace(/<[^>]+>/g,'')).length==0)ed.setContent('',{format:'raw'});}});ed.addCommand('FormatBlock',function(u,v){var dom=ed.dom,e=dom.getParent(ed.selection.getNode(),dom.isBlock);if(e)dom.replace(dom.create(v),e,1);else ed.getDoc().execCommand("FormatBlock",false,v);});ed.addCommand('mceInsertContent',function(u,v){ed.getDoc().execCommand("InsertText",false,'mce_marker');ed.getBody().innerHTML=ed.getBody().innerHTML.replace(/mce_marker/g,v+'<span id="_mce_tmp">XX</span>');ed.selection.select(ed.dom.get('_mce_tmp'));ed.getDoc().execCommand("Delete",false,' ');});ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&(e.shiftKey||ed.settings.force_br_newlines&&ed.selection.getNode().nodeName!='LI')){t._insertBR(ed);Event.cancel(e);}});ed.addQueryValueHandler('FontSize',function(u,v){var e,v;if((e=ed.dom.getParent(ed.selection.getStart(),'span'))&&(v=e.style.fontSize))return tinymce.inArray(t.namedFontSizes,v)+1;if((e=ed.dom.getParent(ed.selection.getEnd(),'span'))&&(v=e.style.fontSize))return tinymce.inArray(t.namedFontSizes,v)+1;return ed.getDoc().queryCommandValue('FontSize');});ed.addQueryValueHandler('FontName',function(u,v){var e,v;if((e=ed.dom.getParent(ed.selection.getStart(),'span'))&&(v=e.style.fontFamily))return v.replace(/, /g,',');if((e=ed.dom.getParent(ed.selection.getEnd(),'span'))&&(v=e.style.fontFamily))return v.replace(/, /g,',');return ed.getDoc().queryCommandValue('FontName');});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName=='IMG'){t.selElm=e;ed.selection.select(e);}else t.selElm=null;});ed.onInit.add(function(){t._fixWebKitSpans();if(isOldWebKit)t._patchSafari2x(ed);});ed.onSetContent.add(function(){dom=ed.dom;each(['strong','b','em','u','strike','sub','sup','a'],function(v){each(grep(dom.select(v)).reverse(),function(n){var nn=n.nodeName.toLowerCase(),st;if(nn=='a'){if(n.name)dom.replace(dom.create('img',{mce_name:'a',name:n.name,'class':'mceItemAnchor'}),n);return;}switch(nn){case'b':case'strong':if(nn=='b')nn='strong';st='font-weight: bold;';break;case'em':st='font-style: italic;';break;case'u':st='text-decoration: underline;';break;case'sub':st='vertical-align: sub;';break;case'sup':st='vertical-align: super;';break;case'strike':st='text-decoration: line-through;';break;}dom.replace(dom.create('span',{mce_name:nn,style:st,'class':'Apple-style-span'}),n,1);});});});ed.onPreProcess.add(function(ed,o){dom=ed.dom;each(grep(o.node.getElementsByTagName('span')).reverse(),function(n){var v,bg;if(o.get){if(dom.hasClass(n,'Apple-style-span')){bg=n.style.backgroundColor;switch(dom.getAttrib(n,'mce_name')){case'font':if(!ed.settings.convert_fonts_to_spans)dom.setAttrib(n,'style','');break;case'strong':case'em':case'sub':case'sup':dom.setAttrib(n,'style','');break;case'strike':case'u':if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');else dom.setAttrib(n,'mce_name','');break;default:if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');}if(bg)n.style.backgroundColor=bg;}}if(dom.hasClass(n,'mceItemRemoved'))dom.remove(n,1);});});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g,'</$1>');o.content=o.content.replace(/ id=\"undefined\"/g,'');});},getInfo:function(){return{longname:'Safari compatibility',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_fixWebKitSpans:function(){var t=this,ed=t.editor;if(!isOldWebKit){Event.add(ed.getDoc(),'DOMNodeInserted',function(e){e=e.target;if(e&&e.nodeType==1)t._fixAppleSpan(e);});}else{ed.onExecCommand.add(function(){each(ed.dom.select('span'),function(n){t._fixAppleSpan(n);});ed.nodeChanged();});}},_fixAppleSpan:function(e){var ed=this.editor,dom=ed.dom,fz=this.webKitFontSizes,fzn=this.namedFontSizes,s=ed.settings,st,p;if(dom.getAttrib(e,'mce_fixed'))return;if(e.nodeName=='SPAN'&&e.className=='Apple-style-span'){st=e.style;if(!s.convert_fonts_to_spans){if(st.fontSize){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'size',inArray(fz,st.fontSize)+1);}if(st.fontFamily){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'face',st.fontFamily);}if(st.color){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'color',dom.toHex(st.color));}if(st.backgroundColor){dom.setAttrib(e,'mce_name','font');dom.setStyle(e,'background-color',st.backgroundColor);}}else{if(st.fontSize)dom.setStyle(e,'fontSize',fzn[inArray(fz,st.fontSize)]);}if(st.fontWeight=='bold')dom.setAttrib(e,'mce_name','strong');if(st.fontStyle=='italic')dom.setAttrib(e,'mce_name','em');if(st.textDecoration=='underline')dom.setAttrib(e,'mce_name','u');if(st.textDecoration=='line-through')dom.setAttrib(e,'mce_name','strike');if(st.verticalAlign=='super')dom.setAttrib(e,'mce_name','sup');if(st.verticalAlign=='sub')dom.setAttrib(e,'mce_name','sub');dom.setAttrib(e,'mce_fixed','1');}},_patchSafari2x:function(ed){var t=this,setContent,getNode,dom=ed.dom,lr;if(ed.windowManager.onBeforeOpen){ed.windowManager.onBeforeOpen.add(function(){r=ed.selection.getRng();});}ed.selection.select=function(n){this.getSel().setBaseAndExtent(n,0,n,1);};getNode=ed.selection.getNode;ed.selection.getNode=function(){return t.selElm||getNode.call(this);};ed.selection.getRng=function(){var t=this,s=t.getSel(),d=ed.getDoc(),r,rb,ra,di;if(s.anchorNode){r=d.createRange();try{rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(1);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(1);di=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;r.setStart(di?s.anchorNode:s.focusNode,di?s.anchorOffset:s.focusOffset);r.setEnd(di?s.focusNode:s.anchorNode,di?s.focusOffset:s.anchorOffset);lr=r;}catch(ex){}}return r||lr;};setContent=ed.selection.setContent;ed.selection.setContent=function(h,s){var r=this.getRng(),b;try{setContent.call(this,h,s);}catch(ex){b=dom.create('body');b.innerHTML=h;each(b.childNodes,function(n){r.insertNode(n.cloneNode(true));});}};},_insertBR:function(ed){var dom=ed.dom,s=ed.selection,r=s.getRng(),br;r.insertNode(br=dom.create('br'));r.setStartAfter(br);r.setEndAfter(br);s.setRng(r);if(s.getSel().focusNode==br.previousSibling){s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'),br));s.collapse(1);}ed.getWin().scrollTo(0,dom.getPos(s.getRng().startContainer).y);}});tinymce.PluginManager.add('safari',tinymce.plugins.Safari);})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/safari/editor_plugin_src.js
+++ /dev/null
@@ -1,461 +1,1 @@
-/**

- * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $

- *

- * @author Moxiecode


- */

-

-(function() {

-	var Event = tinymce.dom.Event, grep = tinymce.grep, each = tinymce.each, inArray = tinymce.inArray, isOldWebKit = tinymce.isOldWebKit;

-

-	tinymce.create('tinymce.plugins.Safari', {

-		init : function(ed) {

-			var t = this, dom;

-

-			// Ignore on non webkit

-			if (!tinymce.isWebKit)

-				return;

-

-			t.editor = ed;

-			t.webKitFontSizes = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', '-webkit-xxx-large'];

-			t.namedFontSizes = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large'];

-

-			// Safari will crash if the build in createlink command is used

-/*			ed.addCommand('CreateLink', function(u, v) {

-				ed.execCommand("mceInsertContent", false, '<a href="' + dom.encode(v) + '">' + ed.selection.getContent() + '</a>');

-			});*/

-

-			ed.onPaste.add(function(ed, e) {

-				function removeStyles(e) {

-					e = e.target;

-

-					if (e.nodeType == 1) {

-						e.style.cssText = '';

-

-						each(ed.dom.select('*', e), function(e) {

-							e.style.cssText = '';

-						});

-					}

-				};

-

-				Event.add(ed.getDoc(), 'DOMNodeInserted', removeStyles);

-

-				window.setTimeout(function() {

-					Event.remove(ed.getDoc(), 'DOMNodeInserted', removeStyles);

-				}, 0);

-			});

-

-			ed.onKeyUp.add(function(ed, e) {

-				var h, b;

-

-				// If backspace or delete key

-				if (e.keyCode == 46 || e.keyCode == 8) {

-					b = ed.getBody();

-					h = b.innerHTML;

-

-					// If there is no text content or images or hr elements then remove everything

-					if (b.childNodes.length == 1 && !/<(img|hr)/.test(h) && tinymce.trim(h.replace(/<[^>]+>/g, '')).length == 0)

-						ed.setContent('', {format : 'raw'});

-				}

-			});

-

-			// Workaround for FormatBlock bug, http://bugs.webkit.org/show_bug.cgi?id=16004

-			ed.addCommand('FormatBlock', function(u, v) {

-				var dom = ed.dom, e = dom.getParent(ed.selection.getNode(), dom.isBlock);

-

-				if (e)

-					dom.replace(dom.create(v), e, 1);

-				else

-					ed.getDoc().execCommand("FormatBlock", false, v);

-			});

-

-			// Workaround for InsertHTML bug, http://bugs.webkit.org/show_bug.cgi?id=16382

-			ed.addCommand('mceInsertContent', function(u, v) {

-				ed.getDoc().execCommand("InsertText", false, 'mce_marker');

-				ed.getBody().innerHTML = ed.getBody().innerHTML.replace(/mce_marker/g, v + '<span id="_mce_tmp">XX</span>');

-				ed.selection.select(ed.dom.get('_mce_tmp'));

-				ed.getDoc().execCommand("Delete", false, ' ');

-			});

-

-			// Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973

-			ed.onKeyPress.add(function(ed, e) {

-				if (e.keyCode == 13 && (e.shiftKey || ed.settings.force_br_newlines && ed.selection.getNode().nodeName != 'LI')) {

-					t._insertBR(ed);

-					Event.cancel(e);

-				}

-			});

-

-			// Safari returns incorrect values

-			ed.addQueryValueHandler('FontSize', function(u, v) {

-				var e, v;

-

-				// Check for the real font size at the start of selection

-				if ((e = ed.dom.getParent(ed.selection.getStart(), 'span')) && (v = e.style.fontSize))

-					return tinymce.inArray(t.namedFontSizes, v) + 1;

-

-				// Check for the real font size at the end of selection

-				if ((e = ed.dom.getParent(ed.selection.getEnd(), 'span')) && (v = e.style.fontSize))

-					return tinymce.inArray(t.namedFontSizes, v) + 1;

-

-				// Return default value it's better than nothing right!

-				return ed.getDoc().queryCommandValue('FontSize');

-			});

-

-			// Safari returns incorrect values

-			ed.addQueryValueHandler('FontName', function(u, v) {

-				var e, v;

-

-				// Check for the real font name at the start of selection

-				if ((e = ed.dom.getParent(ed.selection.getStart(), 'span')) && (v = e.style.fontFamily))

-					return v.replace(/, /g, ',');

-

-				// Check for the real font name at the end of selection

-				if ((e = ed.dom.getParent(ed.selection.getEnd(), 'span')) && (v = e.style.fontFamily))

-					return v.replace(/, /g, ',');

-

-				// Return default value it's better than nothing right!

-				return ed.getDoc().queryCommandValue('FontName');

-			});

-

-			// Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250

-			ed.onClick.add(function(ed, e) {

-				e = e.target;

-

-				if (e.nodeName == 'IMG') {

-					t.selElm = e;

-					ed.selection.select(e);

-				} else

-					t.selElm = null;

-			});

-

-/*			ed.onBeforeExecCommand.add(function(ed, c, b) {

-				var r = t.bookmarkRng;

-

-				// Restore selection

-				if (r) {

-					ed.selection.setRng(r);

-					t.bookmarkRng = null;

-					//console.debug('restore', r.startContainer, r.startOffset, r.endContainer, r.endOffset);

-				}

-			});*/

-

-			ed.onInit.add(function() {

-				t._fixWebKitSpans();

-

-/*				ed.windowManager.onOpen.add(function() {

-					var r = ed.selection.getRng();

-

-					// Store selection if valid

-					if (r.startContainer != ed.getDoc()) {

-						t.bookmarkRng = r.cloneRange();

-						//console.debug('store', r.startContainer, r.startOffset, r.endContainer, r.endOffset);

-					}

-				});

-

-				ed.windowManager.onClose.add(function() {

-					t.bookmarkRng = null;

-				});*/

-

-				if (isOldWebKit)

-					t._patchSafari2x(ed);

-			});

-

-			ed.onSetContent.add(function() {

-				dom = ed.dom;

-

-				// Convert strong,b,em,u,strike to spans

-				each(['strong','b','em','u','strike','sub','sup','a'], function(v) {

-					each(grep(dom.select(v)).reverse(), function(n) {

-						var nn = n.nodeName.toLowerCase(), st;

-

-						// Convert anchors into images

-						if (nn == 'a') {

-							if (n.name)

-								dom.replace(dom.create('img', {mce_name : 'a', name : n.name, 'class' : 'mceItemAnchor'}), n);

-

-							return;

-						}

-

-						switch (nn) {

-							case 'b':

-							case 'strong':

-								if (nn == 'b')

-									nn = 'strong';

-

-								st = 'font-weight: bold;';

-								break;

-

-							case 'em':

-								st = 'font-style: italic;';

-								break;

-

-							case 'u':

-								st = 'text-decoration: underline;';

-								break;

-

-							case 'sub':

-								st = 'vertical-align: sub;';

-								break;

-

-							case 'sup':

-								st = 'vertical-align: super;';

-								break;

-

-							case 'strike':

-								st = 'text-decoration: line-through;';

-								break;

-						}

-

-						dom.replace(dom.create('span', {mce_name : nn, style : st, 'class' : 'Apple-style-span'}), n, 1);

-					});

-				});

-			});

-

-			ed.onPreProcess.add(function(ed, o) {

-				dom = ed.dom;

-

-				each(grep(o.node.getElementsByTagName('span')).reverse(), function(n) {

-					var v, bg;

-

-					if (o.get) {

-						if (dom.hasClass(n, 'Apple-style-span')) {

-							bg = n.style.backgroundColor;

-

-							switch (dom.getAttrib(n, 'mce_name')) {

-								case 'font':

-									if (!ed.settings.convert_fonts_to_spans)

-										dom.setAttrib(n, 'style', '');

-									break;

-

-								case 'strong':

-								case 'em':

-								case 'sub':

-								case 'sup':

-									dom.setAttrib(n, 'style', '');

-									break;

-

-								case 'strike':

-								case 'u':

-									if (!ed.settings.inline_styles)

-										dom.setAttrib(n, 'style', '');

-									else

-										dom.setAttrib(n, 'mce_name', '');

-

-									break;

-

-								default:

-									if (!ed.settings.inline_styles)

-										dom.setAttrib(n, 'style', '');

-							}

-

-

-							if (bg)

-								n.style.backgroundColor = bg;

-						}

-					}

-

-					if (dom.hasClass(n, 'mceItemRemoved'))

-						dom.remove(n, 1);

-				});

-			});

-

-			ed.onPostProcess.add(function(ed, o) {

-				// Safari adds BR at end of all block elements

-				o.content = o.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g, '</$1>');

-

-				// Safari adds id="undefined" to HR elements

-				o.content = o.content.replace(/ id=\"undefined\"/g, '');

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Safari compatibility',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Internal methods

-

-		_fixWebKitSpans : function() {

-			var t = this, ed = t.editor;

-

-			if (!isOldWebKit) {

-				// Use mutator events on new WebKit

-				Event.add(ed.getDoc(), 'DOMNodeInserted', function(e) {

-					e = e.target;

-

-					if (e && e.nodeType == 1)

-						t._fixAppleSpan(e);

-				});

-			} else {

-				// Do post command processing in old WebKit since the browser crashes on Mutator events :(

-				ed.onExecCommand.add(function() {

-					each(ed.dom.select('span'), function(n) {

-						t._fixAppleSpan(n);

-					});

-

-					ed.nodeChanged();

-				});

-			}

-		},

-

-		_fixAppleSpan : function(e) {

-			var ed = this.editor, dom = ed.dom, fz = this.webKitFontSizes, fzn = this.namedFontSizes, s = ed.settings, st, p;

-

-			if (dom.getAttrib(e, 'mce_fixed'))

-				return;

-

-			// Handle Apple style spans

-			if (e.nodeName == 'SPAN' && e.className == 'Apple-style-span') {

-				st = e.style;

-

-				if (!s.convert_fonts_to_spans) {

-					if (st.fontSize) {

-						dom.setAttrib(e, 'mce_name', 'font');

-						dom.setAttrib(e, 'size', inArray(fz, st.fontSize) + 1);

-					}

-

-					if (st.fontFamily) {

-						dom.setAttrib(e, 'mce_name', 'font');

-						dom.setAttrib(e, 'face', st.fontFamily);

-					}

-

-					if (st.color) {

-						dom.setAttrib(e, 'mce_name', 'font');

-						dom.setAttrib(e, 'color', dom.toHex(st.color));

-					}

-

-					if (st.backgroundColor) {

-						dom.setAttrib(e, 'mce_name', 'font');

-						dom.setStyle(e, 'background-color', st.backgroundColor);

-					}

-				} else {

-					if (st.fontSize)

-						dom.setStyle(e, 'fontSize', fzn[inArray(fz, st.fontSize)]);

-				}

-

-				if (st.fontWeight == 'bold')

-					dom.setAttrib(e, 'mce_name', 'strong');

-

-				if (st.fontStyle == 'italic')

-					dom.setAttrib(e, 'mce_name', 'em');

-

-				if (st.textDecoration == 'underline')

-					dom.setAttrib(e, 'mce_name', 'u');

-

-				if (st.textDecoration == 'line-through')

-					dom.setAttrib(e, 'mce_name', 'strike');

-

-				if (st.verticalAlign == 'super')

-					dom.setAttrib(e, 'mce_name', 'sup');

-

-				if (st.verticalAlign == 'sub')

-					dom.setAttrib(e, 'mce_name', 'sub');

-

-				dom.setAttrib(e, 'mce_fixed', '1');

-			}

-		},

-

-		_patchSafari2x : function(ed) {

-			var t = this, setContent, getNode, dom = ed.dom, lr;

-

-			// Inline dialogs

-			if (ed.windowManager.onBeforeOpen) {

-				ed.windowManager.onBeforeOpen.add(function() {

-					r = ed.selection.getRng();

-				});

-			}

-

-			// Fake select on 2.x

-			ed.selection.select = function(n) {

-				this.getSel().setBaseAndExtent(n, 0, n, 1);

-			};

-

-			getNode = ed.selection.getNode;

-			ed.selection.getNode = function() {

-				return t.selElm || getNode.call(this);

-			};

-

-			// Fake range on Safari 2.x

-			ed.selection.getRng = function() {

-				var t = this, s = t.getSel(), d = ed.getDoc(), r, rb, ra, di;

-

-				// Fake range on Safari 2.x

-				if (s.anchorNode) {

-					r = d.createRange();

-

-					try {

-						// Setup before range

-						rb = d.createRange();

-						rb.setStart(s.anchorNode, s.anchorOffset);

-						rb.collapse(1);

-

-						// Setup after range

-						ra = d.createRange();

-						ra.setStart(s.focusNode, s.focusOffset);

-						ra.collapse(1);

-

-						// Setup start/end points by comparing locations

-						di = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;

-						r.setStart(di ? s.anchorNode : s.focusNode, di ? s.anchorOffset : s.focusOffset);

-						r.setEnd(di ? s.focusNode : s.anchorNode, di ? s.focusOffset : s.anchorOffset);

-

-						lr = r;

-					} catch (ex) {

-						// Sometimes fails, at least we tried to do it by the book. I hope Safari 2.x will go disappear soooon!!!

-					}

-				}

-

-				return r || lr;

-			};

-

-			// Fix setContent so it works

-			setContent = ed.selection.setContent;

-			ed.selection.setContent = function(h, s) {

-				var r = this.getRng(), b;

-

-				try {

-					setContent.call(this, h, s);

-				} catch (ex) {

-					// Workaround for Safari 2.x

-					b = dom.create('body');

-					b.innerHTML = h;

-

-					each(b.childNodes, function(n) {

-						r.insertNode(n.cloneNode(true));

-					});

-				}

-			};

-		},

-

-		_insertBR : function(ed) {

-			var dom = ed.dom, s = ed.selection, r = s.getRng(), br;

-

-			// Insert BR element

-			r.insertNode(br = dom.create('br'));

-

-			// Place caret after BR

-			r.setStartAfter(br);

-			r.setEndAfter(br);

-			s.setRng(r);

-

-			// Could not place caret after BR then insert an nbsp entity and move the caret

-			if (s.getSel().focusNode == br.previousSibling) {

-				s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));

-				s.collapse(1);

-			}

-

-			// Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117

-			ed.getWin().scrollTo(0, dom.getPos(s.getRng().startContainer).y);

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('safari', tinymce.plugins.Safari);

-})();

-

 

--- a/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js
+++ /dev/null
@@ -1,101 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.Save', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceSave', t._save, t);

-			ed.addCommand('mceCancel', t._cancel, t);

-

-			// Register buttons

-			ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'});

-			ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'});

-

-			ed.onNodeChange.add(t._nodeChange, t);

-			ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave');

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Save',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Private methods

-

-		_nodeChange : function(ed, cm, n) {

-			var ed = this.editor;

-

-			if (ed.getParam('save_enablewhendirty')) {

-				cm.setDisabled('save', !ed.isDirty());

-				cm.setDisabled('cancel', !ed.isDirty());

-			}

-		},

-

-		// Private methods

-

-		_save : function() {

-			var ed = this.editor, formObj, os, i, elementId;

-

-			formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');

-

-			if (ed.getParam("save_enablewhendirty") && !ed.isDirty())

-				return;

-

-			tinyMCE.triggerSave();

-

-			// Use callback instead

-			if (os = ed.getParam("save_onsavecallback")) {

-				if (ed.execCallback('save_onsavecallback', ed)) {

-					ed.startContent = tinymce.trim(ed.getContent({format : 'raw'}));

-					ed.nodeChanged();

-				}

-

-				return;

-			}

-

-			if (formObj) {

-				ed.isNotDirty = true;

-

-				if (formObj.onsubmit == null || formObj.onsubmit() != false)

-					formObj.submit();

-

-				ed.nodeChanged();

-			} else

-				ed.windowManager.alert("Error: No form element found.");

-		},

-

-		_cancel : function() {

-			var ed = this.editor, os, h = tinymce.trim(ed.startContent);

-

-			// Use callback instead

-			if (os = ed.getParam("save_oncancelcallback")) {

-				ed.execCallback('save_oncancelcallback', ed);

-				return;

-			}

-

-			ed.setContent(h);

-			ed.undoManager.clear();

-			ed.nodeChanged();

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('save', tinymce.plugins.Save);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
+++ /dev/null
@@ -1,7 +1,1 @@
-.panel_wrapper {height:85px;}

-.panel_wrapper div.current {height:85px;}

-

-/* IE */

-* html .panel_wrapper {height:100px;}

-* html .panel_wrapper div.current {height:100px;}

 

--- a/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
+++ /dev/null
@@ -1,61 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.SearchReplacePlugin', {

-		init : function(ed, url) {

-			function open(m) {

-				// Keep IE from writing out the f/r character to the editor

-				// instance while initializing a new dialog. See: #3131190

-				window.focus();

-

-				ed.windowManager.open({

-					file : url + '/searchreplace.htm',

-					width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),

-					height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)),

-					inline : 1,

-					auto_focus : 0

-				}, {

-					mode : m,

-					search_string : ed.selection.getContent({format : 'text'}),

-					plugin_url : url

-				});

-			};

-

-			// Register commands

-			ed.addCommand('mceSearch', function() {

-				open('search');

-			});

-

-			ed.addCommand('mceReplace', function() {

-				open('replace');

-			});

-

-			// Register buttons

-			ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});

-			ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});

-

-			ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch');

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Search/Replace',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
+++ /dev/null
@@ -1,143 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var SearchReplaceDialog = {

-	init : function(ed) {

-		var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");

-

-		t.switchMode(m);

-

-		f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");

-

-		// Focus input field

-		f[m + '_panel_searchstring'].focus();

-		

-		mcTabs.onChange.add(function(tab_id, panel_id) {

-			t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));

-		});

-	},

-

-	switchMode : function(m) {

-		var f, lm = this.lastMode;

-

-		if (lm != m) {

-			f = document.forms[0];

-

-			if (lm) {

-				f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;

-				f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;

-				f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;

-				f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;

-			}

-

-			mcTabs.displayTab(m + '_tab',  m + '_panel');

-			document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";

-			document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";

-			this.lastMode = m;

-		}

-	},

-

-	searchNext : function(a) {

-		var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;

-

-		// Get input

-		f = document.forms[0];

-		s = f[m + '_panel_searchstring'].value;

-		b = f[m + '_panel_backwardsu'].checked;

-		ca = f[m + '_panel_casesensitivebox'].checked;

-		rs = f['replace_panel_replacestring'].value;

-

-		if (tinymce.isIE) {

-			r = ed.getDoc().selection.createRange();

-		}

-

-		if (s == '')

-			return;

-

-		function fix() {

-			// Correct Firefox graphics glitches

-			// TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? 

-			r = se.getRng().cloneRange();

-			ed.getDoc().execCommand('SelectAll', false, null);

-			se.setRng(r);

-		};

-

-		function replace() {

-			ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE

-		};

-

-		// IE flags

-		if (ca)

-			fl = fl | 4;

-

-		switch (a) {

-			case 'all':

-				// Move caret to beginning of text

-				ed.execCommand('SelectAll');

-				ed.selection.collapse(true);

-

-				if (tinymce.isIE) {

-					ed.focus();

-					r = ed.getDoc().selection.createRange();

-

-					while (r.findText(s, b ? -1 : 1, fl)) {

-						r.scrollIntoView();

-						r.select();

-						replace();

-						fo = 1;

-

-						if (b) {

-							r.moveEnd("character", -(rs.length)); // Otherwise will loop forever

-						}

-					}

-

-					tinyMCEPopup.storeSelection();

-				} else {

-					while (w.find(s, ca, b, false, false, false, false)) {

-						replace();

-						fo = 1;

-					}

-				}

-

-				if (fo)

-					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));

-				else

-					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));

-

-				return;

-

-			case 'current':

-				if (!ed.selection.isCollapsed())

-					replace();

-

-				break;

-		}

-

-		se.collapse(b);

-		r = se.getRng();

-

-		// Whats the point

-		if (!s)

-			return;

-

-		if (tinymce.isIE) {

-			ed.focus();

-			r = ed.getDoc().selection.createRange();

-

-			if (r.findText(s, b ? -1 : 1, fl)) {

-				r.scrollIntoView();

-				r.select();

-			} else

-				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));

-

-			tinyMCEPopup.storeSelection();

-		} else {

-			if (!w.find(s, ca, b, false, false, false, false))

-				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));

-			else

-				fix();

-		}

-	}

-};

-

-tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm
+++ /dev/null
@@ -1,101 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#searchreplace_dlg.replace_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="js/searchreplace.js"></script>

-	<link rel="stylesheet" type="text/css" href="css/searchreplace.css" />

-</head>

-<body style="display:none;" role="application" aria-labelledby="app_title">

-<span id="app_title" style="display:none">{#searchreplace_dlg.replace_title}</span>

-<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="search_tab" aria-controls="search_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>

-			<li id="replace_tab" aria-controls="replace_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="search_panel" class="panel">

-			<table role="presentation" border="0" cellspacing="0" cellpadding="2">

-				<tr>

-					<td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>

-					<td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" aria-required="true" /></td>

-				</tr>

-				<tr>

-					<td colspan="2">

-						<table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">

-							<tr role="group" aria-labelledby="search_panel_backwards_label">

-								<td><label id="search_panel_backwards_label">{#searchreplace_dlg.direction}</label></td>

-								<td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>

-								<td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>

-								<td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>

-								<td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>

-							</tr>

-						</table>

-					</td>

-				</tr>

-				<tr>

-					<td colspan="2">

-						<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-							<tr>

-								<td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>

-								<td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>

-							</tr>

-						</table>

-					</td>

-				</tr>

-			</table>

-		</div>

-

-		<div id="replace_panel" class="panel">

-			<table role="presentation" border="0" cellspacing="0" cellpadding="2">

-				<tr>

-					<td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>

-					<td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" aria-required="true" /></td>

-				</tr>

-				<tr>

-					<td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>

-					<td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" aria-required="true" /></td>

-				</tr>

-				<tr>

-					<td colspan="2">

-						<table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">

-							<tr role="group" aria-labelledby="replace_panel_dir_label">

-								<td><label id="replace_panel_dir_label">{#searchreplace_dlg.direction}</label></td>

-								<td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>

-								<td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>

-								<td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>

-								<td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>

-							</tr>

-						</table>

-					</td>

-				</tr>

-				<tr>

-					<td colspan="2">

-						<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-							<tr>

-								<td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>

-								<td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>

-							</tr>

-						</table>

-					</td>

-				</tr>

-			</table>

-		</div>

-

-	</div>

-

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />

-		<input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />

-		<input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css
+++ /dev/null
@@ -1,2 +1,1 @@
-.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}

 

--- a/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@

+

--- a/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
+++ /dev/null
@@ -1,437 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;

-

-	tinymce.create('tinymce.plugins.SpellcheckerPlugin', {

-		getInfo : function() {

-			return {

-				longname : 'Spellchecker',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		init : function(ed, url) {

-			var t = this, cm;

-

-			t.url = url;

-			t.editor = ed;

-			t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}");

-

-			if (t.rpcUrl == '{backend}') {

-				// Sniff if the browser supports native spellchecking (Don't know of a better way)

-				if (tinymce.isIE)

-					return;

-

-				t.hasSupport = true;

-

-				// Disable the context menu when spellchecking is active

-				ed.onContextMenu.addToTop(function(ed, e) {

-					if (t.active)

-						return false;

-				});

-			}

-

-			// Register commands

-			ed.addCommand('mceSpellCheck', function() {

-				if (t.rpcUrl == '{backend}') {

-					// Enable/disable native spellchecker

-					t.editor.getBody().spellcheck = t.active = !t.active;

-					return;

-				}

-

-				if (!t.active) {

-					ed.setProgressState(1);

-					t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {

-						if (r.length > 0) {

-							t.active = 1;

-							t._markWords(r);

-							ed.setProgressState(0);

-							ed.nodeChanged();

-						} else {

-							ed.setProgressState(0);

-

-							if (ed.getParam('spellchecker_report_no_misspellings', true))

-								ed.windowManager.alert('spellchecker.no_mpell');

-						}

-					});

-				} else

-					t._done();

-			});

-

-			if (ed.settings.content_css !== false)

-				ed.contentCSS.push(url + '/css/content.css');

-

-			ed.onClick.add(t._showMenu, t);

-			ed.onContextMenu.add(t._showMenu, t);

-			ed.onBeforeGetContent.add(function() {

-				if (t.active)

-					t._removeWords();

-			});

-

-			ed.onNodeChange.add(function(ed, cm) {

-				cm.setActive('spellchecker', t.active);

-			});

-

-			ed.onSetContent.add(function() {

-				t._done();

-			});

-

-			ed.onBeforeGetContent.add(function() {

-				t._done();

-			});

-

-			ed.onBeforeExecCommand.add(function(ed, cmd) {

-				if (cmd == 'mceFullScreen')

-					t._done();

-			});

-

-			// Find selected language

-			t.languages = {};

-			each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {

-				if (k.indexOf('+') === 0) {

-					k = k.substring(1);

-					t.selectedLang = v;

-				}

-

-				t.languages[k] = v;

-			});

-		},

-

-		createControl : function(n, cm) {

-			var t = this, c, ed = t.editor;

-

-			if (n == 'spellchecker') {

-				// Use basic button if we use the native spellchecker

-				if (t.rpcUrl == '{backend}') {

-					// Create simple toggle button if we have native support

-					if (t.hasSupport)

-						c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});

-

-					return c;

-				}

-

-				c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});

-

-				c.onRenderMenu.add(function(c, m) {

-					m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

-					each(t.languages, function(v, k) {

-						var o = {icon : 1}, mi;

-

-						o.onclick = function() {

-							if (v == t.selectedLang) {

-								return;

-							}

-							mi.setSelected(1);

-							t.selectedItem.setSelected(0);

-							t.selectedItem = mi;

-							t.selectedLang = v;

-						};

-

-						o.title = k;

-						mi = m.add(o);

-						mi.setSelected(v == t.selectedLang);

-

-						if (v == t.selectedLang)

-							t.selectedItem = mi;

-					})

-				});

-

-				return c;

-			}

-		},

-

-		// Internal functions

-

-		_walk : function(n, f) {

-			var d = this.editor.getDoc(), w;

-

-			if (d.createTreeWalker) {

-				w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);

-

-				while ((n = w.nextNode()) != null)

-					f.call(this, n);

-			} else

-				tinymce.walk(n, f, 'childNodes');

-		},

-

-		_getSeparators : function() {


-

-			// Build word separator regexp

-			for (i=0; i<str.length; i++)

-				re += '\\' + str.charAt(i);

-

-			return re;

-		},

-

-		_getWords : function() {

-			var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = [];

-

-			// Get area text

-			this._walk(ed.getBody(), function(n) {

-				if (n.nodeType == 3)

-					tx += n.nodeValue + ' ';

-			});

-

-			// split the text up into individual words

-			if (ed.getParam('spellchecker_word_pattern')) {

-				// look for words that match the pattern

-				rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi');

-			} else {

-				// Split words by separator

-				tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');

-				tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));

-				rawWords = tx.split(' ');

-			}

-

-			// Build word array and remove duplicates

-			each(rawWords, function(v) {

-				if (!lo[v]) {

-					wl.push(v);

-					lo[v] = 1;

-				}

-			});

-

-			return wl;

-		},

-

-		_removeWords : function(w) {

-			var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();

-

-			each(dom.select('span').reverse(), function(n) {

-				if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {

-					if (!w || dom.decode(n.innerHTML) == w)

-						dom.remove(n, 1);

-				}

-			});

-

-			se.moveToBookmark(b);

-		},

-

-		_markWords : function(wl) {

-			var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, b = se.getBookmark(), nl = [],

-				w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g');

-

-			// Collect all text nodes

-			this._walk(ed.getBody(), function(n) {

-				if (n.nodeType == 3) {

-					nl.push(n);

-				}

-			});

-

-			// Wrap incorrect words in spans

-			each(nl, function(n) {

-				var node, elem, txt, pos, v = n.nodeValue;

-

-				if (rx.test(v)) {

-					// Encode the content

-					v = dom.encode(v);

-					// Create container element

-					elem = dom.create('span', {'class' : 'mceItemHidden'});

-

-					// Following code fixes IE issues by creating text nodes

-					// using DOM methods instead of innerHTML.

-					// Bug #3124: <PRE> elements content is broken after spellchecking.

-					// Bug #1408: Preceding whitespace characters are removed

-					// @TODO: I'm not sure that both are still issues on IE9.

-					if (tinymce.isIE) {

-						// Enclose mispelled words with temporal tag

-						v = v.replace(rx, '$1<mcespell>$2</mcespell>');

-						// Loop over the content finding mispelled words

-						while ((pos = v.indexOf('<mcespell>')) != -1) {

-							// Add text node for the content before the word

-							txt = v.substring(0, pos);

-							if (txt.length) {

-								node = doc.createTextNode(dom.decode(txt));

-								elem.appendChild(node);

-							}

-							v = v.substring(pos+10);

-							pos = v.indexOf('</mcespell>');

-							txt = v.substring(0, pos);

-							v = v.substring(pos+11);

-							// Add span element for the word

-							elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt));

-						}

-						// Add text node for the rest of the content

-						if (v.length) {

-							node = doc.createTextNode(dom.decode(v));

-							elem.appendChild(node);

-						}

-					} else {

-						// Other browsers preserve whitespace characters on innerHTML usage

-						elem.innerHTML = v.replace(rx, '$1<span class="mceItemHiddenSpellWord">$2</span>');

-					}

-

-					// Finally, replace the node with the container

-					dom.replace(elem, n);

-				}

-			});

-

-			se.moveToBookmark(b);

-		},

-

-		_showMenu : function(ed, e) {

-			var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target;

-

-			e = 0; // Fixes IE memory leak

-

-			if (!m) {

-				m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'});

-				t._menu = m;

-			}

-

-			if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) {

-				m.removeAll();

-				m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

-

-				t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) {

-					var ignoreRpc;

-

-					m.removeAll();

-

-					if (r.length > 0) {

-						m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

-						each(r, function(v) {

-							m.add({title : v, onclick : function() {

-								dom.replace(ed.getDoc().createTextNode(v), wordSpan);

-								t._checkDone();

-							}});

-						});

-

-						m.addSeparator();

-					} else

-						m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

-

-					if (ed.getParam('show_ignore_words', true)) {

-						ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');

-						m.add({

-							title : 'spellchecker.ignore_word',

-							onclick : function() {

-								var word = wordSpan.innerHTML;

-

-								dom.remove(wordSpan, 1);

-								t._checkDone();

-

-								// tell the server if we need to

-								if (ignoreRpc) {

-									ed.setProgressState(1);

-									t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {

-										ed.setProgressState(0);

-									});

-								}

-							}

-						});

-

-						m.add({

-							title : 'spellchecker.ignore_words',

-							onclick : function() {

-								var word = wordSpan.innerHTML;

-

-								t._removeWords(dom.decode(word));

-								t._checkDone();

-

-								// tell the server if we need to

-								if (ignoreRpc) {

-									ed.setProgressState(1);

-									t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {

-										ed.setProgressState(0);

-									});

-								}

-							}

-						});

-					}

-

-					if (t.editor.getParam("spellchecker_enable_learn_rpc")) {

-						m.add({

-							title : 'spellchecker.learn_word',

-							onclick : function() {

-								var word = wordSpan.innerHTML;

-

-								dom.remove(wordSpan, 1);

-								t._checkDone();

-

-								ed.setProgressState(1);

-								t._sendRPC('learnWord', [t.selectedLang, word], function(r) {

-									ed.setProgressState(0);

-								});

-							}

-						});

-					}

-

-					m.update();

-				});

-

-				p1 = DOM.getPos(ed.getContentAreaContainer());

-				m.settings.offset_x = p1.x;

-				m.settings.offset_y = p1.y;

-

-				ed.selection.select(wordSpan);

-				p1 = dom.getPos(wordSpan);

-				m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);

-

-				return tinymce.dom.Event.cancel(e);

-			} else

-				m.hideMenu();

-		},

-

-		_checkDone : function() {

-			var t = this, ed = t.editor, dom = ed.dom, o;

-

-			each(dom.select('span'), function(n) {

-				if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {

-					o = true;

-					return false;

-				}

-			});

-

-			if (!o)

-				t._done();

-		},

-

-		_done : function() {

-			var t = this, la = t.active;

-

-			if (t.active) {

-				t.active = 0;

-				t._removeWords();

-

-				if (t._menu)

-					t._menu.hideMenu();

-

-				if (la)

-					t.editor.nodeChanged();

-			}

-		},

-

-		_sendRPC : function(m, p, cb) {

-			var t = this;

-

-			JSONRequest.sendRPC({

-				url : t.rpcUrl,

-				method : m,

-				params : p,

-				success : cb,

-				error : function(e, x) {

-					t.editor.setProgressState(0);

-					t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));

-				}

-			});

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);

-})();

 

 Binary files a/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/plugins/style/css/props.css
+++ /dev/null
@@ -1,14 +1,1 @@
-#text_font {width:250px;}

-#text_size {width:70px;}

-.mceAddSelectValue {background:#DDD;}

-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 {border-left:1px solid gray;}

-.tdelim {border-bottom:1px solid gray;}

-#block_display {width:145px;}

-#list_type {width:115px;}

-.disabled {background:#EEE;}

 

--- a/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js
+++ /dev/null
@@ -1,55 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.StylePlugin', {

-		init : function(ed, url) {

-			// Register commands

-			ed.addCommand('mceStyleProps', function() {

-				ed.windowManager.open({

-					file : url + '/props.htm',

-					width : 480 + parseInt(ed.getLang('style.delta_width', 0)),

-					height : 320 + parseInt(ed.getLang('style.delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url,

-					style_text : ed.selection.getNode().style.cssText

-				});

-			});

-

-			ed.addCommand('mceSetElementStyle', function(ui, v) {

-				if (e = ed.selection.getNode()) {

-					ed.dom.setAttrib(e, 'style', v);

-					ed.execCommand('mceRepaint');

-				}

-			});

-

-			ed.onNodeChange.add(function(ed, cm, n) {

-				cm.setDisabled('styleprops', n.nodeName === 'BODY');

-			});

-

-			// Register buttons

-			ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Style',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/style/js/props.js
+++ /dev/null
@@ -1,636 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-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;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";

-var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";

-var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";

-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'), h;

-

-	ce.style.cssText = tinyMCEPopup.getWindowArg('style_text');

-

-	h = getBrowserHTML('background_image_browser','background_image','image','advimage');

-	document.getElementById("background_image_browser").innerHTML = h;

-

-	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 = tinyMCEPopup.editor.dom.toHex(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 = tinyMCEPopup.editor.dom.toHex(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));

-	selectByValue(f, 'box_float', ce.style.cssFloat || 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');

-

-	f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value);

-	f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value);

-	f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value);

-	f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value);

-

-	// 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', '', '', ['top', 'right', 'bottom', 'left']);

-

-	s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1");

-	s = s.replace(/,/g, ' ');

-

-	if (!hasEqualValues([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 = s.split(' ');

-

-	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 = ['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 = [], i, x;

-

-	if (typeof(b) == "undefined")

-		b = ['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<a.length; i++) {

-		if (a[i] == null)

-			return false;

-

-		for (x=0; x<a.length; x++) {

-			if (a[x] != a[i])

-				return false;

-		}

-	}

-

-	return true;

-};

-

-function hasEqualValues(a) {

-	var i, x;

-

-	for (i=0; i<a.length; i++) {

-		if (a[i] == null)

-			return false;

-

-		for (x=0; x<a.length; x++) {

-			if (a[x] != a[i])

-				return false;

-		}

-	}

-

-	return true;

-}

-

-function applyAction() {

-	var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;

-

-	generateCSS();

-

-	tinyMCEPopup.restoreSelection();

-	ed.dom.setAttrib(ed.selection.getSelectedBlocks(), 'style', tinyMCEPopup.editor.dom.serializeStyle(tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText)));

-}

-

-function updateAction() {

-	applyAction();

-	tinyMCEPopup.close();

-}

-

-function generateCSS() {

-	var ce = document.getElementById('container'), f = document.forms[0], num = new RegExp('[0-9]+', 'g'), s, t;

-

-	ce.style.cssText = "";

-

-	// Build text styles

-	ce.style.fontFamily = f.text_font.value;

-	ce.style.fontSize = f.text_size.value + (isNum(f.text_size.value) ? (f.text_size_measurement.value || 'px') : "");

-	ce.style.fontStyle = f.text_style.value;

-	ce.style.lineHeight = f.text_lineheight.value + (isNum(f.text_lineheight.value) ? f.text_lineheight_measurement.value : "");

-	ce.style.textTransform = f.text_case.value;

-	ce.style.fontWeight = f.text_weight.value;

-	ce.style.fontVariant = f.text_variant.value;

-	ce.style.color = f.text_color.value;

-

-	s = "";

-	s += f.text_underline.checked ? " underline" : "";

-	s += f.text_overline.checked ? " overline" : "";

-	s += f.text_linethrough.checked ? " line-through" : "";

-	s += f.text_blink.checked ? " blink" : "";

-	s = s.length > 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;

-	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 + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.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 = 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<f.length; i++) {

-		for (a=0; a<f[i].elements.length; a++) {

-			if (f[i].elements[a].disabled)

-				tinyMCEPopup.editor.dom.addClass(f[i].elements[a], "disabled");

-			else

-				tinyMCEPopup.editor.dom.removeClass(f[i].elements[a], "disabled");

-		}

-	}

-}

-

-function fillSelect(f, s, param, dval, sep, em) {

-	var i, ar, p, se;

-

-	f = document.forms[f];

-	sep = typeof(sep) == "undefined" ? ";" : sep;

-

-	if (em)

-		addSelectValue(f, s, "", "");

-

-	ar = tinyMCEPopup.getParam(param, dval).split(sep);

-	for (i=0; i<ar.length; i++) {

-		se = false;

-

-		if (ar[i].charAt(0) == '+') {

-			ar[i] = ar[i].substring(1);

-			se = true;

-		}

-

-		p = ar[i].split('=');

-

-		if (p.length > 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);

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/style/props.htm
+++ /dev/null
@@ -1,841 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-	<title>{#style_dlg.title}</title>
-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
-	<script type="text/javascript" src="../../utils/mctabs.js"></script>
-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>
-	<script type="text/javascript" src="../../utils/form_utils.js"></script>
-	<script type="text/javascript" src="js/props.js"></script>
-	<link href="css/props.css" rel="stylesheet" type="text/css" />
-</head>
 
-<body id="styleprops" style="display: none" role="application" aria-labelledby="app_title">
-<span id="app_title" style="display:none">{#style_dlg.title}</span>
-<form onsubmit="updateAction();return false;" action="#">
-<div class="tabs">
-	<ul>
-		<li id="text_tab" class="current" aria-controls="text_panel"><span><a href="javascript:mcTabs.displayTab('text_tab','text_panel');" onMouseDown="return false;">{#style_dlg.text_tab}</a></span></li>
-		<li id="background_tab" aria-controls="background_panel"><span><a href="javascript:mcTabs.displayTab('background_tab','background_panel');" onMouseDown="return false;">{#style_dlg.background_tab}</a></span></li>
-		<li id="block_tab" aria-controls="block_panel"><span><a href="javascript:mcTabs.displayTab('block_tab','block_panel');" onMouseDown="return false;">{#style_dlg.block_tab}</a></span></li>
-		<li id="box_tab" aria-controls="box_panel"><span><a href="javascript:mcTabs.displayTab('box_tab','box_panel');" onMouseDown="return false;">{#style_dlg.box_tab}</a></span></li>
-		<li id="border_tab" aria-controls="border_panel"><span><a href="javascript:mcTabs.displayTab('border_tab','border_panel');" onMouseDown="return false;">{#style_dlg.border_tab}</a></span></li>
-		<li id="list_tab" aria-controls="list_panel"><span><a href="javascript:mcTabs.displayTab('list_tab','list_panel');" onMouseDown="return false;">{#style_dlg.list_tab}</a></span></li>
-		<li id="positioning_tab" aria-controls="positioning_panel"><span><a href="javascript:mcTabs.displayTab('positioning_tab','positioning_panel');" onMouseDown="return false;">{#style_dlg.positioning_tab}</a></span></li>
-	</ul>
-</div>
-
-<div class="panel_wrapper">
-<div id="text_panel" class="panel current">
-	<fieldset>
-		<legend>{#style_dlg.text}</legend>
-		<table role="presentation" border="0" width="100%">
-			<tr>
-				<td><label for="text_font">{#style_dlg.text_font}</label></td>
-				<td colspan="3">
-					<select id="text_font" name="text_font" class="mceEditableSelect mceFocus"></select>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="text_size">{#style_dlg.text_size}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><select id="text_size" name="text_size" class="mceEditableSelect"></select></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="text_size_measurement_label" for="text_size_measurement" style="display: none; visibility: hidden;">Text Size Measurement Unit</label>
-								<select id="text_size_measurement" name="text_size_measurement" aria-labelledby="text_size_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-				<td><label for="text_weight">{#style_dlg.text_weight}</label></td>
-				<td>
-					<select id="text_weight" name="text_weight"></select>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="text_style">{#style_dlg.text_style}</label></td>
-				<td>
-					<select id="text_style" name="text_style" class="mceEditableSelect"></select>
-				</td>
-				<td><label for="text_variant">{#style_dlg.text_variant}</label></td>
-				<td>
-					<select id="text_variant" name="text_variant"></select>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="text_lineheight">{#style_dlg.text_lineheight}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td>
-								<select id="text_lineheight" name="text_lineheight" class="mceEditableSelect"></select>
-							</td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="text_lineheight_measurement_label" for="text_lineheight_measurement" style="display: none; visibility: hidden;">Line Height Measurement Unit</label>
-								<select id="text_lineheight_measurement" name="text_lineheight_measurement" aria-labelledby="text_lineheight_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-				<td><label for="text_case">{#style_dlg.text_case}</label></td>
-				<td>
-					<select id="text_case" name="text_case"></select>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="text_color">{#style_dlg.text_color}</label></td>
-				<td colspan="2">
-					<table role="presentation" border="0" cellpadding="0" cellspacing="0">
-						<tr>
-							<td><input id="text_color" name="text_color" type="text" value="" size="9" onChange="updateColor('text_color_pick','text_color');" /></td>
-							<td id="text_color_pickcontainer">&nbsp;</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td valign="top" style="vertical-align: top; padding-top: 3px;">{#style_dlg.text_decoration}</td>
-				<td colspan="2">
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input id="text_underline" name="text_underline" class="checkbox" type="checkbox" /></td>
-							<td><label for="text_underline">{#style_dlg.text_underline}</label></td>
-						</tr>
-						<tr>
-							<td><input id="text_overline" name="text_overline" class="checkbox" type="checkbox" /></td>
-							<td><label for="text_overline">{#style_dlg.text_overline}</label></td>
-						</tr>
-						<tr>
-							<td><input id="text_linethrough" name="text_linethrough" class="checkbox" type="checkbox" /></td>
-							<td><label for="text_linethrough">{#style_dlg.text_striketrough}</label></td>
-						</tr>
-						<tr>
-							<td><input id="text_blink" name="text_blink" class="checkbox" type="checkbox" /></td>
-							<td><label for="text_blink">{#style_dlg.text_blink}</label></td>
-						</tr>
-						<tr>
-							<td><input id="text_none" name="text_none" class="checkbox" type="checkbox" /></td>
-							<td><label for="text_none">{#style_dlg.text_none}</label></td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-	</fieldset>
-</div>
-
-<div id="background_panel" class="panel">
-	<fieldset>
-		<legend>{#style_dlg.background}</legend>
-		<table role="presentation" border="0">
-			<tr>
-				<td><label for="background_color">{#style_dlg.background_color}</label></td>
-				<td>
-					<table role="presentation" border="0" cellpadding="0" cellspacing="0">
-						<tr>
-							<td><input id="background_color" name="background_color" type="text" value="" size="9" onChange="updateColor('background_color_pick','background_color');" /></td>
-							<td id="background_color_pickcontainer">&nbsp;</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-
-			<tr>
-				<td><label for="background_image">{#style_dlg.background_image}</label></td>
-				<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
-					<tr> 
-						<td><input id="background_image" name="background_image" type="text" /></td> 
-						<td id="background_image_browser">&nbsp;</td>
-					</tr>
-					</table>
-				</td>
-			</tr>
-
-			<tr>
-				<td><label for="background_repeat">{#style_dlg.background_repeat}</label></td>
-				<td><select id="background_repeat" name="background_repeat" class="mceEditableSelect"></select></td>
-			</tr>
-
-			<tr>
-				<td><label for="background_attachment">{#style_dlg.background_attachment}</label></td>
-				<td><select id="background_attachment" name="background_attachment" class="mceEditableSelect"></select></td>
-			</tr>
-
-			<tr>
-				<td><label for="background_hpos">{#style_dlg.background_hpos}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><select id="background_hpos" name="background_hpos" class="mceEditableSelect"></select></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="background_hpos_measurement_label" for="background_hpos_measurement" style="display: none; visibility: hidden;">Horizontal position measurement unit</label>
-								<select id="background_hpos_measurement" name="background_hpos_measurement" aria-labelledby="background_hpos_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-
-			<tr>
-				<td><label for="background_vpos">{#style_dlg.background_vpos}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><select id="background_vpos" name="background_vpos" class="mceEditableSelect"></select></td>
-							<td>&nbsp;</td>
-							<td>
-
-								<label id="background_vpos_measurement_label" for="background_vpos_measurement" style="display: none; visibility: hidden;">Vertical position measurement unit</label>
-								<select id="background_vpos_measurement" name="background_vpos_measurement" aria-labelledby="background_vpos_measurement_label">></select></td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-	</fieldset>
-</div>
-
-<div id="block_panel" class="panel">
-	<fieldset>
-		<legend>{#style_dlg.block}</legend>
-		<table role="presentation" border="0">
-			<tr>
-				<td><label for="block_wordspacing">{#style_dlg.block_wordspacing}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><select id="block_wordspacing" name="block_wordspacing" class="mceEditableSelect"></select></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="block_wordspacing_measurement_label" for="block_wordspacing_measurement" style="display: none; visibility: hidden;">Word spacing measurement unit</label>
-								<select id="block_wordspacing_measurement" name="block_wordspacing_measurement" aria-labelledby="block_wordspacing_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-
-			<tr>
-				<td><label for="block_letterspacing">{#style_dlg.block_letterspacing}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><select id="block_letterspacing" name="block_letterspacing" class="mceEditableSelect"></select></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="block_letterspacing_measurement_label" for="block_letterspacing_measurement" style="display: none; visibility: hidden;">Letter spacing measurement unit</label>
-								<select id="block_letterspacing_measurement" name="block_letterspacing_measurement" aria-labelledby="block_letterspacing_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-
-			<tr>
-				<td><label for="block_vertical_alignment">{#style_dlg.block_vertical_alignment}</label></td>
-				<td><select id="block_vertical_alignment" name="block_vertical_alignment" class="mceEditableSelect"></select></td>
-			</tr>
-
-			<tr>
-				<td><label for="block_text_align">{#style_dlg.block_text_align}</label></td>
-				<td><select id="block_text_align" name="block_text_align" class="mceEditableSelect"></select></td>
-			</tr>
-
-			<tr>
-				<td><label for="block_text_indent">{#style_dlg.block_text_indent}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="block_text_indent" name="block_text_indent" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="block_text_indent_measurement_label" for="block_text_indent_measurement" style="display: none; visibility: hidden;">Text Indent Measurement Unit</label>
-
-								<select id="block_text_indent_measurement" name="block_text_indent_measurement" aria-labelledby="block_text_indent_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-
-			<tr>
-				<td><label for="block_whitespace">{#style_dlg.block_whitespace}</label></td>
-				<td><select id="block_whitespace" name="block_whitespace" class="mceEditableSelect"></select></td>
-			</tr>
-
-			<tr>
-				<td><label for="block_display">{#style_dlg.block_display}</label></td>
-				<td><select id="block_display" name="block_display" class="mceEditableSelect"></select></td>
-			</tr>
-		</table>
-	</fieldset>
-</div>
-
-<div id="box_panel" class="panel">
-	<fieldset>
-		<legend>{#style_dlg.box}</legend>
-		<table role="presentation" border="0">
-			<tr>
-				<td><label for="box_width">{#style_dlg.box_width}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_width" name="box_width" class="mceEditableSelect" onChange="synch('box_width','positioning_width');" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_width_measurement_label" for="box_width_measurement" style="display: none; visibility: hidden;">Box Width Measurement Unit</label>
-								<select id="box_width_measurement" name="box_width_measurement" aria-labelledby="box_width_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-				<td>&nbsp;&nbsp;&nbsp;<label for="box_float">{#style_dlg.box_float}</label></td>
-				<td><select id="box_float" name="box_float" class="mceEditableSelect"></select></td>
-			</tr>
-
-			<tr>
-				<td><label for="box_height">{#style_dlg.box_height}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_height" name="box_height" class="mceEditableSelect" onChange="synch('box_height','positioning_height');" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_height_measurement_label" for="box_height_measurement" style="display: none; visibility: hidden;">Box Height Measurement Unit</label>
-								<select id="box_height_measurement" name="box_height_measurement" aria-labelledby="box_height_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-				<td>&nbsp;&nbsp;&nbsp;<label for="box_clear">{#style_dlg.box_clear}</label></td>
-				<td><select id="box_clear" name="box_clear" class="mceEditableSelect"></select></td>
-			</tr>
-		</table>
-	</fieldset>
-
-<div style="float: left; width: 49%">
-	<fieldset>
-		<legend>{#style_dlg.padding}</legend>
-
-		<table role="presentation" border="0">
-			<tr>
-				<td>&nbsp;</td>
-				<td><input type="checkbox" id="box_padding_same" name="box_padding_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_padding');" /> <label for="box_padding_same">{#style_dlg.same}</label></td>
-			</tr>
-			<tr>
-				<td><label for="box_padding_top">{#style_dlg.top}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_padding_top" name="box_padding_top" class="mceEditableSelect" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_padding_top_measurement_label" for="box_padding_top_measurement" style="display: none; visibility: hidden;">Padding Top Measurement Unit</label>
-								<select id="box_padding_top_measurement" name="box_padding_top_measurement" aria-labelledby="box_padding_top_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="box_padding_right">{#style_dlg.right}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_padding_right" name="box_padding_right" class="mceEditableSelect" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_padding_right_measurement_label" for="box_padding_right_measurement" style="display: none; visibility: hidden;">Padding Right Measurement Unit</label>
-								<select id="box_padding_right_measurement" name="box_padding_right_measurement" disabled="disabled" aria-labelledby="box_padding_right_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="box_padding_bottom">{#style_dlg.bottom}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_padding_bottom" name="box_padding_bottom" class="mceEditableSelect" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_padding_bottom_measurement_label" for="box_padding_bottom_measurement" style="display: none; visibility: hidden;">Padding Bottom Measurement Unit</label>
-								<select id="box_padding_bottom_measurement" name="box_padding_bottom_measurement" disabled="disabled" aria-labelledby="box_padding_bottom_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="box_padding_left">{#style_dlg.left}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_padding_left" name="box_padding_left" class="mceEditableSelect" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_padding_left_measurement_label" for="box_padding_left_measurement" style="display: none; visibility: hidden;">Padding Left Measurement Unit</label>
-								<select id="box_padding_left_measurement" name="box_padding_left_measurement" disabled="disabled" aria-labelledby="box_padding_left_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-	</fieldset>
-</div>
-
-<div style="float: right; width: 49%">
-	<fieldset>
-		<legend>{#style_dlg.margin}</legend>
-
-		<table role="presentation" border="0">
-			<tr>
-				<td>&nbsp;</td>
-				<td><input type="checkbox" id="box_margin_same" name="box_margin_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_margin');" /> <label for="box_margin_same">{#style_dlg.same}</label></td>
-			</tr>
-			<tr>
-				<td><label for="box_margin_top">{#style_dlg.top}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_margin_top" name="box_margin_top" class="mceEditableSelect" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_margin_top_measurement_label" for="box_margin_top_measurement" style="display: none; visibility: hidden;">Margin Top Measurement Unit</label>
-								<select id="box_margin_top_measurement" name="box_margin_top_measurement" aria-labelledby="box_margin_top_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="box_margin_right">{#style_dlg.right}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_margin_right" name="box_margin_right" class="mceEditableSelect" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_margin_right_measurement_label" for="box_margin_right_measurement" style="display: none; visibility: hidden;">Margin Right Measurement Unit</label>
-								<select id="box_margin_right_measurement" name="box_margin_right_measurement" disabled="disabled" aria-labelledby="box_margin_right_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="box_margin_bottom">{#style_dlg.bottom}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_margin_bottom" name="box_margin_bottom" class="mceEditableSelect" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_margin_bottom_measurement_label" for="box_margin_bottom_measurement" style="display: none; visibility: hidden;">Margin Bottom Measurement Unit</label>
-								<select id="box_margin_bottom_measurement" name="box_margin_bottom_measurement" disabled="disabled" aria-labelledby="box_margin_bottom_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td><label for="box_margin_left">{#style_dlg.left}</label></td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="box_margin_left" name="box_margin_left" class="mceEditableSelect" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="box_margin_left_measurement_label" for="box_margin_left_measurement" style="display: none; visibility: hidden;">Margin Left Measurement Unit</label>
-								<select id="box_margin_left_measurement" name="box_margin_left_measurement" disabled="disabled" aria-labelledby="box_margin_left_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-	</fieldset>
-</div>
-<br style="clear: both" />
-</div>
-
-<div id="border_panel" class="panel">
-	<fieldset>
-		<legend>{#style_dlg.border}</legend>	
-		<table role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%">
-		<tr>
-			<td class="tdelim">&nbsp;</td>
-			<td class="tdelim delim">&nbsp;</td>
-			<td class="tdelim">{#style_dlg.style}</td>
-			<td class="tdelim delim">&nbsp;</td>
-			<td class="tdelim">{#style_dlg.width}</td>
-			<td class="tdelim delim">&nbsp;</td>
-			<td class="tdelim">{#style_dlg.color}</td>
-		</tr>
-
-		<tr>
-			<td>&nbsp;</td>
-			<td class="delim">&nbsp;</td>
-			<td><input type="checkbox" id="border_style_same" name="border_style_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_style');" /> <label for="border_style_same">{#style_dlg.same}</label></td>
-			<td class="delim">&nbsp;</td>
-			<td><input type="checkbox" id="border_width_same" name="border_width_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_width');" /> <label for="border_width_same">{#style_dlg.same}</label></td>
-			<td class="delim">&nbsp;</td>
-			<td><input type="checkbox" id="border_color_same" name="border_color_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_color');" /> <label for="border_color_same">{#style_dlg.same}</label></td>
-		</tr>
-
-		<tr>
-			<td>{#style_dlg.top}</td>
-			<td class="delim">&nbsp;</td>
-			<td><select id="border_style_top" name="border_style_top" class="mceEditableSelect"></select></td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-					<tr>
-						<td><select id="border_width_top" name="border_width_top" class="mceEditableSelect"></select></td>
-						<td>&nbsp;</td>
-						<td>
-							<label id="border_width_top_measurement_label" for="border_width_top_measurement" style="display: none; visibility: hidden;">Width top Measurement Unit</label>
-							<select id="border_width_top_measurement" name="border_width_top_measurement" aria-labelledby="border_width_top_measurement_label"></select>
-						</td>
-					</tr>
-				</table>
-			</td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
-					<tr>
-						<td><input id="border_color_top" name="border_color_top" type="text" value="" size="9" onChange="updateColor('border_color_top_pick','border_color_top');" /></td>
-						<td id="border_color_top_pickcontainer">&nbsp;</td>
-					</tr>
-				</table>
-			</td>
-		</tr>
-
-		<tr>
-			<td>{#style_dlg.right}</td>
-			<td class="delim">&nbsp;</td>
-			<td><select id="border_style_right" name="border_style_right" class="mceEditableSelect" disabled="disabled"></select></td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-					<tr>
-						<td><select id="border_width_right" name="border_width_right" class="mceEditableSelect" disabled="disabled"></select></td>
-						<td>&nbsp;</td>
-						<td>
-							<label id="border_width_right_measurement_label" for="border_width_right_measurement" style="display: none; visibility: hidden;">Width Right Measurement Unit</label>
-							<select id="border_width_right_measurement" name="border_width_right_measurement" disabled="disabled" aria-labelledby="border_width_right_measurement_label"></select>
-						</td>
-					</tr>
-				</table>
-			</td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
-					<tr>
-						<td><input id="border_color_right" name="border_color_right" type="text" value="" size="9" onChange="updateColor('border_color_right_pick','border_color_right');" disabled="disabled" /></td>
-						<td id="border_color_right_pickcontainer">&nbsp;</td>
-					</tr>
-				</table>
-			</td>
-		</tr>
-
-		<tr>
-			<td>{#style_dlg.bottom}</td>
-			<td class="delim">&nbsp;</td>
-			<td><select id="border_style_bottom" name="border_style_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-					<tr>
-						<td><select id="border_width_bottom" name="border_width_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
-						<td>&nbsp;</td>
-						<td>
-							<label id="border_width_bottom_measurement_label" for="border_width_bottom_measurement" style="display: none; visibility: hidden;">Width Bottom Measurement Unit</label>
-							<select id="border_width_bottom_measurement" name="border_width_bottom_measurement" disabled="disabled" aria-labelledby="border_width_bottom_measurement_label"></select>
-						</td>
-					</tr>
-				</table>
-			</td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
-					<tr>
-						<td><input id="border_color_bottom" name="border_color_bottom" type="text" value="" size="9" onChange="updateColor('border_color_bottom_pick','border_color_bottom');" disabled="disabled" /></td>
-						<td id="border_color_bottom_pickcontainer">&nbsp;</td>
-					</tr>
-				</table>
-			</td>
-		</tr>
-
-		<tr>
-			<td>{#style_dlg.left}</td>
-			<td class="delim">&nbsp;</td>
-			<td><select id="border_style_left" name="border_style_left" class="mceEditableSelect" disabled="disabled"></select></td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-					<tr>
-						<td><select id="border_width_left" name="border_width_left" class="mceEditableSelect" disabled="disabled"></select></td>
-						<td>&nbsp;</td>
-						<td>
-							<label id="border_width_left_measurement_label" for="border_width_left_measurement" style="display: none; visibility: hidden;">Width Left Measurement Unit</label>
-							<select id="border_width_left_measurement" name="border_width_left_measurement" disabled="disabled" aria-labelledby="border_width_left_measurement_label"></select>
-						</td>
-					</tr>
-				</table>
-			</td>
-			<td class="delim">&nbsp;</td>
-			<td>
-				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
-					<tr>
-						<td><input id="border_color_left" name="border_color_left" type="text" value="" size="9" onChange="updateColor('border_color_left_pick','border_color_left');" disabled="disabled" /></td>
-						<td id="border_color_left_pickcontainer">&nbsp;</td>
-					</tr>
-				</table>
-			</td>
-		</tr>
-		</table>
-	</fieldset>
-</div>
-
-<div id="list_panel" class="panel">
-<fieldset>
-	<legend>{#style_dlg.list}</legend>
-	<table role="presentation" border="0">
-		<tr>
-			<td><label for="list_type">{#style_dlg.list_type}</label></td>
-			<td><select id="list_type" name="list_type" class="mceEditableSelect"></select></td>
-		</tr>
-
-		<tr>
-			<td><label for="list_bullet_image">{#style_dlg.bullet_image}</label></td>
-			<td><input id="list_bullet_image" name="list_bullet_image" type="text" /></td>
-		</tr>
-
-		<tr>
-			<td><label for="list_position">{#style_dlg.position}</label></td>
-			<td><select id="list_position" name="list_position" class="mceEditableSelect"></select></td>
-		</tr>
-	</table>
-</fieldset>
-</div>
-
-<div id="positioning_panel" class="panel">
-<fieldset>
-	<legend>{#style_dlg.position}</legend>
-<table role="presentation" border="0">
-	<tr>
-		<td><label for="positioning_type">{#style_dlg.positioning_type}</label></td>
-		<td><select id="positioning_type" name="positioning_type" class="mceEditableSelect"></select></td>
-		<td>&nbsp;&nbsp;&nbsp;<label for="positioning_visibility">{#style_dlg.visibility}</label></td>
-		<td><select id="positioning_visibility" name="positioning_visibility" class="mceEditableSelect"></select></td>
-	</tr>
-
-	<tr>
-		<td><label for="positioning_width">{#style_dlg.width}</label></td>
-		<td>
-			<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-				<tr>
-					<td><input type="text" id="positioning_width" name="positioning_width" onChange="synch('positioning_width','box_width');" /></td>
-					<td>&nbsp;</td>
-					<td>
-						<label id="positioning_width_measurement_label" for="positioning_width_measurement" style="display: none; visibility: hidden;">Positioning width Measurement Unit</label>
-						<select id="positioning_width_measurement" name="positioning_width_measurement" aria-labelledby="positioning_width_measurement_label"></select>
-					</td>
-				</tr>
-			</table>
-		</td>
-		<td>&nbsp;&nbsp;&nbsp;<label for="positioning_zindex">{#style_dlg.zindex}</label></td>
-		<td><input type="text" id="positioning_zindex" name="positioning_zindex" /></td>
-	</tr>
-
-	<tr>
-		<td><label for="positioning_height">{#style_dlg.height}</label></td>
-		<td>
-			<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-				<tr>
-					<td><input type="text" id="positioning_height" name="positioning_height" onChange="synch('positioning_height','box_height');" /></td>
-					<td>&nbsp;</td>
-					<td>
-						<label id="positioning_height_measurement_label" for="positioning_height_measurement" style="display: none; visibility: hidden;">Positioning Height Measurement Unit</label>
-						<select id="positioning_height_measurement" name="positioning_height_measurement" aria-labelledby="positioning_height_measurement_label"></select>
-					</td>
-				</tr>
-			</table>
-		</td>
-		<td>&nbsp;&nbsp;&nbsp;<label for="positioning_overflow">{#style_dlg.overflow}</label></td>
-		<td><select id="positioning_overflow" name="positioning_overflow" class="mceEditableSelect"></select></td>
-	</tr>
-</table>
-</fieldset>
-
-<div style="float: left; width: 49%">
-	<fieldset>
-		<legend>{#style_dlg.placement}</legend>
-
-		<table role="presentation" border="0">
-			<tr>
-				<td>&nbsp;</td>
-				<td><input type="checkbox" id="positioning_placement_same" name="positioning_placement_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_placement');" /> <label for="positioning_placement_same">{#style_dlg.same}</label></td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.top}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_placement_top" name="positioning_placement_top" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_placement_top_measurement_label" for="positioning_placement_top_measurement" style="display: none; visibility: hidden;">Placement Top Measurement Unit</label>
-								<select id="positioning_placement_top_measurement" name="positioning_placement_top_measurement" aria-labelledby="positioning_placement_top_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.right}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_placement_right" name="positioning_placement_right" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_placement_right_measurement_label" for="positioning_placement_right_measurement" style="display: none; visibility: hidden;">Placement Right Measurement Unit</label>
-								<select id="positioning_placement_right_measurement" name="positioning_placement_right_measurement" disabled="disabled" aria-labelledby="positioning_placement_right_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.bottom}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_placement_bottom" name="positioning_placement_bottom" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_placement_bottom_measurement_label" for="positioning_placement_bottom_measurement" style="display: none; visibility: hidden;">Placement Bottom Measurement Unit</label>
-								<select id="positioning_placement_bottom_measurement" name="positioning_placement_bottom_measurement" disabled="disabled" aria-labelledby="positioning_placement_bottom_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.left}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_placement_left" name="positioning_placement_left" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_placement_left_measurement_label" for="positioning_placement_left_measurement" style="display: none; visibility: hidden;">Placement Left Measurement Unit</label>
-								<select id="positioning_placement_left_measurement" name="positioning_placement_left_measurement" disabled="disabled" aria-labelledby="positioning_placement_left_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-	</fieldset>
-</div>
-
-<div style="float: right; width: 49%">
-	<fieldset>
-		<legend>{#style_dlg.clip}</legend>
-
-		<table role="presentation" border="0">
-			<tr>
-				<td>&nbsp;</td>
-				<td><input type="checkbox" id="positioning_clip_same" name="positioning_clip_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_clip');" /> <label for="positioning_clip_same">{#style_dlg.same}</label></td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.top}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_clip_top" name="positioning_clip_top" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_clip_top_measurement_label" for="positioning_clip_top_measurement" style="display: none; visibility: hidden;">Clip Top Measurement Unit</label>
-								<select id="positioning_clip_top_measurement" name="positioning_clip_top_measurement" aria-labelledby="positioning_clip_top_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.right}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_clip_right" name="positioning_clip_right" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_clip_right_measurement_label" for="positioning_clip_right_measurement" style="display: none; visibility: hidden;">Clip Right Measurement Unit</label>
-								<select id="positioning_clip_right_measurement" name="positioning_clip_right_measurement" disabled="disabled" aria-labelledby="positioning_clip_right_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.bottom}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_clip_bottom" name="positioning_clip_bottom" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_clip_bottom_measurement_label" for="positioning_clip_bottom_measurement" style="display: none; visibility: hidden;">Clip Bottom Measurement Unit</label>
-								<select id="positioning_clip_bottom_measurement" name="positioning_clip_bottom_measurement" disabled="disabled" aria-labelledby="positioning_clip_bottom_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-			<tr>
-				<td>{#style_dlg.left}</td>
-				<td>
-					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
-						<tr>
-							<td><input type="text" id="positioning_clip_left" name="positioning_clip_left" disabled="disabled" /></td>
-							<td>&nbsp;</td>
-							<td>
-								<label id="positioning_clip_left_measurement_label" for="positioning_clip_left_measurement" style="display: none; visibility: hidden;">Clip Left Measurement Unit</label>
-								<select id="positioning_clip_left_measurement" name="positioning_clip_left_measurement" disabled="disabled" aria-labelledby="positioning_clip_left_measurement_label"></select>
-							</td>
-						</tr>
-					</table>
-				</td>
-			</tr>
-		</table>
-	</fieldset>
-</div>
-<br style="clear: both" />
-</div>
-</div>
-
-<div class="mceActionPanel">
-	<input type="submit" id="insert" name="insert" value="{#update}" />
-	<input type="button" class="button" id="apply" name="apply" value="{#style_dlg.apply}" onClick="applyAction();" />
-	<input type="button" id="cancel" name="cancel" value="{#cancel}" onClick="tinyMCEPopup.close();" />
-</div>
-</form>
-
-<div style="display: none">
-	<div id="container"></div>
-</div>
-
-</body>
-</html>
-

--- a/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m<n.length;m++){if(r(n[m])){return n[m]}}}else{for(m=j-1;m>=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
+++ /dev/null
@@ -1,123 +1,1 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
 
-(function() {
-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;
-
-	tinymce.create('tinymce.plugins.TabFocusPlugin', {
-		init : function(ed, url) {
-			function tabCancel(ed, e) {
-				if (e.keyCode === 9)
-					return Event.cancel(e);
-			}
-
-			function tabHandler(ed, e) {
-				var x, i, f, el, v;
-
-				function find(d) {
-					el = DOM.select(':input:enabled,*[tabindex]');
-
-					function canSelectRecursive(e) {
-						return e.nodeName==="BODY" || (e.type != 'hidden' &&
-							!(e.style.display == "none") &&
-							!(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode));
-					}
-					function canSelectInOldIe(el) {
-						return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA";
-					}
-					function isOldIe() {
-						return tinymce.isIE6 || tinymce.isIE7;
-					}
-					function canSelect(el) {
-						return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el);
-					}
-
-					each(el, function(e, i) {
-						if (e.id == ed.id) {
-							x = i;
-							return false;
-						}
-					});
-					if (d > 0) {
-						for (i = x + 1; i < el.length; i++) {
-							if (canSelect(el[i]))
-								return el[i];
-						}
-					} else {
-						for (i = x - 1; i >= 0; i--) {
-							if (canSelect(el[i]))
-								return el[i];
-						}
-					}
-
-					return null;
-				}
-
-				if (e.keyCode === 9) {
-					v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));
-
-					if (v.length == 1) {
-						v[1] = v[0];
-						v[0] = ':prev';
-					}
-
-					// Find element to focus
-					if (e.shiftKey) {
-						if (v[0] == ':prev')
-							el = find(-1);
-						else
-							el = DOM.get(v[0]);
-					} else {
-						if (v[1] == ':next')
-							el = find(1);
-						else
-							el = DOM.get(v[1]);
-					}
-
-					if (el) {
-						if (el.id && (ed = tinymce.get(el.id || el.name)))
-							ed.focus();
-						else
-							window.setTimeout(function() {
-								if (!tinymce.isWebKit)
-									window.focus();
-								el.focus();
-							}, 10);
-
-						return Event.cancel(e);
-					}
-				}
-			}
-
-			ed.onKeyUp.add(tabCancel);
-
-			if (tinymce.isGecko) {
-				ed.onKeyPress.add(tabHandler);
-				ed.onKeyDown.add(tabCancel);
-			} else
-				ed.onKeyDown.add(tabHandler);
-
-		},
-
-		getInfo : function() {
-			return {
-				longname : 'Tabfocus',
-				author : 'Moxiecode Systems AB',
-				authorurl : 'http://tinymce.moxiecode.com',
-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',
-				version : tinymce.majorVersion + "." + tinymce.minorVersion
-			};
-		}
-	});
-
-	// Register plugin
-	tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);
-})();
-

--- a/tinymce/jscripts/tiny_mce/plugins/table/cell.htm
+++ /dev/null
@@ -1,181 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#table_dlg.cell_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/cell.js"></script>

-	<link href="css/cell.css" rel="stylesheet" type="text/css" />

-</head>

-<body id="tablecell" style="display: none" role="application">

-	<form onsubmit="updateAction();return false;" action="#">

-		<div class="tabs">

-			<ul>

-				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>

-				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="general_panel" class="panel current">

-				<fieldset>

-					<legend>{#table_dlg.general_props}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td><label for="align">{#table_dlg.align}</label></td>

-							<td>

-								<select id="align" name="align" class="mceFocus">

-									<option value="">{#not_set}</option>

-									<option value="center">{#table_dlg.align_middle}</option>

-									<option value="left">{#table_dlg.align_left}</option>

-									<option value="right">{#table_dlg.align_right}</option>

-								</select>

-							</td>

-		

-							<td><label for="celltype">{#table_dlg.cell_type}</label></td>

-							<td>

-								<select id="celltype" name="celltype">

-									<option value="td">{#table_dlg.td}</option>

-									<option value="th">{#table_dlg.th}</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="valign">{#table_dlg.valign}</label></td>

-							<td>

-								<select id="valign" name="valign">

-									<option value="">{#not_set}</option>

-									<option value="top">{#table_dlg.align_top}</option>

-									<option value="middle">{#table_dlg.align_middle}</option>

-									<option value="bottom">{#table_dlg.align_bottom}</option>

-								</select>

-							</td>

-

-							<td><label for="scope">{#table_dlg.scope}</label></td>

-							<td>

-								<select id="scope" name="scope">

-									<option value="">{#not_set}</option>

-									<option value="col">{#table.col}</option>

-									<option value="row">{#table.row}</option>

-									<option value="rowgroup">{#table_dlg.rowgroup}</option>

-									<option value="colgroup">{#table_dlg.colgroup}</option>

-								</select>

-							</td>

-

-						</tr>

-

-						<tr>

-							<td><label for="width">{#table_dlg.width}</label></td>

-							<td><input id="width" name="width" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

-

-							<td><label for="height">{#table_dlg.height}</label></td>

-							<td><input id="height" name="height" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

-						</tr>

-

-						<tr id="styleSelectRow">

-							<td><label for="class">{#class_name}</label></td>

-							<td colspan="3">

-								<select id="class" name="class" class="mceEditableSelect">

-									<option value="" selected="selected">{#not_set}</option>

-								</select>

-							</td>

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="advanced_panel" class="panel">

-				<fieldset>

-					<legend>{#table_dlg.advanced_props}</legend>

-

-					<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-						<tr>

-							<td class="column1"><label for="id">{#table_dlg.id}</label></td> 

-							<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> 

-						</tr>

-

-						<tr>

-							<td><label for="style">{#table_dlg.style}</label></td>

-							<td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> 

-							<td>

-								<select id="dir" name="dir" style="width: 200px"> 

-										<option value="">{#not_set}</option> 

-										<option value="ltr">{#table_dlg.ltr}</option> 

-										<option value="rtl">{#table_dlg.rtl}</option> 

-								</select>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> 

-							<td>

-								<input id="lang" name="lang" type="text" value="" style="width: 200px" />

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> 

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>

-										<td id="backgroundimagebrowsercontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-

-						<tr role="group" aria-labelledby="bordercolor_label">

-							<td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td> 

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>

-										<td id="bordercolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-

-						<tr role="group" aria-labelledby="bgcolor_label">

-							<td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td> 

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>

-										<td id="bgcolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<div>

-				<select id="action" name="action">

-					<option value="cell">{#table_dlg.cell_cell}</option>

-					<option value="row">{#table_dlg.cell_row}</option>

-					<option value="col">{#table_dlg.cell_col}</option>

-					<option value="all">{#table_dlg.cell_all}</option>

-				</select>

-			</div>

-

-			<input type="submit" id="insert" name="insert" value="{#update}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css
+++ /dev/null
@@ -1,17 +1,1 @@
-/* CSS file for cell dialog in the table plugin */

-

-.panel_wrapper div.current {

-	height: 200px;

-}

-

-.advfield {

-	width: 200px;

-}

-

-#action {

-	margin-bottom: 3px;

-}

-

-#class {

-	width: 150px;

-}
+

--- a/tinymce/jscripts/tiny_mce/plugins/table/css/row.css
+++ /dev/null
@@ -1,26 +1,1 @@
-/* CSS file for row dialog in the table plugin */

-

-.panel_wrapper div.current {

-	height: 200px;

-}

-

-.advfield {

-	width: 200px;

-}

-

-#action {

-	margin-bottom: 3px;

-}

-

-#rowtype,#align,#valign,#class,#height {

-	width: 150px;

-}

-

-#height {

-	width: 50px;	

-}

-

-.col2 {

-	padding-left: 20px;

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/css/table.css
+++ /dev/null
@@ -1,14 +1,1 @@
-/* CSS file for table dialog in the table plugin */

-

-.panel_wrapper div.current {

-	height: 245px;

-}

-

-.advfield {

-	width: 200px;

-}

-

-#class {

-	width: 150px;

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T<Q+U;T++){if(!g[T]){g[T]=[]}for(S=R;S<R+V;S++){g[T][S]={part:N,real:T==Q&&S==R,elm:W,rowspan:U,colspan:V}}}})});M+=O.length})}function z(M,O){var N;N=g[O];if(N){return N[M]}}function s(O,M,N){if(O){N=parseInt(N);if(N===1){O.removeAttribute(M,1)}else{O.setAttribute(M,N,1)}}}function j(M){return M&&(G.hasClass(M.elm,"mceSelected")||M==o)}function k(){var M=[];e(H.rows,function(N){e(N.cells,function(O){if(G.hasClass(O,"mceSelected")||O==o.elm){M.push(N);return false}})});return M}function r(){var M=G.createRng();M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H)}function f(M){var N;d.walk(M,function(P){var O;if(P.nodeType==3){e(G.getParents(P.parentNode,null,M).reverse(),function(Q){Q=A(Q,false);if(!N){N=O=Q}else{if(O){O.appendChild(Q)}}O=Q});if(O){O.innerHTML=d.isIE?"&nbsp;":'<br data-mce-bogus="1" />'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='<br data-mce-bogus="1" />'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q<S-1;Q++){G.insertAfter(f(P),P)}u(O,N,R-1,S)}}})})}function p(V,S,Y){var P,O,X,W,U,R,T,M,V,N,Q;if(V){pos=F(V);P=pos.x;O=pos.y;X=P+(S-1);W=O+(Y-1)}else{P=L.x;O=L.y;X=D.x;W=D.y}T=z(P,O);M=z(X,W);if(T&&M&&T.part==M.part){C();t();T=z(P,O).elm;s(T,"colSpan",(X-P)+1);s(T,"rowSpan",(W-O)+1);for(R=O;R<=W;R++){for(U=P;U<=X;U++){if(!g[R]||!g[R][U]){continue}V=g[R][U].elm;if(V!=T){N=d.grep(V.childNodes);e(N,function(Z){T.appendChild(Z)});if(N.length){N=d.grep(T.childNodes);Q=0;e(N,function(Z){if(Z.nodeName=="BR"&&G.getAttrib(Z,"data-mce-bogus")&&Q++<N.length-1){T.removeChild(Z)}})}G.remove(V)}}}q()}}function l(Q){var M,S,P,R,T,U,N,V,O;e(g,function(W,X){e(W,function(Z,Y){if(j(Z)){Z=Z.elm;T=Z.parentNode;U=A(T,false);M=X;if(Q){return false}}});if(Q){return !M}});for(R=0;R<g[0].length;R++){if(!g[M][R]){continue}S=g[M][R].elm;if(S!=P){if(!Q){O=a(S,"rowspan");if(O>1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;i<S;i++){R=T.cells[i];s(R,"colSpan",1);s(R,"rowSpan",1)}for(i=S;i<Q;i++){T.appendChild(f(T.cells[S-1]))}for(i=Q;i<S;i++){G.remove(T.cells[i])}if(N){M.parentNode.insertBefore(T,M)}else{G.insertAfter(T,M)}})}function F(M){var N;e(g,function(O,P){e(O,function(R,Q){if(R.elm==M){N={x:Q,y:P};return false}});return !N});return N}function w(M){L=F(M)}function I(){var O,N,M;N=M=0;e(g,function(P,Q){e(P,function(S,R){var U,T;if(j(S)){S=g[Q][R];if(R>N){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)<P){P-=S.colspan-1}}}for(x=P;x<=N;x++){S=g[O][x];if(!S.real){if(O-(S.rowspan-1)<O){O-=S.rowspan-1}}}for(y=O;y<=T;y++){for(x=P;x<=U;x++){S=g[y][x];if(S.real){Q=S.colspan-1;R=S.rowspan-1;if(Q){if(x+Q>N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){return S&&S[R?"lastChild":"firstChild"]}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}if(!d.isIE){function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){r.dom.add(r.getBody(),"p",null,'<br mce_bogus="1" />')}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&z.childNodes.length==1&&z.firstChild.nodeName=="BR"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})}});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce);
+

--- a/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js
+++ /dev/null
@@ -1,1409 +1,1 @@
-/**
- * editor_plugin_src.js
- *
- * Copyright 2009, Moxiecode Systems AB
- * Released under LGPL License.
- *
- * License: http://tinymce.moxiecode.com/license
- * Contributing: http://tinymce.moxiecode.com/contributing
- */
 
-(function(tinymce) {
-	var each = tinymce.each;
-
-	// Checks if the selection/caret is at the start of the specified block element
-	function isAtStart(rng, par) {
-		var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
-
-		rng2.setStartBefore(par);
-		rng2.setEnd(rng.endContainer, rng.endOffset);
-
-		elm = doc.createElement('body');
-		elm.appendChild(rng2.cloneContents());
-
-		// Check for text characters of other elements that should be treated as content
-		return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;
-	};
-
-	function getSpanVal(td, name) {
-		return parseInt(td.getAttribute(name) || 1);
-	}
-
-	/**
-	 * Table Grid class.
-	 */
-	function TableGrid(table, dom, selection) {
-		var grid, startPos, endPos, selectedCell;
-
-		buildGrid();
-		selectedCell = dom.getParent(selection.getStart(), 'th,td');
-		if (selectedCell) {
-			startPos = getPos(selectedCell);
-			endPos = findEndPos();
-			selectedCell = getCell(startPos.x, startPos.y);
-		}
-
-		function cloneNode(node, children) {
-			node = node.cloneNode(children);
-			node.removeAttribute('id');
-
-			return node;
-		}
-
-		function buildGrid() {
-			var startY = 0;
-
-			grid = [];
-
-			each(['thead', 'tbody', 'tfoot'], function(part) {
-				var rows = dom.select('> ' + part + ' tr', table);
-
-				each(rows, function(tr, y) {
-					y += startY;
-
-					each(dom.select('> td, > th', tr), function(td, x) {
-						var x2, y2, rowspan, colspan;
-
-						// Skip over existing cells produced by rowspan
-						if (grid[y]) {
-							while (grid[y][x])
-								x++;
-						}
-
-						// Get col/rowspan from cell
-						rowspan = getSpanVal(td, 'rowspan');
-						colspan = getSpanVal(td, 'colspan');
-
-						// Fill out rowspan/colspan right and down
-						for (y2 = y; y2 < y + rowspan; y2++) {
-							if (!grid[y2])
-								grid[y2] = [];
-
-							for (x2 = x; x2 < x + colspan; x2++) {
-								grid[y2][x2] = {
-									part : part,
-									real : y2 == y && x2 == x,
-									elm : td,
-									rowspan : rowspan,
-									colspan : colspan
-								};
-							}
-						}
-					});
-				});
-
-				startY += rows.length;
-			});
-		};
-
-		function getCell(x, y) {
-			var row;
-
-			row = grid[y];
-			if (row)
-				return row[x];
-		};
-
-		function setSpanVal(td, name, val) {
-			if (td) {
-				val = parseInt(val);
-
-				if (val === 1)
-					td.removeAttribute(name, 1);
-				else
-					td.setAttribute(name, val, 1);
-			}
-		}
-
-		function isCellSelected(cell) {
-			return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell);
-		};
-
-		function getSelectedRows() {
-			var rows = [];
-
-			each(table.rows, function(row) {
-				each(row.cells, function(cell) {
-					if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) {
-						rows.push(row);
-						return false;
-					}
-				});
-			});
-
-			return rows;
-		};
-
-		function deleteTable() {
-			var rng = dom.createRng();
-
-			rng.setStartAfter(table);
-			rng.setEndAfter(table);
-
-			selection.setRng(rng);
-
-			dom.remove(table);
-		};
-
-		function cloneCell(cell) {
-			var formatNode;
-
-			// Clone formats
-			tinymce.walk(cell, function(node) {
-				var curNode;
-
-				if (node.nodeType == 3) {
-					each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {
-						node = cloneNode(node, false);
-
-						if (!formatNode)
-							formatNode = curNode = node;
-						else if (curNode)
-							curNode.appendChild(node);
-
-						curNode = node;
-					});
-
-					// Add something to the inner node
-					if (curNode)
-						curNode.innerHTML = tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />';
-
-					return false;
-				}
-			}, 'childNodes');
-
-			cell = cloneNode(cell, false);
-			setSpanVal(cell, 'rowSpan', 1);
-			setSpanVal(cell, 'colSpan', 1);
-
-			if (formatNode) {
-				cell.appendChild(formatNode);
-			} else {
-				if (!tinymce.isIE)
-					cell.innerHTML = '<br data-mce-bogus="1" />';
-			}
-
-			return cell;
-		};
-
-		function cleanup() {
-			var rng = dom.createRng();
-
-			// Empty rows
-			each(dom.select('tr', table), function(tr) {
-				if (tr.cells.length == 0)
-					dom.remove(tr);
-			});
-
-			// Empty table
-			if (dom.select('tr', table).length == 0) {
-				rng.setStartAfter(table);
-				rng.setEndAfter(table);
-				selection.setRng(rng);
-				dom.remove(table);
-				return;
-			}
-
-			// Empty header/body/footer
-			each(dom.select('thead,tbody,tfoot', table), function(part) {
-				if (part.rows.length == 0)
-					dom.remove(part);
-			});
-
-			// Restore selection to start position if it still exists
-			buildGrid();
-
-			// Restore the selection to the closest table position
-			row = grid[Math.min(grid.length - 1, startPos.y)];
-			if (row) {
-				selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);
-				selection.collapse(true);
-			}
-		};
-
-		function fillLeftDown(x, y, rows, cols) {
-			var tr, x2, r, c, cell;
-
-			tr = grid[y][x].elm.parentNode;
-			for (r = 1; r <= rows; r++) {
-				tr = dom.getNext(tr, 'tr');
-
-				if (tr) {
-					// Loop left to find real cell
-					for (x2 = x; x2 >= 0; x2--) {
-						cell = grid[y + r][x2].elm;
-
-						if (cell.parentNode == tr) {
-							// Append clones after
-							for (c = 1; c <= cols; c++)
-								dom.insertAfter(cloneCell(cell), cell);
-
-							break;
-						}
-					}
-
-					if (x2 == -1) {
-						// Insert nodes before first cell
-						for (c = 1; c <= cols; c++)
-							tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);
-					}
-				}
-			}
-		};
-
-		function split() {
-			each(grid, function(row, y) {
-				each(row, function(cell, x) {
-					var colSpan, rowSpan, newCell, i;
-
-					if (isCellSelected(cell)) {
-						cell = cell.elm;
-						colSpan = getSpanVal(cell, 'colspan');
-						rowSpan = getSpanVal(cell, 'rowspan');
-
-						if (colSpan > 1 || rowSpan > 1) {
-							setSpanVal(cell, 'rowSpan', 1);
-							setSpanVal(cell, 'colSpan', 1);
-
-							// Insert cells right
-							for (i = 0; i < colSpan - 1; i++)
-								dom.insertAfter(cloneCell(cell), cell);
-
-							fillLeftDown(x, y, rowSpan - 1, colSpan);
-						}
-					}
-				});
-			});
-		};
-
-		function merge(cell, cols, rows) {
-			var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count;
-
-			// Use specified cell and cols/rows
-			if (cell) {
-				pos = getPos(cell);
-				startX = pos.x;
-				startY = pos.y;
-				endX = startX + (cols - 1);
-				endY = startY + (rows - 1);
-			} else {
-				// Use selection
-				startX = startPos.x;
-				startY = startPos.y;
-				endX = endPos.x;
-				endY = endPos.y;
-			}
-
-			// Find start/end cells
-			startCell = getCell(startX, startY);
-			endCell = getCell(endX, endY);
-
-			// Check if the cells exists and if they are of the same part for example tbody = tbody
-			if (startCell && endCell && startCell.part == endCell.part) {
-				// Split and rebuild grid
-				split();
-				buildGrid();
-
-				// Set row/col span to start cell
-				startCell = getCell(startX, startY).elm;
-				setSpanVal(startCell, 'colSpan', (endX - startX) + 1);
-				setSpanVal(startCell, 'rowSpan', (endY - startY) + 1);
-
-				// Remove other cells and add it's contents to the start cell
-				for (y = startY; y <= endY; y++) {
-					for (x = startX; x <= endX; x++) {
-						if (!grid[y] || !grid[y][x])
-							continue;
-
-						cell = grid[y][x].elm;
-
-						if (cell != startCell) {
-							// Move children to startCell
-							children = tinymce.grep(cell.childNodes);
-							each(children, function(node) {
-								startCell.appendChild(node);
-							});
-
-							// Remove bogus nodes if there is children in the target cell
-							if (children.length) {
-								children = tinymce.grep(startCell.childNodes);
-								count = 0;
-								each(children, function(node) {
-									if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1)
-										startCell.removeChild(node);
-								});
-							}
-							
-							// Remove cell
-							dom.remove(cell);
-						}
-					}
-				}
-
-				// Remove empty rows etc and restore caret location
-				cleanup();
-			}
-		};
-
-		function insertRow(before) {
-			var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan;
-
-			// Find first/last row
-			each(grid, function(row, y) {
-				each(row, function(cell, x) {
-					if (isCellSelected(cell)) {
-						cell = cell.elm;
-						rowElm = cell.parentNode;
-						newRow = cloneNode(rowElm, false);
-						posY = y;
-
-						if (before)
-							return false;
-					}
-				});
-
-				if (before)
-					return !posY;
-			});
-
-			for (x = 0; x < grid[0].length; x++) {
-				// Cell not found could be because of an invalid table structure
-				if (!grid[posY][x])
-					continue;
-
-				cell = grid[posY][x].elm;
-
-				if (cell != lastCell) {
-					if (!before) {
-						rowSpan = getSpanVal(cell, 'rowspan');
-						if (rowSpan > 1) {
-							setSpanVal(cell, 'rowSpan', rowSpan + 1);
-							continue;
-						}
-					} else {
-						// Check if cell above can be expanded
-						if (posY > 0 && grid[posY - 1][x]) {
-							otherCell = grid[posY - 1][x].elm;
-							rowSpan = getSpanVal(otherCell, 'rowSpan');
-							if (rowSpan > 1) {
-								setSpanVal(otherCell, 'rowSpan', rowSpan + 1);
-								continue;
-							}
-						}
-					}
-
-					// Insert new cell into new row
-					newCell = cloneCell(cell);
-					setSpanVal(newCell, 'colSpan', cell.colSpan);
-
-					newRow.appendChild(newCell);
-
-					lastCell = cell;
-				}
-			}
-
-			if (newRow.hasChildNodes()) {
-				if (!before)
-					dom.insertAfter(newRow, rowElm);
-				else
-					rowElm.parentNode.insertBefore(newRow, rowElm);
-			}
-		};
-
-		function insertCol(before) {
-			var posX, lastCell;
-
-			// Find first/last column
-			each(grid, function(row, y) {
-				each(row, function(cell, x) {
-					if (isCellSelected(cell)) {
-						posX = x;
-
-						if (before)
-							return false;
-					}
-				});
-
-				if (before)
-					return !posX;
-			});
-
-			each(grid, function(row, y) {
-				var cell, rowSpan, colSpan;
-
-				if (!row[posX])
-					return;
-
-				cell = row[posX].elm;
-				if (cell != lastCell) {
-					colSpan = getSpanVal(cell, 'colspan');
-					rowSpan = getSpanVal(cell, 'rowspan');
-
-					if (colSpan == 1) {
-						if (!before) {
-							dom.insertAfter(cloneCell(cell), cell);
-							fillLeftDown(posX, y, rowSpan - 1, colSpan);
-						} else {
-							cell.parentNode.insertBefore(cloneCell(cell), cell);
-							fillLeftDown(posX, y, rowSpan - 1, colSpan);
-						}
-					} else
-						setSpanVal(cell, 'colSpan', cell.colSpan + 1);
-
-					lastCell = cell;
-				}
-			});
-		};
-
-		function deleteCols() {
-			var cols = [];
-
-			// Get selected column indexes
-			each(grid, function(row, y) {
-				each(row, function(cell, x) {
-					if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) {
-						each(grid, function(row) {
-							var cell = row[x].elm, colSpan;
-
-							colSpan = getSpanVal(cell, 'colSpan');
-
-							if (colSpan > 1)
-								setSpanVal(cell, 'colSpan', colSpan - 1);
-							else
-								dom.remove(cell);
-						});
-
-						cols.push(x);
-					}
-				});
-			});
-
-			cleanup();
-		};
-
-		function deleteRows() {
-			var rows;
-
-			function deleteRow(tr) {
-				var nextTr, pos, lastCell;
-
-				nextTr = dom.getNext(tr, 'tr');
-
-				// Move down row spanned cells
-				each(tr.cells, function(cell) {
-					var rowSpan = getSpanVal(cell, 'rowSpan');
-
-					if (rowSpan > 1) {
-						setSpanVal(cell, 'rowSpan', rowSpan - 1);
-						pos = getPos(cell);
-						fillLeftDown(pos.x, pos.y, 1, 1);
-					}
-				});
-
-				// Delete cells
-				pos = getPos(tr.cells[0]);
-				each(grid[pos.y], function(cell) {
-					var rowSpan;
-
-					cell = cell.elm;
-
-					if (cell != lastCell) {
-						rowSpan = getSpanVal(cell, 'rowSpan');
-
-						if (rowSpan <= 1)
-							dom.remove(cell);
-						else
-							setSpanVal(cell, 'rowSpan', rowSpan - 1);
-
-						lastCell = cell;
-					}
-				});
-			};
-
-			// Get selected rows and move selection out of scope
-			rows = getSelectedRows();
-
-			// Delete all selected rows
-			each(rows.reverse(), function(tr) {
-				deleteRow(tr);
-			});
-
-			cleanup();
-		};
-
-		function cutRows() {
-			var rows = getSelectedRows();
-
-			dom.remove(rows);
-			cleanup();
-
-			return rows;
-		};
-
-		function copyRows() {
-			var rows = getSelectedRows();
-
-			each(rows, function(row, i) {
-				rows[i] = cloneNode(row, true);
-			});
-
-			return rows;
-		};
-
-		function pasteRows(rows, before) {
-			var selectedRows = getSelectedRows(),
-				targetRow = selectedRows[before ? 0 : selectedRows.length - 1],
-				targetCellCount = targetRow.cells.length;
-
-			// Calc target cell count
-			each(grid, function(row) {
-				var match;
-
-				targetCellCount = 0;
-				each(row, function(cell, x) {
-					if (cell.real)
-						targetCellCount += cell.colspan;
-
-					if (cell.elm.parentNode == targetRow)
-						match = 1;
-				});
-
-				if (match)
-					return false;
-			});
-
-			if (!before)
-				rows.reverse();
-
-			each(rows, function(row) {
-				var cellCount = row.cells.length, cell;
-
-				// Remove col/rowspans
-				for (i = 0; i < cellCount; i++) {
-					cell = row.cells[i];
-					setSpanVal(cell, 'colSpan', 1);
-					setSpanVal(cell, 'rowSpan', 1);
-				}
-
-				// Needs more cells
-				for (i = cellCount; i < targetCellCount; i++)
-					row.appendChild(cloneCell(row.cells[cellCount - 1]));
-
-				// Needs less cells
-				for (i = targetCellCount; i < cellCount; i++)
-					dom.remove(row.cells[i]);
-
-				// Add before/after
-				if (before)
-					targetRow.parentNode.insertBefore(row, targetRow);
-				else
-					dom.insertAfter(row, targetRow);
-			});
-		};
-
-		function getPos(target) {
-			var pos;
-
-			each(grid, function(row, y) {
-				each(row, function(cell, x) {
-					if (cell.elm == target) {
-						pos = {x : x, y : y};
-						return false;
-					}
-				});
-
-				return !pos;
-			});
-
-			return pos;
-		};
-
-		function setStartCell(cell) {
-			startPos = getPos(cell);
-		};
-
-		function findEndPos() {
-			var pos, maxX, maxY;
-
-			maxX = maxY = 0;
-
-			each(grid, function(row, y) {
-				each(row, function(cell, x) {
-					var colSpan, rowSpan;
-
-					if (isCellSelected(cell)) {
-						cell = grid[y][x];
-
-						if (x > maxX)
-							maxX = x;
-
-						if (y > maxY)
-							maxY = y;
-
-						if (cell.real) {
-							colSpan = cell.colspan - 1;
-							rowSpan = cell.rowspan - 1;
-
-							if (colSpan) {
-								if (x + colSpan > maxX)
-									maxX = x + colSpan;
-							}
-
-							if (rowSpan) {
-								if (y + rowSpan > maxY)
-									maxY = y + rowSpan;
-							}
-						}
-					}
-				});
-			});
-
-			return {x : maxX, y : maxY};
-		};
-
-		function setEndCell(cell) {
-			var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan;
-
-			endPos = getPos(cell);
-
-			if (startPos && endPos) {
-				// Get start/end positions
-				startX = Math.min(startPos.x, endPos.x);
-				startY = Math.min(startPos.y, endPos.y);
-				endX = Math.max(startPos.x, endPos.x);
-				endY = Math.max(startPos.y, endPos.y);
-
-				// Expand end positon to include spans
-				maxX = endX;
-				maxY = endY;
-
-				// Expand startX
-				for (y = startY; y <= maxY; y++) {
-					cell = grid[y][startX];
-
-					if (!cell.real) {
-						if (startX - (cell.colspan - 1) < startX)
-							startX -= cell.colspan - 1;
-					}
-				}
-
-				// Expand startY
-				for (x = startX; x <= maxX; x++) {
-					cell = grid[startY][x];
-
-					if (!cell.real) {
-						if (startY - (cell.rowspan - 1) < startY)
-							startY -= cell.rowspan - 1;
-					}
-				}
-
-				// Find max X, Y
-				for (y = startY; y <= endY; y++) {
-					for (x = startX; x <= endX; x++) {
-						cell = grid[y][x];
-
-						if (cell.real) {
-							colSpan = cell.colspan - 1;
-							rowSpan = cell.rowspan - 1;
-
-							if (colSpan) {
-								if (x + colSpan > maxX)
-									maxX = x + colSpan;
-							}
-
-							if (rowSpan) {
-								if (y + rowSpan > maxY)
-									maxY = y + rowSpan;
-							}
-						}
-					}
-				}
-
-				// Remove current selection
-				dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
-
-				// Add new selection
-				for (y = startY; y <= maxY; y++) {
-					for (x = startX; x <= maxX; x++) {
-						if (grid[y][x])
-							dom.addClass(grid[y][x].elm, 'mceSelected');
-					}
-				}
-			}
-		};
-
-		// Expose to public
-		tinymce.extend(this, {
-			deleteTable : deleteTable,
-			split : split,
-			merge : merge,
-			insertRow : insertRow,
-			insertCol : insertCol,
-			deleteCols : deleteCols,
-			deleteRows : deleteRows,
-			cutRows : cutRows,
-			copyRows : copyRows,
-			pasteRows : pasteRows,
-			getPos : getPos,
-			setStartCell : setStartCell,
-			setEndCell : setEndCell
-		});
-	};
-
-	tinymce.create('tinymce.plugins.TablePlugin', {
-		init : function(ed, url) {
-			var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload
-
-			function createTableGrid(node) {
-				var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');
-
-				if (tblElm)
-					return new TableGrid(tblElm, ed.dom, selection);
-			};
-
-			function cleanup() {
-				// Restore selection possibilities
-				ed.getBody().style.webkitUserSelect = '';
-
-				if (hasCellSelection) {
-					ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
-					hasCellSelection = false;
-				}
-			};
-
-			// Register buttons
-			each([
-				['table', 'table.desc', 'mceInsertTable', true],
-				['delete_table', 'table.del', 'mceTableDelete'],
-				['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],
-				['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],
-				['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],
-				['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],
-				['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],
-				['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],
-				['row_props', 'table.row_desc', 'mceTableRowProps', true],
-				['cell_props', 'table.cell_desc', 'mceTableCellProps', true],
-				['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],
-				['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]
-			], function(c) {
-				ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});
-			});
-
-			// Select whole table is a table border is clicked
-			if (!tinymce.isIE) {
-				ed.onClick.add(function(ed, e) {
-					e = e.target;
-
-					if (e.nodeName === 'TABLE') {
-						ed.selection.select(e);
-						ed.nodeChanged();
-					}
-				});
-			}
-
-			ed.onPreProcess.add(function(ed, args) {
-				var nodes, i, node, dom = ed.dom, value;
-
-				nodes = dom.select('table', args.node);
-				i = nodes.length;
-				while (i--) {
-					node = nodes[i];
-					dom.setAttrib(node, 'data-mce-style', '');
-
-					if ((value = dom.getAttrib(node, 'width'))) {
-						dom.setStyle(node, 'width', value);
-						dom.setAttrib(node, 'width', '');
-					}
-
-					if ((value = dom.getAttrib(node, 'height'))) {
-						dom.setStyle(node, 'height', value);
-						dom.setAttrib(node, 'height', '');
-					}
-				}
-			});
-
-			// Handle node change updates
-			ed.onNodeChange.add(function(ed, cm, n) {
-				var p;
-
-				n = ed.selection.getStart();
-				p = ed.dom.getParent(n, 'td,th,caption');
-				cm.setActive('table', n.nodeName === 'TABLE' || !!p);
-
-				// Disable table tools if we are in caption
-				if (p && p.nodeName === 'CAPTION')
-					p = 0;
-
-				cm.setDisabled('delete_table', !p);
-				cm.setDisabled('delete_col', !p);
-				cm.setDisabled('delete_table', !p);
-				cm.setDisabled('delete_row', !p);
-				cm.setDisabled('col_after', !p);
-				cm.setDisabled('col_before', !p);
-				cm.setDisabled('row_after', !p);
-				cm.setDisabled('row_before', !p);
-				cm.setDisabled('row_props', !p);
-				cm.setDisabled('cell_props', !p);
-				cm.setDisabled('split_cells', !p);
-				cm.setDisabled('merge_cells', !p);
-			});
-
-			ed.onInit.add(function(ed) {
-				var startTable, startCell, dom = ed.dom, tableGrid;
-
-				winMan = ed.windowManager;
-
-				// Add cell selection logic
-				ed.onMouseDown.add(function(ed, e) {
-					if (e.button != 2) {
-						cleanup();
-
-						startCell = dom.getParent(e.target, 'td,th');
-						startTable = dom.getParent(startCell, 'table');
-					}
-				});
-
-				dom.bind(ed.getDoc(), 'mouseover', function(e) {
-					var sel, table, target = e.target;
-
-					if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {
-						table = dom.getParent(target, 'table');
-						if (table == startTable) {
-							if (!tableGrid) {
-								tableGrid = createTableGrid(table);
-								tableGrid.setStartCell(startCell);
-
-								ed.getBody().style.webkitUserSelect = 'none';
-							}
-
-							tableGrid.setEndCell(target);
-							hasCellSelection = true;
-						}
-
-						// Remove current selection
-						sel = ed.selection.getSel();
-
-						try {
-							if (sel.removeAllRanges)
-								sel.removeAllRanges();
-							else
-								sel.empty();
-						} catch (ex) {
-							// IE9 might throw errors here
-						}
-
-						e.preventDefault();
-					}
-				});
-
-				ed.onMouseUp.add(function(ed, e) {
-					var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode;
-
-					// Move selection to startCell
-					if (startCell) {
-						if (tableGrid)
-							ed.getBody().style.webkitUserSelect = '';
-
-						function setPoint(node, start) {
-							var walker = new tinymce.dom.TreeWalker(node, node);
-
-							do {
-								// Text node
-								if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {
-									if (start)
-										rng.setStart(node, 0);
-									else
-										rng.setEnd(node, node.nodeValue.length);
-
-									return;
-								}
-
-								// BR element
-								if (node.nodeName == 'BR') {
-									if (start)
-										rng.setStartBefore(node);
-									else
-										rng.setEndBefore(node);
-
-									return;
-								}
-							} while (node = (start ? walker.next() : walker.prev()));
-						}
-
-						// Try to expand text selection as much as we can only Gecko supports cell selection
-						selectedCells = dom.select('td.mceSelected,th.mceSelected');
-						if (selectedCells.length > 0) {
-							rng = dom.createRng();
-							node = selectedCells[0];
-							endNode = selectedCells[selectedCells.length - 1];
-							rng.setStartBefore(node);
-							rng.setEndAfter(node);
-
-							setPoint(node, 1);
-							walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));
-
-							do {
-								if (node.nodeName == 'TD' || node.nodeName == 'TH') {
-									if (!dom.hasClass(node, 'mceSelected'))
-										break;
-
-									lastNode = node;
-								}
-							} while (node = walker.next());
-
-							setPoint(lastNode);
-
-							sel.setRng(rng);
-						}
-
-						ed.nodeChanged();
-						startCell = tableGrid = startTable = null;
-					}
-				});
-
-				ed.onKeyUp.add(function(ed, e) {
-					cleanup();
-				});
-
-				ed.onKeyDown.add(function (ed, e) {
-					fixTableCellSelection(ed);
-				});
-
-				ed.onMouseDown.add(function (ed, e) {
-					if (e.button != 2) {
-						fixTableCellSelection(ed);
-					}
-				});
-				function tableCellSelected(ed, rng, n, currentCell) {
-					// The decision of when a table cell is selected is somewhat involved.  The fact that this code is
-					// required is actually a pointer to the root cause of this bug. A cell is selected when the start 
-					// and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases)
-					// or the parent of the table (in the case of the selection containing the last cell of a table).
-					var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), 
-					tableParent, allOfCellSelected, tableCellSelection;
-					if (table) 
-					tableParent = table.parentNode;
-					allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE && 
-						rng.startOffset == 0 && 
-						rng.endOffset == 0 && 
-						currentCell && 
-						(n.nodeName=="TR" || n==tableParent);
-					tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell;	   
-					return  allOfCellSelected || tableCellSelection;
-					// return false;
-				}
-				
-				// this nasty hack is here to work around some WebKit selection bugs.
-				function fixTableCellSelection(ed) {
-					if (!tinymce.isWebKit)
-						return;
-
-					var rng = ed.selection.getRng();
-					var n = ed.selection.getNode();
-					var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH');
-				
-					if (!tableCellSelected(ed, rng, n, currentCell))
-						return;
-						if (!currentCell) {
-							currentCell=n;
-						}
-					
-					// Get the very last node inside the table cell
-					var end = currentCell.lastChild;
-					while (end.lastChild)
-						end = end.lastChild;
-					
-					// Select the entire table cell. Nothing outside of the table cell should be selected.
-					rng.setEnd(end, end.nodeValue.length);
-					ed.selection.setRng(rng);
-				}
-				ed.plugins.table.fixTableCellSelection=fixTableCellSelection;
-
-				// Add context menu
-				if (ed && ed.plugins.contextmenu) {
-					ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
-						var sm, se = ed.selection, el = se.getNode() || ed.getBody();
-
-						if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) {
-							m.removeAll();
-
-							if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {
-								m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
-								m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
-								m.addSeparator();
-							}
-
-							if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {
-								m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
-								m.addSeparator();
-							}
-
-							m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}});
-							m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'});
-							m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'});
-							m.addSeparator();
-
-							// Cell menu
-							sm = m.addMenu({title : 'table.cell'});
-							sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'});
-							sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'});
-							sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'});
-
-							// Row menu
-							sm = m.addMenu({title : 'table.row'});
-							sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'});
-							sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});
-							sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});
-							sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});
-							sm.addSeparator();
-							sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});
-							sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});
-							sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows);
-							sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows);
-
-							// Column menu
-							sm = m.addMenu({title : 'table.col'});
-							sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});
-							sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});
-							sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});
-						} else
-							m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'});
-					});
-				}
-
-				// Fix to allow navigating up and down in a table in WebKit browsers.
-				if (tinymce.isWebKit) {
-					function moveSelection(ed, e) {
-						var VK = tinymce.VK;
-						var key = e.keyCode;
-
-						function handle(upBool, sourceNode, event) {
-							var siblingDirection = upBool ? 'previousSibling' : 'nextSibling';
-							var currentRow = ed.dom.getParent(sourceNode, 'tr');
-							var siblingRow = currentRow[siblingDirection];
-
-							if (siblingRow) {
-								moveCursorToRow(ed, sourceNode, siblingRow, upBool);
-								tinymce.dom.Event.cancel(event);
-								return true;
-							} else {
-								var tableNode = ed.dom.getParent(currentRow, 'table');
-								var middleNode = currentRow.parentNode;
-								var parentNodeName = middleNode.nodeName.toLowerCase();
-								if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) {
-									var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody');
-									if (targetParent !== null) {
-										return moveToRowInTarget(upBool, targetParent, sourceNode, event);
-									}
-								}
-								return escapeTable(upBool, currentRow, siblingDirection, tableNode, event);
-							}
-						}
-
-						function getTargetParent(upBool, topNode, secondNode, nodeName) {
-							var tbodies = ed.dom.select('>' + nodeName, topNode);
-							var position = tbodies.indexOf(secondNode);
-							if (upBool && position === 0 || !upBool && position === tbodies.length - 1) {
-								return getFirstHeadOrFoot(upBool, topNode);
-							} else if (position === -1) {
-								var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1;
-								return tbodies[topOrBottom];
-							} else {
-								return tbodies[position + (upBool ? -1 : 1)];
-							}
-						}
-
-						function getFirstHeadOrFoot(upBool, parent) {
-							var tagName = upBool ? 'thead' : 'tfoot';
-							var headOrFoot = ed.dom.select('>' + tagName, parent);
-							return headOrFoot.length !== 0 ? headOrFoot[0] : null;
-						}
-
-						function moveToRowInTarget(upBool, targetParent, sourceNode, event) {
-							var targetRow = getChildForDirection(targetParent, upBool);
-							targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool);
-							tinymce.dom.Event.cancel(event);
-							return true;
-						}
-
-						function escapeTable(upBool, currentRow, siblingDirection, table, event) {
-							var tableSibling = table[siblingDirection];
-							if (tableSibling) {
-								moveCursorToStartOfElement(tableSibling);
-								return true;
-							} else {
-								var parentCell = ed.dom.getParent(table, 'td,th');
-								if (parentCell) {
-									return handle(upBool, parentCell, event);
-								} else {
-									var backUpSibling = getChildForDirection(currentRow, !upBool);
-									moveCursorToStartOfElement(backUpSibling);
-									return tinymce.dom.Event.cancel(event);
-								}
-							}
-						}
-
-						function getChildForDirection(parent, up) {
-							return parent && parent[up ? 'lastChild' : 'firstChild'];
-						}
-
-						function moveCursorToStartOfElement(n) {
-							ed.selection.setCursorLocation(n, 0);
-						}
-
-						function isVerticalMovement() {
-							return key == VK.UP || key == VK.DOWN;
-						}
-
-						function isInTable(ed) {
-							var node = ed.selection.getNode();
-							var currentRow = ed.dom.getParent(node, 'tr');
-							return currentRow !== null;
-						}
-
-						function columnIndex(column) {
-							var colIndex = 0;
-							var c = column;
-							while (c.previousSibling) {
-								c = c.previousSibling;
-								colIndex = colIndex + getSpanVal(c, "colspan");
-							}
-							return colIndex;
-						}
-
-						function findColumn(rowElement, columnIndex) {
-							var c = 0;
-							var r = 0;
-							each(rowElement.children, function(cell, i) {
-								c = c + getSpanVal(cell, "colspan");
-								r = i;
-								if (c > columnIndex)
-									return false;
-							});
-							return r;
-						}
-
-						function moveCursorToRow(ed, node, row, upBool) {
-							var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th'));
-							var tgtColumnIndex = findColumn(row, srcColumnIndex);
-							var tgtNode = row.childNodes[tgtColumnIndex];
-							var rowCellTarget = getChildForDirection(tgtNode, upBool);
-							moveCursorToStartOfElement(rowCellTarget || tgtNode);
-						}
-
-						function shouldFixCaret(preBrowserNode) {
-							var newNode = ed.selection.getNode();
-							var newParent = ed.dom.getParent(newNode, 'td,th');
-							var oldParent = ed.dom.getParent(preBrowserNode, 'td,th');
-							return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent)
-						}
-
-						function checkSameParentTable(nodeOne, NodeTwo) {
-							return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE');
-						}
-
-						if (isVerticalMovement() && isInTable(ed)) {
-							var preBrowserNode = ed.selection.getNode();
-							setTimeout(function() {
-								if (shouldFixCaret(preBrowserNode)) {
-									handle(!e.shiftKey && key === VK.UP, preBrowserNode, e);
-								}
-							}, 0);
-						}
-					}
-
-					ed.onKeyDown.add(moveSelection);
-				}
-								
-				// Fixes an issue on Gecko where it's impossible to place the caret behind a table
-				// This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
-				if (!tinymce.isIE) {
-					function fixTableCaretPos() {
-						var last;
-
-						// Skip empty text nodes form the end
-						for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ;
-
-						if (last && last.nodeName == 'TABLE')
-							ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');
-					};
-
-					// Fixes an bug where it's impossible to place the caret before a table in Gecko
-					// this fix solves it by detecting when the caret is at the beginning of such a table
-					// and then manually moves the caret infront of the table
-					if (tinymce.isGecko) {
-						ed.onKeyDown.add(function(ed, e) {
-							var rng, table, dom = ed.dom;
-
-							// On gecko it's not possible to place the caret before a table
-							if (e.keyCode == 37 || e.keyCode == 38) {
-								rng = ed.selection.getRng();
-								table = dom.getParent(rng.startContainer, 'table');
-
-								if (table && ed.getBody().firstChild == table) {
-									if (isAtStart(rng, table)) {
-										rng = dom.createRng();
-
-										rng.setStartBefore(table);
-										rng.setEndBefore(table);
-
-										ed.selection.setRng(rng);
-
-										e.preventDefault();
-									}
-								}
-							}
-						});
-					}
-
-					ed.onKeyUp.add(fixTableCaretPos);
-					ed.onSetContent.add(fixTableCaretPos);
-					ed.onVisualAid.add(fixTableCaretPos);
-
-					ed.onPreProcess.add(function(ed, o) {
-						var last = o.node.lastChild;
-
-						if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')
-							ed.dom.remove(last);
-					});
-
-					fixTableCaretPos();
-					ed.startContent = ed.getContent({format : 'raw'});
-				}
-			});
-
-			// Register action commands
-			each({
-				mceTableSplitCells : function(grid) {
-					grid.split();
-				},
-
-				mceTableMergeCells : function(grid) {
-					var rowSpan, colSpan, cell;
-
-					cell = ed.dom.getParent(ed.selection.getNode(), 'th,td');
-					if (cell) {
-						rowSpan = cell.rowSpan;
-						colSpan = cell.colSpan;
-					}
-
-					if (!ed.dom.select('td.mceSelected,th.mceSelected').length) {
-						winMan.open({
-							url : url + '/merge_cells.htm',
-							width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)),
-							height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)),
-							inline : 1
-						}, {
-							rows : rowSpan,
-							cols : colSpan,
-							onaction : function(data) {
-								grid.merge(cell, data.cols, data.rows);
-							},
-							plugin_url : url
-						});
-					} else
-						grid.merge();
-				},
-
-				mceTableInsertRowBefore : function(grid) {
-					grid.insertRow(true);
-				},
-
-				mceTableInsertRowAfter : function(grid) {
-					grid.insertRow();
-				},
-
-				mceTableInsertColBefore : function(grid) {
-					grid.insertCol(true);
-				},
-
-				mceTableInsertColAfter : function(grid) {
-					grid.insertCol();
-				},
-
-				mceTableDeleteCol : function(grid) {
-					grid.deleteCols();
-				},
-
-				mceTableDeleteRow : function(grid) {
-					grid.deleteRows();
-				},
-
-				mceTableCutRow : function(grid) {
-					clipboardRows = grid.cutRows();
-				},
-
-				mceTableCopyRow : function(grid) {
-					clipboardRows = grid.copyRows();
-				},
-
-				mceTablePasteRowBefore : function(grid) {
-					grid.pasteRows(clipboardRows, true);
-				},
-
-				mceTablePasteRowAfter : function(grid) {
-					grid.pasteRows(clipboardRows);
-				},
-
-				mceTableDelete : function(grid) {
-					grid.deleteTable();
-				}
-			}, function(func, name) {
-				ed.addCommand(name, function() {
-					var grid = createTableGrid();
-
-					if (grid) {
-						func(grid);
-						ed.execCommand('mceRepaint');
-						cleanup();
-					}
-				});
-			});
-
-			// Register dialog commands
-			each({
-				mceInsertTable : function(val) {
-					winMan.open({
-						url : url + '/table.htm',
-						width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)),
-						height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)),
-						inline : 1
-					}, {
-						plugin_url : url,
-						action : val ? val.action : 0
-					});
-				},
-
-				mceTableRowProps : function() {
-					winMan.open({
-						url : url + '/row.htm',
-						width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)),
-						height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)),
-						inline : 1
-					}, {
-						plugin_url : url
-					});
-				},
-
-				mceTableCellProps : function() {
-					winMan.open({
-						url : url + '/cell.htm',
-						width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)),
-						height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)),
-						inline : 1
-					}, {
-						plugin_url : url
-					});
-				}
-			}, function(func, name) {
-				ed.addCommand(name, function(ui, val) {
-					func(val);
-				});
-			});
-		}
-	});
-
-	// Register plugin
-	tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);
-})(tinymce);
-

--- a/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js
+++ /dev/null
@@ -1,320 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var ed;

-

-function init() {

-	ed = tinyMCEPopup.editor;

-	tinyMCEPopup.resizeToInnerSize();

-

-	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

-	document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');

-	document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')

-

-	var inst = ed;

-	var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");

-	var formObj = document.forms[0];

-	var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));

-

-	// Get table cell data

-	var celltype = tdElm.nodeName.toLowerCase();

-	var align = ed.dom.getAttrib(tdElm, 'align');

-	var valign = ed.dom.getAttrib(tdElm, 'valign');

-	var width = trimSize(getStyle(tdElm, 'width', 'width'));

-	var height = trimSize(getStyle(tdElm, 'height', 'height'));

-	var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));

-	var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));

-	var className = ed.dom.getAttrib(tdElm, 'class');

-	var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

-	var id = ed.dom.getAttrib(tdElm, 'id');

-	var lang = ed.dom.getAttrib(tdElm, 'lang');

-	var dir = ed.dom.getAttrib(tdElm, 'dir');

-	var scope = ed.dom.getAttrib(tdElm, 'scope');

-

-	// Setup form

-	addClassesToList('class', 'table_cell_styles');

-	TinyMCE_EditableSelects.init();

-

-	if (!ed.dom.hasClass(tdElm, 'mceSelected')) {

-		formObj.bordercolor.value = bordercolor;

-		formObj.bgcolor.value = bgcolor;

-		formObj.backgroundimage.value = backgroundimage;

-		formObj.width.value = width;

-		formObj.height.value = height;

-		formObj.id.value = id;

-		formObj.lang.value = lang;

-		formObj.style.value = ed.dom.serializeStyle(st);

-		selectByValue(formObj, 'align', align);

-		selectByValue(formObj, 'valign', valign);

-		selectByValue(formObj, 'class', className, true, true);

-		selectByValue(formObj, 'celltype', celltype);

-		selectByValue(formObj, 'dir', dir);

-		selectByValue(formObj, 'scope', scope);

-

-		// Resize some elements

-		if (isVisible('backgroundimagebrowser'))

-			document.getElementById('backgroundimage').style.width = '180px';

-

-		updateColor('bordercolor_pick', 'bordercolor');

-		updateColor('bgcolor_pick', 'bgcolor');

-	} else

-		tinyMCEPopup.dom.hide('action');

-}

-

-function updateAction() {

-	var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];

-

-	if (!AutoValidator.validate(formObj)) {

-		tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');

-		return false;

-	}

-

-	tinyMCEPopup.restoreSelection();

-	el = ed.selection.getStart();

-	tdElm = ed.dom.getParent(el, "td,th");

-	trElm = ed.dom.getParent(el, "tr");

-	tableElm = ed.dom.getParent(el, "table");

-

-	// Cell is selected

-	if (ed.dom.hasClass(tdElm, 'mceSelected')) {

-		// Update all selected sells

-		tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {

-			updateCell(td);

-		});

-

-		ed.addVisual();

-		ed.nodeChanged();

-		inst.execCommand('mceEndUndoLevel');

-		tinyMCEPopup.close();

-		return;

-	}

-

-	switch (getSelectValue(formObj, 'action')) {

-		case "cell":

-			var celltype = getSelectValue(formObj, 'celltype');

-			var scope = getSelectValue(formObj, 'scope');

-

-			function doUpdate(s) {

-				if (s) {

-					updateCell(tdElm);

-

-					ed.addVisual();

-					ed.nodeChanged();

-					inst.execCommand('mceEndUndoLevel');

-					tinyMCEPopup.close();

-				}

-			};

-

-			if (ed.getParam("accessibility_warnings", 1)) {

-				if (celltype == "th" && scope == "")

-					tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);

-				else

-					doUpdate(1);

-

-				return;

-			}

-

-			updateCell(tdElm);

-			break;

-

-		case "row":

-			var cell = trElm.firstChild;

-

-			if (cell.nodeName != "TD" && cell.nodeName != "TH")

-				cell = nextCell(cell);

-

-			do {

-				cell = updateCell(cell, true);

-			} while ((cell = nextCell(cell)) != null);

-

-			break;

-

-		case "col":

-			var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr");

-

-			if (cell.nodeName != "TD" && cell.nodeName != "TH")

-				cell = nextCell(cell);

-

-			do {

-				if (cell == tdElm)

-					break;

-				col += cell.getAttribute("colspan");

-			} while ((cell = nextCell(cell)) != null);

-

-			for (var i=0; i<rows.length; i++) {

-				cell = rows[i].firstChild;

-

-				if (cell.nodeName != "TD" && cell.nodeName != "TH")

-					cell = nextCell(cell);

-

-				curr = 0;

-				do {

-					if (curr == col) {

-						cell = updateCell(cell, true);

-						break;

-					}

-					curr += cell.getAttribute("colspan");

-				} while ((cell = nextCell(cell)) != null);

-			}

-

-			break;

-

-		case "all":

-			var rows = tableElm.getElementsByTagName("tr");

-

-			for (var i=0; i<rows.length; i++) {

-				var cell = rows[i].firstChild;

-

-				if (cell.nodeName != "TD" && cell.nodeName != "TH")

-					cell = nextCell(cell);

-

-				do {

-					cell = updateCell(cell, true);

-				} while ((cell = nextCell(cell)) != null);

-			}

-

-			break;

-	}

-

-	ed.addVisual();

-	ed.nodeChanged();

-	inst.execCommand('mceEndUndoLevel');

-	tinyMCEPopup.close();

-}

-

-function nextCell(elm) {

-	while ((elm = elm.nextSibling) != null) {

-		if (elm.nodeName == "TD" || elm.nodeName == "TH")

-			return elm;

-	}

-

-	return null;

-}

-

-function updateCell(td, skip_id) {

-	var inst = ed;

-	var formObj = document.forms[0];

-	var curCellType = td.nodeName.toLowerCase();

-	var celltype = getSelectValue(formObj, 'celltype');

-	var doc = inst.getDoc();

-	var dom = ed.dom;

-

-	if (!skip_id)

-		dom.setAttrib(td, 'id', formObj.id.value);

-

-	dom.setAttrib(td, 'align', formObj.align.value);

-	dom.setAttrib(td, 'vAlign', formObj.valign.value);

-	dom.setAttrib(td, 'lang', formObj.lang.value);

-	dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir'));

-	dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));

-	dom.setAttrib(td, 'scope', formObj.scope.value);

-	dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));

-

-	// Clear deprecated attributes

-	ed.dom.setAttrib(td, 'width', '');

-	ed.dom.setAttrib(td, 'height', '');

-	ed.dom.setAttrib(td, 'bgColor', '');

-	ed.dom.setAttrib(td, 'borderColor', '');

-	ed.dom.setAttrib(td, 'background', '');

-

-	// Set styles

-	td.style.width = getCSSSize(formObj.width.value);

-	td.style.height = getCSSSize(formObj.height.value);

-	if (formObj.bordercolor.value != "") {

-		td.style.borderColor = formObj.bordercolor.value;

-		td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;

-		td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;

-	} else

-		td.style.borderColor = '';

-

-	td.style.backgroundColor = formObj.bgcolor.value;

-

-	if (formObj.backgroundimage.value != "")

-		td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";

-	else

-		td.style.backgroundImage = '';

-

-	if (curCellType != celltype) {

-		// changing to a different node type

-		var newCell = doc.createElement(celltype);

-

-		for (var c=0; c<td.childNodes.length; c++)

-			newCell.appendChild(td.childNodes[c].cloneNode(1));

-

-		for (var a=0; a<td.attributes.length; a++)

-			ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));

-

-		td.parentNode.replaceChild(newCell, td);

-		td = newCell;

-	}

-

-	dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));

-

-	return td;

-}

-

-function changedBackgroundImage() {

-	var formObj = document.forms[0];

-	var st = ed.dom.parseStyle(formObj.style.value);

-

-	st['background-image'] = "url('" + formObj.backgroundimage.value + "')";

-

-	formObj.style.value = ed.dom.serializeStyle(st);

-}

-

-function changedSize() {

-	var formObj = document.forms[0];

-	var st = ed.dom.parseStyle(formObj.style.value);

-

-	var width = formObj.width.value;

-	if (width != "")

-		st['width'] = getCSSSize(width);

-	else

-		st['width'] = "";

-

-	var height = formObj.height.value;

-	if (height != "")

-		st['height'] = getCSSSize(height);

-	else

-		st['height'] = "";

-

-	formObj.style.value = ed.dom.serializeStyle(st);

-}

-

-function changedColor() {

-	var formObj = document.forms[0];

-	var st = ed.dom.parseStyle(formObj.style.value);

-

-	st['background-color'] = formObj.bgcolor.value;

-	st['border-color'] = formObj.bordercolor.value;

-

-	formObj.style.value = ed.dom.serializeStyle(st);

-}

-

-function changedStyle() {

-	var formObj = document.forms[0];

-	var st = ed.dom.parseStyle(formObj.style.value);

-

-	if (st['background-image'])

-		formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");

-	else

-		formObj.backgroundimage.value = '';

-

-	if (st['width'])

-		formObj.width.value = trimSize(st['width']);

-

-	if (st['height'])

-		formObj.height.value = trimSize(st['height']);

-

-	if (st['background-color']) {

-		formObj.bgcolor.value = st['background-color'];

-		updateColor('bgcolor_pick','bgcolor');

-	}

-

-	if (st['border-color']) {

-		formObj.bordercolor.value = st['border-color'];

-		updateColor('bordercolor_pick','bordercolor');

-	}

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js
+++ /dev/null
@@ -1,28 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var MergeCellsDialog = {

-	init : function() {

-		var f = document.forms[0];

-

-		f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);

-		f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);

-	},

-

-	merge : function() {

-		var func, f = document.forms[0];

-

-		tinyMCEPopup.restoreSelection();

-

-		func = tinyMCEPopup.getWindowArg('onaction');

-

-		func({

-			cols : f.numcols.value,

-			rows : f.numrows.value

-		});

-

-		tinyMCEPopup.close();

-	}

-};

-

-tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/js/row.js
+++ /dev/null
@@ -1,238 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-function init() {

-	tinyMCEPopup.resizeToInnerSize();

-

-	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

-	document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

-

-	var inst = tinyMCEPopup.editor;

-	var dom = inst.dom;

-	var trElm = dom.getParent(inst.selection.getStart(), "tr");

-	var formObj = document.forms[0];

-	var st = dom.parseStyle(dom.getAttrib(trElm, "style"));

-

-	// Get table row data

-	var rowtype = trElm.parentNode.nodeName.toLowerCase();

-	var align = dom.getAttrib(trElm, 'align');

-	var valign = dom.getAttrib(trElm, 'valign');

-	var height = trimSize(getStyle(trElm, 'height', 'height'));

-	var className = dom.getAttrib(trElm, 'class');

-	var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));

-	var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

-	var id = dom.getAttrib(trElm, 'id');

-	var lang = dom.getAttrib(trElm, 'lang');

-	var dir = dom.getAttrib(trElm, 'dir');

-

-	selectByValue(formObj, 'rowtype', rowtype);

-

-	// Any cells selected

-	if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {

-		// Setup form

-		addClassesToList('class', 'table_row_styles');

-		TinyMCE_EditableSelects.init();

-

-		formObj.bgcolor.value = bgcolor;

-		formObj.backgroundimage.value = backgroundimage;

-		formObj.height.value = height;

-		formObj.id.value = id;

-		formObj.lang.value = lang;

-		formObj.style.value = dom.serializeStyle(st);

-		selectByValue(formObj, 'align', align);

-		selectByValue(formObj, 'valign', valign);

-		selectByValue(formObj, 'class', className, true, true);

-		selectByValue(formObj, 'dir', dir);

-

-		// Resize some elements

-		if (isVisible('backgroundimagebrowser'))

-			document.getElementById('backgroundimage').style.width = '180px';

-

-		updateColor('bgcolor_pick', 'bgcolor');

-	} else

-		tinyMCEPopup.dom.hide('action');

-}

-

-function updateAction() {

-	var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];

-	var action = getSelectValue(formObj, 'action');

-

-	if (!AutoValidator.validate(formObj)) {

-		tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');

-		return false;

-	}

-

-	tinyMCEPopup.restoreSelection();

-	trElm = dom.getParent(inst.selection.getStart(), "tr");

-	tableElm = dom.getParent(inst.selection.getStart(), "table");

-

-	// Update all selected rows

-	if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {

-		tinymce.each(tableElm.rows, function(tr) {

-			var i;

-

-			for (i = 0; i < tr.cells.length; i++) {

-				if (dom.hasClass(tr.cells[i], 'mceSelected')) {

-					updateRow(tr, true);

-					return;

-				}

-			}

-		});

-

-		inst.addVisual();

-		inst.nodeChanged();

-		inst.execCommand('mceEndUndoLevel');

-		tinyMCEPopup.close();

-		return;

-	}

-

-	switch (action) {

-		case "row":

-			updateRow(trElm);

-			break;

-

-		case "all":

-			var rows = tableElm.getElementsByTagName("tr");

-

-			for (var i=0; i<rows.length; i++)

-				updateRow(rows[i], true);

-

-			break;

-

-		case "odd":

-		case "even":

-			var rows = tableElm.getElementsByTagName("tr");

-

-			for (var i=0; i<rows.length; i++) {

-				if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))

-					updateRow(rows[i], true, true);

-			}

-

-			break;

-	}

-

-	inst.addVisual();

-	inst.nodeChanged();

-	inst.execCommand('mceEndUndoLevel');

-	tinyMCEPopup.close();

-}

-

-function updateRow(tr_elm, skip_id, skip_parent) {

-	var inst = tinyMCEPopup.editor;

-	var formObj = document.forms[0];

-	var dom = inst.dom;

-	var curRowType = tr_elm.parentNode.nodeName.toLowerCase();

-	var rowtype = getSelectValue(formObj, 'rowtype');

-	var doc = inst.getDoc();

-

-	// Update row element

-	if (!skip_id)

-		dom.setAttrib(tr_elm, 'id', formObj.id.value);

-

-	dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));

-	dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));

-	dom.setAttrib(tr_elm, 'lang', formObj.lang.value);

-	dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));

-	dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));

-	dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));

-

-	// Clear deprecated attributes

-	dom.setAttrib(tr_elm, 'background', '');

-	dom.setAttrib(tr_elm, 'bgColor', '');

-	dom.setAttrib(tr_elm, 'height', '');

-

-	// Set styles

-	tr_elm.style.height = getCSSSize(formObj.height.value);

-	tr_elm.style.backgroundColor = formObj.bgcolor.value;

-

-	if (formObj.backgroundimage.value != "")

-		tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";

-	else

-		tr_elm.style.backgroundImage = '';

-

-	// Setup new rowtype

-	if (curRowType != rowtype && !skip_parent) {

-		// first, clone the node we are working on

-		var newRow = tr_elm.cloneNode(1);

-

-		// next, find the parent of its new destination (creating it if necessary)

-		var theTable = dom.getParent(tr_elm, "table");

-		var dest = rowtype;

-		var newParent = null;

-		for (var i = 0; i < theTable.childNodes.length; i++) {

-			if (theTable.childNodes[i].nodeName.toLowerCase() == dest)

-				newParent = theTable.childNodes[i];

-		}

-

-		if (newParent == null) {

-			newParent = doc.createElement(dest);

-

-			if (theTable.firstChild.nodeName == 'CAPTION')

-				inst.dom.insertAfter(newParent, theTable.firstChild);

-			else

-				theTable.insertBefore(newParent, theTable.firstChild);

-		}

-

-		// append the row to the new parent

-		newParent.appendChild(newRow);

-

-		// remove the original

-		tr_elm.parentNode.removeChild(tr_elm);

-

-		// set tr_elm to the new node

-		tr_elm = newRow;

-	}

-

-	dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));

-}

-

-function changedBackgroundImage() {

-	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

-	var st = dom.parseStyle(formObj.style.value);

-

-	st['background-image'] = "url('" + formObj.backgroundimage.value + "')";

-

-	formObj.style.value = dom.serializeStyle(st);

-}

-

-function changedStyle() {

-	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

-	var st = dom.parseStyle(formObj.style.value);

-

-	if (st['background-image'])

-		formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");

-	else

-		formObj.backgroundimage.value = '';

-

-	if (st['height'])

-		formObj.height.value = trimSize(st['height']);

-

-	if (st['background-color']) {

-		formObj.bgcolor.value = st['background-color'];

-		updateColor('bgcolor_pick','bgcolor');

-	}

-}

-

-function changedSize() {

-	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

-	var st = dom.parseStyle(formObj.style.value);

-

-	var height = formObj.height.value;

-	if (height != "")

-		st['height'] = getCSSSize(height);

-	else

-		st['height'] = "";

-

-	formObj.style.value = dom.serializeStyle(st);

-}

-

-function changedColor() {

-	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

-	var st = dom.parseStyle(formObj.style.value);

-

-	st['background-color'] = formObj.bgcolor.value;

-

-	formObj.style.value = dom.serializeStyle(st);

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/js/table.js
+++ /dev/null
@@ -1,489 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;

-

-function insertTable() {

-	var formObj = document.forms[0];

-	var inst = tinyMCEPopup.editor, dom = inst.dom;

-	var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;

-	var html = '', capEl, elm;

-	var cellLimit, rowLimit, colLimit;

-

-	tinyMCEPopup.restoreSelection();

-

-	if (!AutoValidator.validate(formObj)) {

-		tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');

-		return false;

-	}

-

-	elm = dom.getParent(inst.selection.getNode(), 'table');

-

-	// Get form data

-	cols = formObj.elements['cols'].value;

-	rows = formObj.elements['rows'].value;

-	border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;

-	cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";

-	cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";

-	align = getSelectValue(formObj, "align");

-	frame = getSelectValue(formObj, "tframe");

-	rules = getSelectValue(formObj, "rules");

-	width = formObj.elements['width'].value;

-	height = formObj.elements['height'].value;

-	bordercolor = formObj.elements['bordercolor'].value;

-	bgcolor = formObj.elements['bgcolor'].value;

-	className = getSelectValue(formObj, "class");

-	id = formObj.elements['id'].value;

-	summary = formObj.elements['summary'].value;

-	style = formObj.elements['style'].value;

-	dir = formObj.elements['dir'].value;

-	lang = formObj.elements['lang'].value;

-	background = formObj.elements['backgroundimage'].value;

-	caption = formObj.elements['caption'].checked;

-

-	cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);

-	rowLimit = tinyMCEPopup.getParam('table_row_limit', false);

-	colLimit = tinyMCEPopup.getParam('table_col_limit', false);

-

-	// Validate table size

-	if (colLimit && cols > colLimit) {

-		tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));

-		return false;

-	} else if (rowLimit && rows > rowLimit) {

-		tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));

-		return false;

-	} else if (cellLimit && cols * rows > cellLimit) {

-		tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));

-		return false;

-	}

-

-	// Update table

-	if (action == "update") {

-		dom.setAttrib(elm, 'cellPadding', cellpadding, true);

-		dom.setAttrib(elm, 'cellSpacing', cellspacing, true);

-

-		if (!isCssSize(border)) {

-			dom.setAttrib(elm, 'border', border);

-		} else {

-			dom.setAttrib(elm, 'border', '');

-		}

-

-		if (border == '') {

-			dom.setStyle(elm, 'border-width', '');

-			dom.setStyle(elm, 'border', '');

-			dom.setAttrib(elm, 'border', '');

-		}

-

-		dom.setAttrib(elm, 'align', align);

-		dom.setAttrib(elm, 'frame', frame);

-		dom.setAttrib(elm, 'rules', rules);

-		dom.setAttrib(elm, 'class', className);

-		dom.setAttrib(elm, 'style', style);

-		dom.setAttrib(elm, 'id', id);

-		dom.setAttrib(elm, 'summary', summary);

-		dom.setAttrib(elm, 'dir', dir);

-		dom.setAttrib(elm, 'lang', lang);

-

-		capEl = inst.dom.select('caption', elm)[0];

-

-		if (capEl && !caption)

-			capEl.parentNode.removeChild(capEl);

-

-		if (!capEl && caption) {

-			capEl = elm.ownerDocument.createElement('caption');

-

-			if (!tinymce.isIE)

-				capEl.innerHTML = '<br data-mce-bogus="1"/>';

-

-			elm.insertBefore(capEl, elm.firstChild);

-		}

-

-		if (width && inst.settings.inline_styles) {

-			dom.setStyle(elm, 'width', width);

-			dom.setAttrib(elm, 'width', '');

-		} else {

-			dom.setAttrib(elm, 'width', width, true);

-			dom.setStyle(elm, 'width', '');

-		}

-

-		// Remove these since they are not valid XHTML

-		dom.setAttrib(elm, 'borderColor', '');

-		dom.setAttrib(elm, 'bgColor', '');

-		dom.setAttrib(elm, 'background', '');

-

-		if (height && inst.settings.inline_styles) {

-			dom.setStyle(elm, 'height', height);

-			dom.setAttrib(elm, 'height', '');

-		} else {

-			dom.setAttrib(elm, 'height', height, true);

-			dom.setStyle(elm, 'height', '');

- 		}

-

-		if (background != '')

-			elm.style.backgroundImage = "url('" + background + "')";

-		else

-			elm.style.backgroundImage = '';

-

-/*		if (tinyMCEPopup.getParam("inline_styles")) {

-			if (width != '')

-				elm.style.width = getCSSSize(width);

-		}*/

-

-		if (bordercolor != "") {

-			elm.style.borderColor = bordercolor;

-			elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;

-			elm.style.borderWidth = cssSize(border);

-		} else

-			elm.style.borderColor = '';

-

-		elm.style.backgroundColor = bgcolor;

-		elm.style.height = getCSSSize(height);

-

-		inst.addVisual();

-

-		// Fix for stange MSIE align bug

-		//elm.outerHTML = elm.outerHTML;

-

-		inst.nodeChanged();

-		inst.execCommand('mceEndUndoLevel');

-

-		// Repaint if dimensions changed

-		if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)

-			inst.execCommand('mceRepaint');

-

-		tinyMCEPopup.close();

-		return true;

-	}

-

-	// Create new table

-	html += '<table';

-

-	html += makeAttrib('id', id);

-	if (!isCssSize(border)) {

-		html += makeAttrib('border', border);

-	}

-

-	html += makeAttrib('cellpadding', cellpadding);

-	html += makeAttrib('cellspacing', cellspacing);

-	html += makeAttrib('data-mce-new', '1');

-

-	if (width && inst.settings.inline_styles) {

-		if (style)

-			style += '; ';

-

-		// Force px

-		if (/^[0-9\.]+$/.test(width))

-			width += 'px';

-

-		style += 'width: ' + width;

-	} else

-		html += makeAttrib('width', width);

-

-/*	if (height) {

-		if (style)

-			style += '; ';

-

-		style += 'height: ' + height;

-	}*/

-

-	//html += makeAttrib('height', height);

-	//html += makeAttrib('bordercolor', bordercolor);

-	//html += makeAttrib('bgcolor', bgcolor);

-	html += makeAttrib('align', align);

-	html += makeAttrib('frame', frame);

-	html += makeAttrib('rules', rules);

-	html += makeAttrib('class', className);

-	html += makeAttrib('style', style);

-	html += makeAttrib('summary', summary);

-	html += makeAttrib('dir', dir);

-	html += makeAttrib('lang', lang);

-	html += '>';

-

-	if (caption) {

-		if (!tinymce.isIE)

-			html += '<caption><br data-mce-bogus="1"/></caption>';

-		else

-			html += '<caption></caption>';

-	}

-

-	for (var y=0; y<rows; y++) {

-		html += "<tr>";

-

-		for (var x=0; x<cols; x++) {

-			if (!tinymce.isIE)

-				html += '<td><br data-mce-bogus="1"/></td>';

-			else

-				html += '<td></td>';

-		}

-

-		html += "</tr>";

-	}

-

-	html += "</table>";

-

-	// Move table

-	if (inst.settings.fix_table_elements) {

-		var patt = '';

-

-		inst.focus();

-		inst.selection.setContent('<br class="_mce_marker" />');

-

-		tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {

-			if (patt)

-				patt += ',';

-

-			patt += n + ' ._mce_marker';

-		});

-

-		tinymce.each(inst.dom.select(patt), function(n) {

-			inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);

-		});

-

-		dom.setOuterHTML(dom.select('br._mce_marker')[0], html);

-	} else

-		inst.execCommand('mceInsertContent', false, html);

-

-	tinymce.each(dom.select('table[data-mce-new]'), function(node) {

-		// Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document

-		if (tinymce.isIE && node.nextSibling == null) {

-			dom.insertAfter(dom.create('p'), node);

-		}

-

-		var tdorth = dom.select('td,th', node);

-		try {

-			// IE9 might fail to do this selection 

-			inst.selection.setCursorLocation(tdorth[0], 0);

-		} catch (ex) {

-			// Ignore

-		}

-

-		dom.setAttrib(node, 'data-mce-new', '');

-	});

-

-	inst.addVisual();

-	inst.execCommand('mceEndUndoLevel');

-

-	tinyMCEPopup.close();

-}

-

-function makeAttrib(attrib, value) {

-	var formObj = document.forms[0];

-	var valueElm = formObj.elements[attrib];

-

-	if (typeof(value) == "undefined" || value == null) {

-		value = "";

-

-		if (valueElm)

-			value = valueElm.value;

-	}

-

-	if (value == "")

-		return "";

-

-	// XML encode it

-	value = value.replace(/&/g, '&amp;');

-	value = value.replace(/\"/g, '&quot;');

-	value = value.replace(/</g, '&lt;');

-	value = value.replace(/>/g, '&gt;');

-

-	return ' ' + attrib + '="' + value + '"';

-}

-

-function init() {

-	tinyMCEPopup.resizeToInnerSize();

-

-	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

-	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

-	document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');

-	document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

-

-	var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');

-	var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";

-	var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";

-	var inst = tinyMCEPopup.editor, dom = inst.dom;

-	var formObj = document.forms[0];

-	var elm = dom.getParent(inst.selection.getNode(), "table");

-

-	action = tinyMCEPopup.getWindowArg('action');

-

-	if (!action)

-		action = elm ? "update" : "insert";

-

-	if (elm && action != "insert") {

-		var rowsAr = elm.rows;

-		var cols = 0;

-		for (var i=0; i<rowsAr.length; i++)

-			if (rowsAr[i].cells.length > cols)

-				cols = rowsAr[i].cells.length;

-

-		cols = cols;

-		rows = rowsAr.length;

-

-		st = dom.parseStyle(dom.getAttrib(elm, "style"));

-		border = trimSize(getStyle(elm, 'border', 'borderWidth'));

-		cellpadding = dom.getAttrib(elm, 'cellpadding', "");

-		cellspacing = dom.getAttrib(elm, 'cellspacing', "");

-		width = trimSize(getStyle(elm, 'width', 'width'));

-		height = trimSize(getStyle(elm, 'height', 'height'));

-		bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));

-		bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));

-		align = dom.getAttrib(elm, 'align', align);

-		frame = dom.getAttrib(elm, 'frame');

-		rules = dom.getAttrib(elm, 'rules');

-		className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));

-		id = dom.getAttrib(elm, 'id');

-		summary = dom.getAttrib(elm, 'summary');

-		style = dom.serializeStyle(st);

-		dir = dom.getAttrib(elm, 'dir');

-		lang = dom.getAttrib(elm, 'lang');

-		background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

-		formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;

-

-		orgTableWidth = width;

-		orgTableHeight = height;

-

-		action = "update";

-		formObj.insert.value = inst.getLang('update');

-	}

-

-	addClassesToList('class', "table_styles");

-	TinyMCE_EditableSelects.init();

-

-	// Update form

-	selectByValue(formObj, 'align', align);

-	selectByValue(formObj, 'tframe', frame);

-	selectByValue(formObj, 'rules', rules);

-	selectByValue(formObj, 'class', className, true, true);

-	formObj.cols.value = cols;

-	formObj.rows.value = rows;

-	formObj.border.value = border;

-	formObj.cellpadding.value = cellpadding;

-	formObj.cellspacing.value = cellspacing;

-	formObj.width.value = width;

-	formObj.height.value = height;

-	formObj.bordercolor.value = bordercolor;

-	formObj.bgcolor.value = bgcolor;

-	formObj.id.value = id;

-	formObj.summary.value = summary;

-	formObj.style.value = style;

-	formObj.dir.value = dir;

-	formObj.lang.value = lang;

-	formObj.backgroundimage.value = background;

-

-	updateColor('bordercolor_pick', 'bordercolor');

-	updateColor('bgcolor_pick', 'bgcolor');

-

-	// Resize some elements

-	if (isVisible('backgroundimagebrowser'))

-		document.getElementById('backgroundimage').style.width = '180px';

-

-	// Disable some fields in update mode

-	if (action == "update") {

-		formObj.cols.disabled = true;

-		formObj.rows.disabled = true;

-	}

-}

-

-function changedSize() {

-	var formObj = document.forms[0];

-	var st = dom.parseStyle(formObj.style.value);

-

-/*	var width = formObj.width.value;

-	if (width != "")

-		st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";

-	else

-		st['width'] = "";*/

-

-	var height = formObj.height.value;

-	if (height != "")

-		st['height'] = getCSSSize(height);

-	else

-		st['height'] = "";

-

-	formObj.style.value = dom.serializeStyle(st);

-}

-

-function isCssSize(value) {

-	return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value);

-}

-

-function cssSize(value, def) {

-	value = tinymce.trim(value || def);

-

-	if (!isCssSize(value)) {

-		return parseInt(value, 10) + 'px';

-	}

-

-	return value;

-}

-

-function changedBackgroundImage() {

-	var formObj = document.forms[0];

-	var st = dom.parseStyle(formObj.style.value);

-

-	st['background-image'] = "url('" + formObj.backgroundimage.value + "')";

-

-	formObj.style.value = dom.serializeStyle(st);

-}

-

-function changedBorder() {

-	var formObj = document.forms[0];

-	var st = dom.parseStyle(formObj.style.value);

-

-	// Update border width if the element has a color

-	if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != ""))

-		st['border-width'] = cssSize(formObj.border.value);

-	else {

-		if (!formObj.border.value) {

-			st['border'] = '';

-			st['border-width'] = '';

-		}

-	}

-

-	formObj.style.value = dom.serializeStyle(st);

-}

-

-function changedColor() {

-	var formObj = document.forms[0];

-	var st = dom.parseStyle(formObj.style.value);

-

-	st['background-color'] = formObj.bgcolor.value;

-

-	if (formObj.bordercolor.value != "") {

-		st['border-color'] = formObj.bordercolor.value;

-

-		// Add border-width if it's missing

-		if (!st['border-width'])

-			st['border-width'] = cssSize(formObj.border.value, 1);

-	}

-

-	formObj.style.value = dom.serializeStyle(st);

-}

-

-function changedStyle() {

-	var formObj = document.forms[0];

-	var st = dom.parseStyle(formObj.style.value);

-

-	if (st['background-image'])

-		formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

-	else

-		formObj.backgroundimage.value = '';

-

-	if (st['width'])

-		formObj.width.value = trimSize(st['width']);

-

-	if (st['height'])

-		formObj.height.value = trimSize(st['height']);

-

-	if (st['background-color']) {

-		formObj.bgcolor.value = st['background-color'];

-		updateColor('bgcolor_pick','bgcolor');

-	}

-

-	if (st['border-color']) {

-		formObj.bordercolor.value = st['border-color'];

-		updateColor('bordercolor_pick','bordercolor');

-	}

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm
+++ /dev/null
@@ -1,33 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#table_dlg.merge_cells_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="js/merge_cells.js"></script>

-</head>

-<body style="margin: 8px" role="application">

-<form onsubmit="MergeCellsDialog.merge();return false;" action="#">

-	<fieldset>

-		<legend>{#table_dlg.merge_cells_title}</legend>

-		<table role="presentation" border="0" cellpadding="0" cellspacing="3" width="100%">

-			<tr>

-				<td><label for="numcols">{#table_dlg.cols}</label>:</td>

-				<td align="right"><input type="text" id="numcols" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" aria-required="true" /></td>

-			</tr>

-			<tr>

-				<td><label for="numrows">{#table_dlg.rows}</label>:</td>

-				<td align="right"><input type="text" id="numrows" name="numrows" value="" class="number min1" style="width: 30px" aria-required="true" /></td>

-			</tr>

-		</table>

-	</fieldset>

-

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#update}" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/row.htm
+++ /dev/null
@@ -1,159 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#table_dlg.row_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/row.js"></script>

-	<link href="css/row.css" rel="stylesheet" type="text/css" />

-</head>

-<body id="tablerow" style="display: none" role="application">

-	<form onsubmit="updateAction();return false;" action="#">

-		<div class="tabs">

-			<ul>

-				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>

-				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="general_panel" class="panel current">

-				<fieldset>

-					<legend>{#table_dlg.general_props}</legend>

-

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

-						<tr>

-							<td><label for="rowtype">{#table_dlg.rowtype}</label></td>

-							<td class="col2">

-								<select id="rowtype" name="rowtype" class="mceFocus">

-									<option value="thead">{#table_dlg.thead}</option>

-									<option value="tbody">{#table_dlg.tbody}</option>

-									<option value="tfoot">{#table_dlg.tfoot}</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="align">{#table_dlg.align}</label></td>

-							<td class="col2">

-								<select id="align" name="align">

-									<option value="">{#not_set}</option>

-									<option value="center">{#table_dlg.align_middle}</option>

-									<option value="left">{#table_dlg.align_left}</option>

-									<option value="right">{#table_dlg.align_right}</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="valign">{#table_dlg.valign}</label></td>

-							<td class="col2">

-								<select id="valign" name="valign">

-									<option value="">{#not_set}</option>

-									<option value="top">{#table_dlg.align_top}</option>

-									<option value="middle">{#table_dlg.align_middle}</option>

-									<option value="bottom">{#table_dlg.align_bottom}</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr id="styleSelectRow">

-							<td><label for="class">{#class_name}</label></td>

-							<td class="col2">

-								<select id="class" name="class" class="mceEditableSelect">

-									<option value="" selected="selected">{#not_set}</option>

-								</select>

-							</td>

-						</tr>

-

-						<tr>

-							<td><label for="height">{#table_dlg.height}</label></td>

-							<td class="col2"><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="advanced_panel" class="panel">

-				<fieldset>

-					<legend>{#table_dlg.advanced_props}</legend>

-

-					<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-						<tr>

-							<td class="column1"><label for="id">{#table_dlg.id}</label></td> 

-							<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> 

-						</tr>

-

-						<tr>

-							<td><label for="style">{#table_dlg.style}</label></td>

-							<td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> 

-							<td>

-								<select id="dir" name="dir" style="width: 200px"> 

-										<option value="">{#not_set}</option> 

-										<option value="ltr">{#table_dlg.ltr}</option> 

-										<option value="rtl">{#table_dlg.rtl}</option> 

-								</select>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> 

-							<td>

-								<input id="lang" name="lang" type="text" value="" style="width: 200px" />

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> 

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>

-										<td id="backgroundimagebrowsercontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="bgcolor" id="bgcolor_label">{#table_dlg.bgcolor}</label></td> 

-							<td>

-								<span role="group" aria-labelledby="bgcolor_label">

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>

-										<td id="bgcolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-								</span>

-							</td> 

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<div>

-				<select id="action" name="action">

-					<option value="row">{#table_dlg.row_row}</option>

-					<option value="odd">{#table_dlg.row_odd}</option>

-					<option value="even">{#table_dlg.row_even}</option>

-					<option value="all">{#table_dlg.row_all}</option>

-				</select>

-			</div>

-

-			<input type="submit" id="insert" name="insert" value="{#update}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/table/table.htm
+++ /dev/null
@@ -1,189 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#table_dlg.title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/table.js"></script>

-	<link href="css/table.css" rel="stylesheet" type="text/css" />

-</head>

-<body id="table" style="display: none" role="application" aria-labelledby="app_title">

-	<span style="display:none;" id="app_title">{#table_dlg.title}</span>

-	<form onsubmit="insertTable();return false;" action="#">

-		<div class="tabs">

-			<ul>

-				<li id="general_tab" aria-controls="general_panel" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>

-				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="general_panel" class="panel current">

-				<fieldset>

-					<legend>{#table_dlg.general_props}</legend>

-					<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">

-						<tr>

-							<td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>

-							<td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" aria-required="true" /></td>

-							<td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>

-							<td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" aria-required="true" /></td>

-						</tr>

-						<tr>

-							<td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>

-							<td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>

-							<td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>

-							<td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>

-						</tr>

-						<tr>

-							<td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>

-							<td><select id="align" name="align">

-								<option value="">{#not_set}</option>

-								<option value="center">{#table_dlg.align_middle}</option>

-								<option value="left">{#table_dlg.align_left}</option>

-								<option value="right">{#table_dlg.align_right}</option>

-							</select></td>

-							<td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>

-							<td><input id="border" name="border" type="text" value="" size="3" maxlength="5" onchange="changedBorder();" class="size" /></td>

-						</tr>

-						<tr id="width_row">

-							<td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>

-							<td><input name="width" type="text" id="width" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

-							<td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>

-							<td><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

-						</tr>

-						<tr id="styleSelectRow" >

-							<td><label id="classlabel" for="class">{#class_name}</label></td>

-							<td colspan="3" >

-							 <select id="class" name="class" class="mceEditableSelect">

-								<option value="" selected="selected">{#not_set}</option>

-							 </select></td>

-						</tr>

-						<tr>

-							<td class="column1" ><label for="caption">{#table_dlg.caption}</label></td> 

-							<td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td> 

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-

-			<div id="advanced_panel" class="panel">

-				<fieldset>

-					<legend>{#table_dlg.advanced_props}</legend>

-

-					<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-						<tr>

-							<td class="column1"><label for="id">{#table_dlg.id}</label></td> 

-							<td><input id="id" name="id" type="text" value="" class="advfield" /></td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="summary">{#table_dlg.summary}</label></td> 

-							<td><input id="summary" name="summary" type="text" value="" class="advfield" /></td> 

-						</tr>

-

-						<tr>

-							<td><label for="style">{#table_dlg.style}</label></td>

-							<td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>

-						</tr>

-

-						<tr>

-							<td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td> 

-							<td>

-								<input id="lang" name="lang" type="text" value="" class="advfield" />

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> 

-							<td>

-								<table role="presentation" aria-labelledby="backgroundimage_label" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>

-										<td id="backgroundimagebrowsercontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="tframe">{#table_dlg.frame}</label></td> 

-							<td>

-								<select id="tframe" name="tframe" class="advfield"> 

-										<option value="">{#not_set}</option>

-										<option value="void">{#table_dlg.rules_void}</option>

-										<option value="above">{#table_dlg.rules_above}</option> 

-										<option value="below">{#table_dlg.rules_below}</option> 

-										<option value="hsides">{#table_dlg.rules_hsides}</option> 

-										<option value="lhs">{#table_dlg.rules_lhs}</option> 

-										<option value="rhs">{#table_dlg.rules_rhs}</option> 

-										<option value="vsides">{#table_dlg.rules_vsides}</option> 

-										<option value="box">{#table_dlg.rules_box}</option> 

-										<option value="border">{#table_dlg.rules_border}</option> 

-								</select>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="rules">{#table_dlg.rules}</label></td> 

-							<td>

-								<select id="rules" name="rules" class="advfield"> 

-										<option value="">{#not_set}</option> 

-										<option value="none">{#table_dlg.frame_none}</option>

-										<option value="groups">{#table_dlg.frame_groups}</option>

-										<option value="rows">{#table_dlg.frame_rows}</option>

-										<option value="cols">{#table_dlg.frame_cols}</option>

-										<option value="all">{#table_dlg.frame_all}</option>

-									</select>

-							</td> 

-						</tr>

-

-						<tr>

-							<td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> 

-							<td>

-								<select id="dir" name="dir" class="advfield"> 

-										<option value="">{#not_set}</option> 

-										<option value="ltr">{#table_dlg.ltr}</option> 

-										<option value="rtl">{#table_dlg.rtl}</option> 

-								</select>

-							</td> 

-						</tr>

-

-						<tr role="group" aria-labelledby="bordercolor_label">

-							<td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td> 

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>

-										<td id="bordercolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-

-						<tr role="group" aria-labelledby="bgcolor_label">

-							<td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td> 

-							<td>

-								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

-									<tr>

-										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>

-										<td id="bgcolor_pickcontainer">&nbsp;</td>

-									</tr>

-								</table>

-							</td> 

-						</tr>

-					</table>

-				</fieldset>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<input type="submit" id="insert" name="insert" value="{#insert}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/template/blank.htm
+++ /dev/null
@@ -1,13 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>blank_page</title>

-	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

-	<script type="text/javascript">

-		parent.TemplateDialog.loadCSSFiles(document);

-	</script>

-</head>

-<body id="mceTemplatePreview" class="mceContentBody">

-

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/template/css/template.css
+++ /dev/null
@@ -1,24 +1,1 @@
-#frmbody {

-	padding: 10px;

-	background-color: #FFF;

-	border: 1px solid #CCC;

-}

-

-.frmRow {

-	margin-bottom: 10px;

-}

-

-#templatesrc {

-	border: none;

-	width: 320px;

-	height: 240px;

-}

-

-.title {

-	padding-bottom: 5px;

-}

-

-.mceActionPanel {

-	padding-top: 5px;

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length<d){for(f=0;f<(d-g.length);f++){g="0"+g}}return g}b=b.replace("%D","%m/%d/%y");b=b.replace("%r","%I:%M:%S %p");b=b.replace("%Y",""+e.getFullYear());b=b.replace("%y",""+e.getYear());b=b.replace("%m",c(e.getMonth()+1,2));b=b.replace("%d",c(e.getDate(),2));b=b.replace("%H",""+c(e.getHours(),2));b=b.replace("%M",""+c(e.getMinutes(),2));b=b.replace("%S",""+c(e.getSeconds(),2));b=b.replace("%I",""+((e.getHours()+11)%12+1));b=b.replace("%p",""+(e.getHours()<12?"AM":"PM"));b=b.replace("%B",""+this.editor.getLang("template_months_long").split(",")[e.getMonth()]);b=b.replace("%b",""+this.editor.getLang("template_months_short").split(",")[e.getMonth()]);b=b.replace("%A",""+this.editor.getLang("template_day_long").split(",")[e.getDay()]);b=b.replace("%a",""+this.editor.getLang("template_day_short").split(",")[e.getDay()]);b=b.replace("%%","%");return b}});tinymce.PluginManager.add("template",tinymce.plugins.TemplatePlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js
+++ /dev/null
@@ -1,159 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var each = tinymce.each;

-

-	tinymce.create('tinymce.plugins.TemplatePlugin', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceTemplate', function(ui) {

-				ed.windowManager.open({

-					file : url + '/template.htm',

-					width : ed.getParam('template_popup_width', 750),

-					height : ed.getParam('template_popup_height', 600),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			ed.addCommand('mceInsertTemplate', t._insertTemplate, t);

-

-			// Register buttons

-			ed.addButton('template', {title : 'template.desc', cmd : 'mceTemplate'});

-

-			ed.onPreProcess.add(function(ed, o) {

-				var dom = ed.dom;

-

-				each(dom.select('div', o.node), function(e) {

-					if (dom.hasClass(e, 'mceTmpl')) {

-						each(dom.select('*', e), function(e) {

-							if (dom.hasClass(e, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))

-								e.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));

-						});

-

-						t._replaceVals(e);

-					}

-				});

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Template plugin',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://www.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		_insertTemplate : function(ui, v) {

-			var t = this, ed = t.editor, h, el, dom = ed.dom, sel = ed.selection.getContent();

-

-			h = v.content;

-

-			each(t.editor.getParam('template_replace_values'), function(v, k) {

-				if (typeof(v) != 'function')

-					h = h.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v);

-			});

-

-			el = dom.create('div', null, h);

-

-			// Find template element within div

-			n = dom.select('.mceTmpl', el);

-			if (n && n.length > 0) {

-				el = dom.create('div', null);

-				el.appendChild(n[0].cloneNode(true));

-			}

-

-			function hasClass(n, c) {

-				return new RegExp('\\b' + c + '\\b', 'g').test(n.className);

-			};

-

-			each(dom.select('*', el), function(n) {

-				// Replace cdate

-				if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|')))

-					n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format")));

-

-				// Replace mdate

-				if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))

-					n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));

-

-				// Replace selection

-				if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|')))

-					n.innerHTML = sel;

-			});

-

-			t._replaceVals(el);

-

-			ed.execCommand('mceInsertContent', false, el.innerHTML);

-			ed.addVisual();

-		},

-

-		_replaceVals : function(e) {

-			var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values');

-

-			each(dom.select('*', e), function(e) {

-				each(vl, function(v, k) {

-					if (dom.hasClass(e, k)) {

-						if (typeof(vl[k]) == 'function')

-							vl[k](e);

-					}

-				});

-			});

-		},

-

-		_getDateTime : function(d, fmt) {

-				if (!fmt)

-					return "";

-

-				function addZeros(value, len) {

-					var i;

-

-					value = "" + value;

-

-					if (value.length < len) {

-						for (i=0; i<(len-value.length); i++)

-							value = "0" + value;

-					}

-

-					return value;

-				}

-

-				fmt = fmt.replace("%D", "%m/%d/%y");

-				fmt = fmt.replace("%r", "%I:%M:%S %p");

-				fmt = fmt.replace("%Y", "" + d.getFullYear());

-				fmt = fmt.replace("%y", "" + d.getYear());

-				fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));

-				fmt = fmt.replace("%d", addZeros(d.getDate(), 2));

-				fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));

-				fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));

-				fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));

-				fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));

-				fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));

-				fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]);

-				fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]);

-				fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]);

-				fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]);

-				fmt = fmt.replace("%%", "%");

-

-				return fmt;

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/template/js/template.js
+++ /dev/null
@@ -1,107 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var TemplateDialog = {

-	preInit : function() {

-		var url = tinyMCEPopup.getParam("template_external_list_url");

-

-		if (url != null)

-			document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></sc'+'ript>');

-	},

-

-	init : function() {

-		var ed = tinyMCEPopup.editor, tsrc, sel, x, u;

-

- 		tsrc = ed.getParam("template_templates", false);

- 		sel = document.getElementById('tpath');

-

-		// Setup external template list

-		if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') {

-			for (x=0, tsrc = []; x<tinyMCETemplateList.length; x++)

-				tsrc.push({title : tinyMCETemplateList[x][0], src : tinyMCETemplateList[x][1], description : tinyMCETemplateList[x][2]});

-		}

-

-		for (x=0; x<tsrc.length; x++)

-			sel.options[sel.options.length] = new Option(tsrc[x].title, tinyMCEPopup.editor.documentBaseURI.toAbsolute(tsrc[x].src));

-

-		this.resize();

-		this.tsrc = tsrc;

-	},

-

-	resize : function() {

-		var w, h, e;

-

-		if (!self.innerWidth) {

-			w = document.body.clientWidth - 50;

-			h = document.body.clientHeight - 160;

-		} else {

-			w = self.innerWidth - 50;

-			h = self.innerHeight - 170;

-		}

-

-		e = document.getElementById('templatesrc');

-

-		if (e) {

-			e.style.height = Math.abs(h) + 'px';

-			e.style.width = Math.abs(w - 5) + 'px';

-		}

-	},

-

-	loadCSSFiles : function(d) {

-		var ed = tinyMCEPopup.editor;

-

-		tinymce.each(ed.getParam("content_css", '').split(','), function(u) {

-			d.write('<link href="' + ed.documentBaseURI.toAbsolute(u) + '" rel="stylesheet" type="text/css" />');

-		});

-	},

-

-	selectTemplate : function(u, ti) {

-		var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc;

-

-		if (!u)

-			return;

-

-		d.body.innerHTML = this.templateHTML = this.getFileContents(u);

-

-		for (x=0; x<tsrc.length; x++) {

-			if (tsrc[x].title == ti)

-				document.getElementById('tmpldesc').innerHTML = tsrc[x].description || '';

-		}

-	},

-

- 	insert : function() {

-		tinyMCEPopup.execCommand('mceInsertTemplate', false, {

-			content : this.templateHTML,

-			selection : tinyMCEPopup.editor.selection.getContent()

-		});

-

-		tinyMCEPopup.close();

-	},

-

-	getFileContents : function(u) {

-		var x, d, t = 'text/plain';

-

-		function g(s) {

-			x = 0;

-

-			try {

-				x = new ActiveXObject(s);

-			} catch (s) {

-			}

-

-			return x;

-		};

-

-		x = window.ActiveXObject ? g('Msxml2.XMLHTTP') || g('Microsoft.XMLHTTP') : new XMLHttpRequest();

-

-		// Synchronous AJAX load file

-		x.overrideMimeType && x.overrideMimeType(t);

-		x.open("GET", u, false);

-		x.send(null);

-

-		return x.responseText;

-	}

-};

-

-TemplateDialog.preInit();

-tinyMCEPopup.onInit.add(TemplateDialog.init, TemplateDialog);

 

--- a/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/template/template.htm
+++ /dev/null
@@ -1,32 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#template_dlg.title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/template.js"></script>

-	<link href="css/template.css" rel="stylesheet" type="text/css" />

-</head>

-<body onresize="TemplateDialog.resize();"> 

-	<form onsubmit="TemplateDialog.insert();return false;">

-		<div id="frmbody">

-			<div class="title">{#template_dlg.desc}</div>

-			<div class="frmRow"><label for="tpath" title="{#template_dlg.select}">{#template_dlg.label}:</label>

-			<select id="tpath" name="tpath" onchange="TemplateDialog.selectTemplate(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text);" class="mceFocus">

-				<option value="">{#template_dlg.select}...</option>

-			</select>

-			<span id="warning"></span></div>

-			<div class="frmRow"><label for="tdesc">{#template_dlg.desc_label}:</label>

-			<span id="tmpldesc"></span></div>

-			<fieldset>

-				<legend>{#template_dlg.preview}</legend>

-				<iframe id="templatesrc" name="templatesrc" src="blank.htm" width="690" height="400" frameborder="0"></iframe>

-			</fieldset>

-		</div>

-		

-		<div class="mceActionPanel">

-			<input type="submit" id="insert" name="insert" value="{#insert}" />

-			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-		</div>

-	</form>

-</body> 

-</html> 

 

--- a/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g<a.length;g++){l=a[g].nodeValue;l=l.replace(/(\u00a0)/g,'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js
+++ /dev/null
@@ -1,83 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.VisualChars', {

-		init : function(ed, url) {

-			var t = this;

-

-			t.editor = ed;

-

-			// Register commands

-			ed.addCommand('mceVisualChars', t._toggleVisualChars, t);

-

-			// Register buttons

-			ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});

-

-			ed.onBeforeGetContent.add(function(ed, o) {

-				if (t.state && o.format != 'raw' && !o.draft) {

-					t.state = true;

-					t._toggleVisualChars(false);

-				}

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Visual characters',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		},

-

-		// Private methods

-

-		_toggleVisualChars : function(bookmark) {

-			var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm;

-

-			t.state = !t.state;

-			ed.controlManager.setActive('visualchars', t.state);

-

-			if (bookmark)

-				bm = s.getBookmark();

-

-			if (t.state) {

-				nl = [];

-				tinymce.walk(b, function(n) {

-					if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)

-						nl.push(n);

-				}, 'childNodes');

-

-				for (i = 0; i < nl.length; i++) {

-					nv = nl[i].nodeValue;

-					nv = nv.replace(/(\u00a0)/g, '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');

-

-					div = ed.dom.create('div', null, nv);

-					while (node = div.lastChild)

-						ed.dom.insertAfter(node, nl[i]);

-

-					ed.dom.remove(nl[i]);

-				}

-			} else {

-				nl = ed.dom.select('span.mceItemNbsp', b);

-

-				for (i = nl.length - 1; i >= 0; i--)

-					ed.dom.remove(nl[i], 1);

-			}

-

-			s.moveToBookmark(bm);

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'<span id="'+c.id+'">0</span>')}}else{tinymce.DOM.add(h,"span",{},'<span id="'+c.id+'">0</span>')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},2000)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js
+++ /dev/null
@@ -1,115 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.WordCount', {

-		block : 0,

-		id : null,

-		countre : null,

-		cleanre : null,

-

-		init : function(ed, url) {

-			var t = this, last = 0;

-

-			t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == &rsquo;

-			t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);

-			t.id = ed.id + '-word-count';

-

-			ed.onPostRender.add(function(ed, cm) {

-				var row, id;

-

-				// Add it to the specified id or the theme advanced path

-				id = ed.getParam('wordcount_target_id');

-				if (!id) {

-					row = tinymce.DOM.get(ed.id + '_path_row');

-

-					if (row)

-						tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '<span id="' + t.id + '">0</span>');

-				} else {

-					tinymce.DOM.add(id, 'span', {}, '<span id="' + t.id + '">0</span>');

-				}

-			});

-

-			ed.onInit.add(function(ed) {

-				ed.selection.onSetContent.add(function() {

-					t._count(ed);

-				});

-

-				t._count(ed);

-			});

-

-			ed.onSetContent.add(function(ed) {

-				t._count(ed);

-			});

-

-			ed.onKeyUp.add(function(ed, e) {

-				if (e.keyCode == last)

-					return;

-

-				if (13 == e.keyCode || 8 == last || 46 == last)

-					t._count(ed);

-

-				last = e.keyCode;

-			});

-		},

-

-		_getCount : function(ed) {

-			var tc = 0;

-			var tx = ed.getContent({ format: 'raw' });

-

-			if (tx) {

-					tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces

-					tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' '); // remove html tags and space chars

-

-					// deal with html entities

-					tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' ');

-					tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation

-

-					var wordArray = tx.match(this.countre);

-					if (wordArray) {

-							tc = wordArray.length;

-					}

-			}

-

-			return tc;

-		},

-

-		_count : function(ed) {

-			var t = this;

-

-			// Keep multiple calls from happening at the same time

-			if (t.block)

-				return;

-

-			t.block = 1;

-

-			setTimeout(function() {

-				if (!ed.destroyed) {

-					var tc = t._getCount(ed);

-					tinymce.DOM.setHTML(t.id, tc.toString());

-					setTimeout(function() {t.block = 0;}, 2000);

-				}

-			}, 1);

-		},

-

-		getInfo: function() {

-			return {

-				longname : 'Word Count plugin',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount);

-})();

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm
+++ /dev/null
@@ -1,143 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#xhtmlxtras_dlg.title_abbr_element}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/element_common.js"></script>

-	<script type="text/javascript" src="js/abbr.js"></script>

-	<link rel="stylesheet" type="text/css" href="css/popup.css" />

-</head>

-<body style="display: none" role="application" aria-labelledby="app_title">

-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_abbr_element}</span>

-<form onsubmit="insertAbbr();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

-			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

-						<td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

-						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

-						<td>

-							<select id="class" name="class" class="field mceEditableSelect">

-								<option value="">{#not_set}</option> 

-							</select>

-						</td>

-					</tr>

-					<tr>

-						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

-						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

-						<td>

-							<select id="dir" name="dir" class="field"> 

-								<option value="">{#not_set}</option> 

-								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

-								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

-							</select>

-						</td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

-						<td>

-							<input id="lang" name="lang" type="text" value="" class="field" />

-						</td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-		<div id="events_panel" class="panel">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

-

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label for="onfocus">onfocus</label>:</td> 

-						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onblur">onblur</label>:</td> 

-						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onclick">onclick</label>:</td> 

-						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

-						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

-						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

-						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

-						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

-						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

-						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

-						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

-						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

-						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-	</div>

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#update}" />

-		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm
+++ /dev/null
@@ -1,143 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#xhtmlxtras_dlg.title_acronym_element}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/element_common.js"></script>

-	<script type="text/javascript" src="js/acronym.js"></script>

-	<link rel="stylesheet" type="text/css" href="css/popup.css" />

-</head>

-<body style="display: none" role="application" aria-labelledby="app_title">

-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_acronym_element}</span>

-<form onsubmit="insertAcronym();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

-			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

-						<td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

-						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

-						<td>

-							<select id="class" name="class" class="field mceEditableSelect">

-								<option value="">{#not_set}</option> 

-							</select>

-						</td>

-					</tr>

-					<tr>

-						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

-						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

-						<td>

-							<select id="dir" name="dir" class="field"> 

-								<option value="">{#not_set}</option> 

-								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

-								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

-							</select>

-						</td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

-						<td>

-							<input id="lang" name="lang" type="text" value="" class="field" />

-						</td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-		<div id="events_panel" class="panel">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

-

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label for="onfocus">onfocus</label>:</td> 

-						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onblur">onblur</label>:</td> 

-						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onclick">onclick</label>:</td> 

-						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

-						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

-						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

-						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

-						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

-						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

-						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

-						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

-						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

-						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-	</div>

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#update}" />

-		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm
+++ /dev/null
@@ -1,150 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#xhtmlxtras_dlg.attribs_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="js/attributes.js"></script>

-	<link rel="stylesheet" type="text/css" href="css/attributes.css" />

-</head>

-<body style="display: none" role="application" aria-labelledby="app_title">

-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.attribs_title}</span>

-<form onsubmit="insertAction();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_attrib_tab}</a></span></li>

-			<li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_events_tab}</a></span></li>

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

-						<td><input id="title" name="title" type="text" value="" class="mceFocus" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

-						<td><input id="id" name="id" type="text" value="" /></td> 

-					</tr>

-					<tr>

-						<td><label id="classlabel" for="classlist">{#class_name}</label></td>

-						<td>

-							<select id="classlist" name="classlist" class="mceEditableSelect">

-								<option value="" selected="selected">{#not_set}</option>

-							</select>

-						</td>

-					</tr>

-					<tr>

-						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

-						<td><input id="style" name="style" type="text" value="" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

-						<td>

-							<select id="dir" name="dir"> 

-								<option value="">{#not_set}</option> 

-								<option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option> 

-								<option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option> 

-							</select>

-						</td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

-						<td>

-							<input id="lang" name="lang" type="text" value="" />

-						</td> 

-					</tr>

-					<tr>

-							<td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>

-							<td><input type="text" id="tabindex" name="tabindex" value="" /></td>

-						</tr>

-

-						<tr>

-							<td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>

-							<td><input type="text" id="accesskey" name="accesskey" value="" /></td>

-						</tr>

-				</table>

-			</fieldset>

-		</div>

-		<div id="events_panel" class="panel">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>

-

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label for="onfocus">onfocus</label>:</td> 

-						<td><input id="onfocus" name="onfocus" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onblur">onblur</label>:</td> 

-						<td><input id="onblur" name="onblur" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onclick">onclick</label>:</td> 

-						<td><input id="onclick" name="onclick" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

-						<td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

-						<td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

-						<td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

-						<td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

-						<td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

-						<td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

-						<td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

-						<td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

-						<td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-	</div>

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#insert}" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm
+++ /dev/null
@@ -1,143 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#xhtmlxtras_dlg.title_cite_element}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/element_common.js"></script>

-	<script type="text/javascript" src="js/cite.js"></script>

-	<link rel="stylesheet" type="text/css" href="css/popup.css" />

-</head>

-<body style="display: none" role="application" aria-labelledby="app_title">

-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_cite_element}</span>

-<form onsubmit="insertCite();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

-			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

-						<td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

-						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

-						<td>

-							<select id="class" name="class" class="field mceEditableSelect">

-								<option value="">{#not_set}</option> 

-							</select>

-						</td>

-					</tr>

-					<tr>

-						<td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

-						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

-						<td>

-							<select id="dir" name="dir" class="field"> 

-								<option value="">{#not_set}</option> 

-								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

-								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

-							</select>

-						</td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

-						<td>

-							<input id="lang" name="lang" type="text" value="" class="field" />

-						</td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-		<div id="events_panel" class="panel">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

-

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label for="onfocus">onfocus</label>:</td> 

-						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onblur">onblur</label>:</td> 

-						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onclick">onclick</label>:</td> 

-						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

-						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

-						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

-						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

-						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

-						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

-						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

-						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

-						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

-						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-	</div>

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#update}" />

-		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css
+++ /dev/null
@@ -1,12 +1,1 @@
-.panel_wrapper div.current {

-	height: 290px;

-}

-

-#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {

-	width: 200px;

-}

-

-#events_panel input {

-	width: 200px;

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css
+++ /dev/null
@@ -1,10 +1,1 @@
-input.field, select.field {width:200px;}

-input.picker {width:179px; margin-left: 5px;}

-input.disabled {border-color:#F2F2F2;}

-img.picker {vertical-align:text-bottom; cursor:pointer;}

-h1 {padding: 0 0 5px 0;}

-.panel_wrapper div.current {height:160px;}

-#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}

-a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}

-#datetime {width:180px;}

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm
+++ /dev/null
@@ -1,163 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#xhtmlxtras_dlg.title_del_element}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/element_common.js"></script>

-	<script type="text/javascript" src="js/del.js"></script>

-	<link rel="stylesheet" type="text/css" href="css/popup.css" />

-</head>

-<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">

-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_del_element}</span>

-<form onsubmit="insertDel();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

-			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>

-						<td>

-							<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-								<tr> 

-									<td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> 

-									<td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse" role="button" aria-labelledby="datetimelabel"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>

-								</tr>

-							</table>

-						</td>

-					</tr>

-					<tr>

-						<td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>

-						<td><input id="cite" name="cite" type="text" value="" class="field" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

-						<td><input id="title" name="title" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

-						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

-						<td>

-							<select id="class" name="class" class="field mceEditableSelect">

-								<option value="">{#not_set}</option> 

-							</select>

-						</td>

-					</tr>

-					<tr>

-						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

-						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

-						<td>

-							<select id="dir" name="dir" class="field"> 

-								<option value="">{#not_set}</option> 

-								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

-								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

-							</select>

-						</td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

-						<td>

-							<input id="lang" name="lang" type="text" value="" class="field" />

-						</td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-		<div id="events_panel" class="panel">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

-

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label for="onfocus">onfocus</label>:</td> 

-						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onblur">onblur</label>:</td> 

-						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onclick">onclick</label>:</td> 

-						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

-						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

-						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

-						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

-						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

-						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

-						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

-						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

-						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

-						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-	</div>

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#update}" />

-		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
+++ /dev/null
@@ -1,132 +1,1 @@
-/**

- * editor_plugin_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', {

-		init : function(ed, url) {

-			// Register commands

-			ed.addCommand('mceCite', function() {

-				ed.windowManager.open({

-					file : url + '/cite.htm',

-					width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),

-					height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			ed.addCommand('mceAcronym', function() {

-				ed.windowManager.open({

-					file : url + '/acronym.htm',

-					width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),

-					height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			ed.addCommand('mceAbbr', function() {

-				ed.windowManager.open({

-					file : url + '/abbr.htm',

-					width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),

-					height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			ed.addCommand('mceDel', function() {

-				ed.windowManager.open({

-					file : url + '/del.htm',

-					width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),

-					height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			ed.addCommand('mceIns', function() {

-				ed.windowManager.open({

-					file : url + '/ins.htm',

-					width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),

-					height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			ed.addCommand('mceAttributes', function() {

-				ed.windowManager.open({

-					file : url + '/attributes.htm',

-					width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)),

-					height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)),

-					inline : 1

-				}, {

-					plugin_url : url

-				});

-			});

-

-			// Register buttons

-			ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});

-			ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});

-			ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});

-			ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});

-			ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});

-			ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});

-

-			ed.onNodeChange.add(function(ed, cm, n, co) {

-				n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');

-

-				cm.setDisabled('cite', co);

-				cm.setDisabled('acronym', co);

-				cm.setDisabled('abbr', co);

-				cm.setDisabled('del', co);

-				cm.setDisabled('ins', co);

-				cm.setDisabled('attribs', n && n.nodeName == 'BODY');

-				cm.setActive('cite', 0);

-				cm.setActive('acronym', 0);

-				cm.setActive('abbr', 0);

-				cm.setActive('del', 0);

-				cm.setActive('ins', 0);

-

-				// Activate all

-				if (n) {

-					do {

-						cm.setDisabled(n.nodeName.toLowerCase(), 0);

-						cm.setActive(n.nodeName.toLowerCase(), 1);

-					} while (n = n.parentNode);

-				}

-			});

-

-			ed.onPreInit.add(function() {

-				// Fixed IE issue where it can't handle these elements correctly

-				ed.dom.create('abbr');

-			});

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'XHTML Xtras Plugin',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			};

-		}

-	});

-

-	// Register plugin

-	tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);

-})();
+

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm
+++ /dev/null
@@ -1,163 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#xhtmlxtras_dlg.title_ins_element}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

-	<script type="text/javascript" src="js/element_common.js"></script>

-	<script type="text/javascript" src="js/ins.js"></script>

-	<link rel="stylesheet" type="text/css" href="css/popup.css" />

-</head>

-<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">

-<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_ins_element}</span>

-<form onsubmit="insertIns();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

-			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td> 

-						<td>

-							<table role="presentation" border="0" cellspacing="0" cellpadding="0">

-								<tr> 

-									<td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> 

-									<td ><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse" role="button" aria-labelledby="datetimelabel"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>

-								</tr>

-							</table>

-						</td>

-					</tr>

-					<tr >

-						<td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td> 

-						<td><input id="cite" name="cite" type="text" value="" class="field" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td  class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

-						<td><input id="title" name="title" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

-						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

-						<td>

-							<select id="class" name="class" class="field mceEditableSelect">

-								<option value="">{#not_set}</option> 

-							</select>

-						</td>

-					</tr>

-					<tr>

-						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

-						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

-						<td>

-							<select id="dir" name="dir" class="field"> 

-								<option value="">{#not_set}</option> 

-								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

-								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

-							</select>

-						</td> 

-					</tr>

-					<tr>

-						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

-						<td>

-							<input id="lang" name="lang" type="text" value="" class="field" />

-						</td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-		<div id="events_panel" class="panel">

-			<fieldset>

-				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

-

-				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

-					<tr>

-						<td class="label"><label for="onfocus">onfocus</label>:</td> 

-						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onblur">onblur</label>:</td> 

-						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onclick">onclick</label>:</td> 

-						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

-						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

-						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

-						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

-						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

-						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

-						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

-						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

-						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

-					</tr>

-

-					<tr>

-						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

-						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

-					</tr>

-				</table>

-			</fieldset>

-		</div>

-	</div>

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#update}" />

-		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js
+++ /dev/null
@@ -1,29 +1,1 @@
-/**

- * abbr.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-function init() {

-	SXE.initElementDialog('abbr');

-	if (SXE.currentAction == "update") {

-		SXE.showRemoveButton();

-	}

-}

-

-function insertAbbr() {

-	SXE.insertElement('abbr');

-	tinyMCEPopup.close();

-}

-

-function removeAbbr() {

-	SXE.removeElement('abbr');

-	tinyMCEPopup.close();

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js
+++ /dev/null
@@ -1,29 +1,1 @@
-/**

- * acronym.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-function init() {

-	SXE.initElementDialog('acronym');

-	if (SXE.currentAction == "update") {

-		SXE.showRemoveButton();

-	}

-}

-

-function insertAcronym() {

-	SXE.insertElement('acronym');

-	tinyMCEPopup.close();

-}

-

-function removeAcronym() {

-	SXE.removeElement('acronym');

-	tinyMCEPopup.close();

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js
+++ /dev/null
@@ -1,112 +1,1 @@
-/**

- * attributes.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-function init() {

-	tinyMCEPopup.resizeToInnerSize();

-	var inst = tinyMCEPopup.editor;

-	var dom = inst.dom;

-	var elm = inst.selection.getNode();

-	var f = document.forms[0];

-	var onclick = dom.getAttrib(elm, 'onclick');

-

-	setFormValue('title', dom.getAttrib(elm, 'title'));

-	setFormValue('id', dom.getAttrib(elm, 'id'));

-	setFormValue('style', dom.getAttrib(elm, "style"));

-	setFormValue('dir', dom.getAttrib(elm, 'dir'));

-	setFormValue('lang', dom.getAttrib(elm, 'lang'));

-	setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));

-	setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));

-	setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));

-	setFormValue('onblur', dom.getAttrib(elm, 'onblur'));

-	setFormValue('onclick', onclick);

-	setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));

-	setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));

-	setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));

-	setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));

-	setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));

-	setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));

-	setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));

-	setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));

-	setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));

-	className = dom.getAttrib(elm, 'class');

-

-	addClassesToList('classlist', 'advlink_styles');

-	selectByValue(f, 'classlist', className, true);

-

-	TinyMCE_EditableSelects.init();

-}

-

-function setFormValue(name, value) {

-	if(value && document.forms[0].elements[name]){

-		document.forms[0].elements[name].value = value;

-	}

-}

-

-function insertAction() {

-	var inst = tinyMCEPopup.editor;

-	var elm = inst.selection.getNode();

-

-	setAllAttribs(elm);

-	tinyMCEPopup.execCommand("mceEndUndoLevel");

-	tinyMCEPopup.close();

-}

-

-function setAttrib(elm, attrib, value) {

-	var formObj = document.forms[0];

-	var valueElm = formObj.elements[attrib.toLowerCase()];

-	var inst = tinyMCEPopup.editor;

-	var dom = inst.dom;

-

-	if (typeof(value) == "undefined" || value == null) {

-		value = "";

-

-		if (valueElm)

-			value = valueElm.value;

-	}

-

-	dom.setAttrib(elm, attrib.toLowerCase(), value);

-}

-

-function setAllAttribs(elm) {

-	var f = document.forms[0];

-

-	setAttrib(elm, 'title');

-	setAttrib(elm, 'id');

-	setAttrib(elm, 'style');

-	setAttrib(elm, 'class', getSelectValue(f, 'classlist'));

-	setAttrib(elm, 'dir');

-	setAttrib(elm, 'lang');

-	setAttrib(elm, 'tabindex');

-	setAttrib(elm, 'accesskey');

-	setAttrib(elm, 'onfocus');

-	setAttrib(elm, 'onblur');

-	setAttrib(elm, 'onclick');

-	setAttrib(elm, 'ondblclick');

-	setAttrib(elm, 'onmousedown');

-	setAttrib(elm, 'onmouseup');

-	setAttrib(elm, 'onmouseover');

-	setAttrib(elm, 'onmousemove');

-	setAttrib(elm, 'onmouseout');

-	setAttrib(elm, 'onkeypress');

-	setAttrib(elm, 'onkeydown');

-	setAttrib(elm, 'onkeyup');

-

-	// Refresh in old MSIE

-//	if (tinyMCE.isMSIE5)

-//		elm.outerHTML = elm.outerHTML;

-}

-

-function insertAttribute() {

-	tinyMCEPopup.close();

-}

-

-tinyMCEPopup.onInit.add(init);

-tinyMCEPopup.requireLangPack();

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js
+++ /dev/null
@@ -1,29 +1,1 @@
-/**

- * cite.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-function init() {

-	SXE.initElementDialog('cite');

-	if (SXE.currentAction == "update") {

-		SXE.showRemoveButton();

-	}

-}

-

-function insertCite() {

-	SXE.insertElement('cite');

-	tinyMCEPopup.close();

-}

-

-function removeCite() {

-	SXE.removeElement('cite');

-	tinyMCEPopup.close();

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js
+++ /dev/null
@@ -1,54 +1,1 @@
-/**

- * del.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-function init() {

-	SXE.initElementDialog('del');

-	if (SXE.currentAction == "update") {

-		setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));

-		setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));

-		SXE.showRemoveButton();

-	}

-}

-

-function setElementAttribs(elm) {

-	setAllCommonAttribs(elm);

-	setAttrib(elm, 'datetime');

-	setAttrib(elm, 'cite');

-	elm.removeAttribute('data-mce-new');

-}

-

-function insertDel() {

-	var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');

-

-	if (elm == null) {

-		var s = SXE.inst.selection.getContent();

-		if(s.length > 0) {

-			insertInlineElement('del');

-			var elementArray = SXE.inst.dom.select('del[data-mce-new]');

-			for (var i=0; i<elementArray.length; i++) {

-				var elm = elementArray[i];

-				setElementAttribs(elm);

-			}

-		}

-	} else {

-		setElementAttribs(elm);

-	}

-	tinyMCEPopup.editor.nodeChanged();

-	tinyMCEPopup.execCommand('mceEndUndoLevel');

-	tinyMCEPopup.close();

-}

-

-function removeDel() {

-	SXE.removeElement('del');

-	tinyMCEPopup.close();

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js
+++ /dev/null
@@ -1,230 +1,1 @@
-/**

- * element_common.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-tinyMCEPopup.requireLangPack();

-

-function initCommonAttributes(elm) {

-	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

-

-	// Setup form data for common element attributes

-	setFormValue('title', dom.getAttrib(elm, 'title'));

-	setFormValue('id', dom.getAttrib(elm, 'id'));

-	selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);

-	setFormValue('style', dom.getAttrib(elm, 'style'));

-	selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));

-	setFormValue('lang', dom.getAttrib(elm, 'lang'));

-	setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));

-	setFormValue('onblur', dom.getAttrib(elm, 'onblur'));

-	setFormValue('onclick', dom.getAttrib(elm, 'onclick'));

-	setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));

-	setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));

-	setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));

-	setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));

-	setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));

-	setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));

-	setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));

-	setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));

-	setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));

-}

-

-function setFormValue(name, value) {

-	if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;

-}

-

-function insertDateTime(id) {

-	document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");

-}

-

-function getDateTime(d, fmt) {

-	fmt = fmt.replace("%D", "%m/%d/%y");

-	fmt = fmt.replace("%r", "%I:%M:%S %p");

-	fmt = fmt.replace("%Y", "" + d.getFullYear());

-	fmt = fmt.replace("%y", "" + d.getYear());

-	fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));

-	fmt = fmt.replace("%d", addZeros(d.getDate(), 2));

-	fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));

-	fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));

-	fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));

-	fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));

-	fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));

-	fmt = fmt.replace("%%", "%");

-

-	return fmt;

-}

-

-function addZeros(value, len) {

-	var i;

-

-	value = "" + value;

-

-	if (value.length < len) {

-		for (i=0; i<(len-value.length); i++)

-			value = "0" + value;

-	}

-

-	return value;

-}

-

-function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {

-	if (!form_obj || !form_obj.elements[field_name])

-		return;

-

-	var sel = form_obj.elements[field_name];

-

-	var found = false;

-	for (var i=0; i<sel.options.length; i++) {

-		var option = sel.options[i];

-

-		if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {

-			option.selected = true;

-			found = true;

-		} else

-			option.selected = false;

-	}

-

-	if (!found && add_custom && value != '') {

-		var option = new Option('Value: ' + value, value);

-		option.selected = true;

-		sel.options[sel.options.length] = option;

-	}

-

-	return found;

-}

-

-function setAttrib(elm, attrib, value) {

-	var formObj = document.forms[0];

-	var valueElm = formObj.elements[attrib.toLowerCase()];

-	tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);

-}

-

-function setAllCommonAttribs(elm) {

-	setAttrib(elm, 'title');

-	setAttrib(elm, 'id');

-	setAttrib(elm, 'class');

-	setAttrib(elm, 'style');

-	setAttrib(elm, 'dir');

-	setAttrib(elm, 'lang');

-	/*setAttrib(elm, 'onfocus');

-	setAttrib(elm, 'onblur');

-	setAttrib(elm, 'onclick');

-	setAttrib(elm, 'ondblclick');

-	setAttrib(elm, 'onmousedown');

-	setAttrib(elm, 'onmouseup');

-	setAttrib(elm, 'onmouseover');

-	setAttrib(elm, 'onmousemove');

-	setAttrib(elm, 'onmouseout');

-	setAttrib(elm, 'onkeypress');

-	setAttrib(elm, 'onkeydown');

-	setAttrib(elm, 'onkeyup');*/

-}

-

-SXE = {

-	currentAction : "insert",

-	inst : tinyMCEPopup.editor,

-	updateElement : null

-}

-

-SXE.focusElement = SXE.inst.selection.getNode();

-

-SXE.initElementDialog = function(element_name) {

-	addClassesToList('class', 'xhtmlxtras_styles');

-	TinyMCE_EditableSelects.init();

-

-	element_name = element_name.toLowerCase();

-	var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());

-	if (elm != null && elm.nodeName.toUpperCase() == element_name.toUpperCase()) {

-		SXE.currentAction = "update";

-	}

-

-	if (SXE.currentAction == "update") {

-		initCommonAttributes(elm);

-		SXE.updateElement = elm;

-	}

-

-	document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true); 

-}

-

-SXE.insertElement = function(element_name) {

-	var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;

-

-	if (elm == null) {

-		var s = SXE.inst.selection.getContent();

-		if(s.length > 0) {

-			tagName = element_name;

-

-			insertInlineElement(element_name);

-			var elementArray = tinymce.grep(SXE.inst.dom.select(element_name));

-			for (var i=0; i<elementArray.length; i++) {

-				var elm = elementArray[i];

-

-				if (SXE.inst.dom.getAttrib(elm, 'data-mce-new')) {

-					elm.id = '';

-					elm.setAttribute('id', '');

-					elm.removeAttribute('id');

-					elm.removeAttribute('data-mce-new');

-

-					setAllCommonAttribs(elm);

-				}

-			}

-		}

-	} else {

-		setAllCommonAttribs(elm);

-	}

-	SXE.inst.nodeChanged();

-	tinyMCEPopup.execCommand('mceEndUndoLevel');

-}

-

-SXE.removeElement = function(element_name){

-	element_name = element_name.toLowerCase();

-	elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());

-	if(elm && elm.nodeName.toUpperCase() == element_name.toUpperCase()){

-		tinyMCE.execCommand('mceRemoveNode', false, elm);

-		SXE.inst.nodeChanged();

-		tinyMCEPopup.execCommand('mceEndUndoLevel');

-	}

-}

-

-SXE.showRemoveButton = function() {

-		document.getElementById("remove").style.display = '';

-}

-

-SXE.containsClass = function(elm,cl) {

-	return (elm.className.indexOf(cl) > -1) ? true : false;

-}

-

-SXE.removeClass = function(elm,cl) {

-	if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {

-		return true;

-	}

-	var classNames = elm.className.split(" ");

-	var newClassNames = "";

-	for (var x = 0, cnl = classNames.length; x < cnl; x++) {

-		if (classNames[x] != cl) {

-			newClassNames += (classNames[x] + " ");

-		}

-	}

-	elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end

-}

-

-SXE.addClass = function(elm,cl) {

-	if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;

-	return true;

-}

-

-function insertInlineElement(en) {

-	var ed = tinyMCEPopup.editor, dom = ed.dom;

-

-	ed.getDoc().execCommand('FontName', false, 'mceinline');

-	tinymce.each(dom.select('span,font'), function(n) {

-		if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')

-			dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1);

-	});

-}

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js
+++ /dev/null
@@ -1,54 +1,1 @@
-/**

- * ins.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-function init() {

-	SXE.initElementDialog('ins');

-	if (SXE.currentAction == "update") {

-		setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));

-		setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));

-		SXE.showRemoveButton();

-	}

-}

-

-function setElementAttribs(elm) {

-	setAllCommonAttribs(elm);

-	setAttrib(elm, 'datetime');

-	setAttrib(elm, 'cite');

-	elm.removeAttribute('data-mce-new');

-}

-

-function insertIns() {

-	var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');

-

-	if (elm == null) {

-		var s = SXE.inst.selection.getContent();

-		if(s.length > 0) {

-			insertInlineElement('ins');

-			var elementArray = SXE.inst.dom.select('ins[data-mce-new]');

-			for (var i=0; i<elementArray.length; i++) {

-				var elm = elementArray[i];

-				setElementAttribs(elm);

-			}

-		}

-	} else {

-		setElementAttribs(elm);

-	}

-	tinyMCEPopup.editor.nodeChanged();

-	tinyMCEPopup.execCommand('mceEndUndoLevel');

-	tinyMCEPopup.close();

-}

-

-function removeIns() {

-	SXE.removeElement('ins');

-	tinyMCEPopup.close();

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"});
+

--- a/tinymce/jscripts/tiny_mce/plugins/zoom/editor_plugin.js
+++ /dev/null
@@ -1,1 +1,1 @@
-var TinyMCE_ZoomPlugin={getInfo:function(){return{longname:'Zoom',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/zoom',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(control_name){if(!tinyMCE.isMSIE||tinyMCE.isMSIE5_0||tinyMCE.isOpera)return"";switch(control_name){case"zoom":return'<select id="{$editor_id}_zoomSelect" name="{$editor_id}_zoomSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceZoom\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+'<option value="100%">+ 100%</option>'+'<option value="150%">+ 150%</option>'+'<option value="200%">+ 200%</option>'+'<option value="250%">+ 250%</option>'+'</select>'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceZoom":tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom=value;tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom=value;return true}return false}};tinyMCE.addPlugin("zoom",TinyMCE_ZoomPlugin);
+

--- a/tinymce/jscripts/tiny_mce/plugins/zoom/editor_plugin_src.js
+++ /dev/null
@@ -1,57 +1,1 @@
-/**

- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $

- *

- * @author Moxiecode


- */

-

-var TinyMCE_ZoomPlugin = {

-	getInfo : function() {

-		return {

-			longname : 'Zoom',

-			author : 'Moxiecode Systems AB',

-			authorurl : 'http://tinymce.moxiecode.com',

-			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/zoom',

-			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

-		};

-	},

-

-	/**

-	 * Returns the HTML contents of the zoom control.

-	 */

-	getControlHTML : function(control_name) {

-		if (!tinyMCE.isMSIE || tinyMCE.isMSIE5_0 || tinyMCE.isOpera)

-			return "";

-

-		switch (control_name) {

-			case "zoom":

-				return '<select id="{$editor_id}_zoomSelect" name="{$editor_id}_zoomSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceZoom\',false,this.options[this.selectedIndex].value);" class="mceSelectList">' + 

-						'<option value="100%">+ 100%</option>' + 

-						'<option value="150%">+ 150%</option>' + 

-						'<option value="200%">+ 200%</option>' + 

-						'<option value="250%">+ 250%</option>' + 

-						'</select>';

-		}

-

-		return "";

-	},

-

-	/**

-	 * Executes the mceZoom command.

-	 */

-	execCommand : function(editor_id, element, command, user_interface, value) {

-		// Handle commands

-		switch (command) {

-			case "mceZoom":

-				tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom = value;

-				tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom = value;

-				return true;

-		}

-

-		// Pass to next handler in chain

-		return false;

-	}

-};

-

-tinyMCE.addPlugin("zoom", TinyMCE_ZoomPlugin);

 

--- a/tinymce/jscripts/tiny_mce/plugins/zoom/readme.txt
+++ /dev/null
@@ -1,2 +1,1 @@
-Check the TinyMCE documentation for details on this plugin.

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/about.htm
+++ /dev/null
@@ -1,53 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advanced_dlg.about_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="js/about.js"></script>

-</head>

-<body id="about" style="display: none">

-		<div class="tabs">

-			<ul>

-				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>

-				<li id="help_tab" style="display:none" aria-hidden="true" aria-controls="help_panel"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>

-				<li id="plugins_tab" aria-controls="plugins_panel"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>

-			</ul>

-		</div>

-

-		<div class="panel_wrapper">

-			<div id="general_panel" class="panel current">

-				<h3>{#advanced_dlg.about_title}</h3>

-				<p>Version: <span id="version"></span> (<span id="date"></span>)</p>

-				<p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>

-				by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>

-				<p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>

-				<p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>

-

-				<div id="buttoncontainer">

-					<a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>

-				</div>

-			</div>

-

-			<div id="plugins_panel" class="panel">

-				<div id="pluginscontainer">

-					<h3>{#advanced_dlg.about_loaded}</h3>

-

-					<div id="plugintablecontainer">

-					</div>

-

-					<p>&nbsp;</p>

-				</div>

-			</div>

-

-			<div id="help_panel" class="panel noscroll" style="overflow: visible;">

-				<div id="iframecontainer"></div>

-			</div>

-		</div>

-

-		<div class="mceActionPanel">

-			<input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />

-		</div>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm
+++ /dev/null
@@ -1,27 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advanced_dlg.anchor_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/anchor.js"></script>

-</head>

-<body style="display: none" role="application" aria-labelledby="app_title">

-<form onsubmit="AnchorDialog.update();return false;" action="#">

-	<table border="0" cellpadding="4" cellspacing="0" role="presentation">

-		<tr>

-			<td colspan="2" class="title" id="app_title">{#advanced_dlg.anchor_title}</td>

-		</tr>

-		<tr>

-			<td class="nowrap"><label for="anchorName">{#advanced_dlg.anchor_name}:</label></td>

-			<td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" aria-required="true" /></td>

-		</tr>

-	</table>

-

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#update}" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm
+++ /dev/null
@@ -1,56 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advanced_dlg.charmap_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/charmap.js"></script>

-</head>

-<body id="charmap" style="display:none" role="application">

-<table align="center" border="0" cellspacing="0" cellpadding="2" role="presentation">

-	<tr>

-		<td colspan="2" class="title" ><label for="charmapView" id="charmap_label">{#advanced_dlg.charmap_title}</label></td>

-	</tr>

-	<tr>

-		<td id="charmapView" rowspan="2" align="left" valign="top">

-			<!-- Chars will be rendered here -->

-		</td>

-		<td width="100" align="center" valign="top">

-			<table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px" role="presentation">

-				<tr>

-					<td id="codeV">&nbsp;</td>

-				</tr>

-				<tr>

-					<td id="codeN">&nbsp;</td>

-				</tr>

-			</table>

-		</td>

-	</tr>

-	<tr>

-		<td valign="bottom" style="padding-bottom: 3px;">

-			<table width="100" align="center" border="0" cellpadding="2" cellspacing="0" role="presentation">

-				<tr>

-					<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;"><label for="codeA">HTML-Code</label></td>

-				</tr>

-				<tr>

-					<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeA" align="center">&nbsp;</td>

-				</tr>

-				<tr>

-					<td style="font-size: 1px;">&nbsp;</td>

-				</tr>

-				<tr>

-					<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;"><label for="codeB">NUM-Code</label></td>

-				</tr>

-				<tr>

-					<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeB" align="center">&nbsp;</td>

-				</tr>

-			</table>

-		</td>

-	</tr>

-	<tr>

-		<td colspan="2" id="charmap_usage">{#advanced_dlg.charmap_usage}</td>

-	</tr>

-	

-</table>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm
+++ /dev/null
@@ -1,75 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advanced_dlg.colorpicker_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="js/color_picker.js"></script>

-</head>

-<body id="colorpicker" style="display: none" role="application" aria-labelledby="app_label">

-	<span class="mceVoiceLabel" id="app_label" style="display:none;">{#advanced_dlg.colorpicker_title}</span>

-<form onsubmit="insertAction();return false" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="picker_tab" aria-controls="picker_panel" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>

-			<li id="rgb_tab" aria-controls="rgb_panel"><span><a href="javascript:;" onclick="mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>

-			<li id="named_tab" aria-controls="named_panel"><span><a  href="javascript:;" onclick="javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="picker_panel" class="panel current">

-			<fieldset>

-				<legend>{#advanced_dlg.colorpicker_picker_title}</legend>

-				<div id="picker">

-					<img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt="" />

-

-					<div id="light">

-						<!-- Will be filled with divs -->

-					</div>

-

-					<br style="clear: both" />

-				</div>

-			</fieldset>

-		</div>

-

-		<div id="rgb_panel" class="panel">

-			<fieldset>

-				<legend id="webcolors_title">{#advanced_dlg.colorpicker_palette_title}</legend>

-				<div id="webcolors">

-					<!-- Gets filled with web safe colors-->

-				</div>

-

-				<br style="clear: both" />

-			</fieldset>

-		</div>

-

-		<div id="named_panel" class="panel">

-			<fieldset id="named_picker_label">

-				<legend id="named_title">{#advanced_dlg.colorpicker_named_title}</legend>

-				<div id="namedcolors" role="listbox" tabindex="0" aria-labelledby="named_picker_label">

-					<!-- Gets filled with named colors-->

-				</div>

-

-				<br style="clear: both" />

-

-				<div id="colornamecontainer">

-					{#advanced_dlg.colorpicker_name} <span id="colorname"></span>

-				</div>

-			</fieldset>

-		</div>

-	</div>

-

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#apply}" />

-

-		<div id="preview"></div>

-

-		<div id="previewblock">

-			<label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" class="text mceFocus" aria-required="true" />

-		</div>

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);j.forcedHighContrastMode=j.settings.detect_highcontrast&&l._isHighContrast();j.settings.skin=j.forcedHighContrastMode?"highcontrast":j.settings.skin;l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}if(j.settings.content_css!==false){j.contentCSS.push(j.baseURI.toAbsolute(k+"/skins/"+j.settings.skin+"/content.css"))}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l);j.onKeyUp.add(l._updateUndoStatus,l);j.onMouseUp.add(l._updateUndoStatus,l);j.dom.bind(j.dom.getRoot(),"dragend",function(){l._updateUndoStatus(j)})}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},_isHighContrast:function(){var i,j=d.add(d.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});i=(d.getStyle(j,"background-color",true)+"").toLowerCase().replace(/ /g,"");d.remove(j);return i!="rgb(171,239,86)"&&i!="#abef56"},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){if(p[0]){i.formatter.remove(p[0])}}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});if(m&&m.value==l){k.select(null)}return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});if(o&&(o.value.fontSize==i.fontSize||o.value["class"]&&o.value["class"]==i["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(l){j.editor.execCommand("FormatBlock",false,l);return false}});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;if(r.settings){r.settings.aria_label=w.aria_label+r.getLang("advanced.help_shortcut")}m=j=d.create("span",{role:"application","aria-labelledby":r.id+"_voice",id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});d.add(m,"span",{"class":"mceVoiceLabel",style:"display:none;",id:r.id+"_voice"},w.aria_label);if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{role:"presentation",id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;r.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(e.isWebKit){window.focus()}v.toolbarGroup.focus();return b.cancel(n)}else{if(n.keyCode===o){d.get(p.id+"_path_row").focus();return b.cancel(n)}}}});r.addShortcut("alt+0","","mceShortcuts",v);return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_ifr");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,m,k){var j=this.editor,l=this.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr");i=Math.max(l.theme_advanced_resizing_min_width||100,i);m=Math.max(l.theme_advanced_resizing_min_height||100,m);i=Math.min(l.theme_advanced_resizing_max_width||65535,i);m=Math.min(l.theme_advanced_resizing_max_height||65535,m);d.setStyle(n,"height","");d.setStyle(o,"height",m);if(l.theme_advanced_resize_horizontal){d.setStyle(n,"width","");d.setStyle(o,"width",i);if(i<n.clientWidth){i=n.clientWidth;d.setStyle(o,"width",n.clientWidth)}}if(k&&l.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+j.id+"_size",{cw:i,ch:m})}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(x,k){var A=this,p,m,r=A.editor,B=A.settings,z,j=r.controlManager,u,l,q=[],y,w;w=j.createToolbarGroup("toolbargroup",{name:r.getLang("advanced.toolbar"),tab_focus_toolbar:r.getParam("theme_advanced_tab_focus_toolbar")});A.toolbarGroup=w;y=B.theme_advanced_toolbar_align.toLowerCase();y="mce"+A._ufirst(y);l=d.add(d.add(x,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+y,role:"presentation"});for(p=1;(z=B["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(B["theme_advanced_buttons"+p+"_add"]){z+=","+B["theme_advanced_buttons"+p+"_add"]}if(B["theme_advanced_buttons"+p+"_add_before"]){z=B["theme_advanced_buttons"+p+"_add_before"]+","+z}A._addControls(z,m);w.add(m);k.deltaHeight-=B.theme_advanced_row_height}q.push(w.renderHTML());q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row",role:"group","aria-labelledby":p.id+"_path_voice"});if(w.theme_advanced_path){d.add(k,"span",{id:p.id+"_path_voice"},p.translate("advanced.path"));d.add(k,"span",{},": ")}else{d.add(k,"span",{},"&#160;")}if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","click",function(n){n.preventDefault()});b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){G.preventDefault();n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E,true)}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_updateUndoStatus:function(j){var i=j.controlManager,k=j.undoManager;i.setDisabled("undo",!k.hasUndo()&&!k.typing);i.setDisabled("redo",!k.hasRedo())},_nodeChanged:function(m,r,D,q,E){var y=this,C,F=0,x,G,z=y.settings,w,k,u,B,l,j,i;e.each(y.stateControls,function(n){r.setActive(n,m.queryCommandState(y.controls[n][1]))});function o(p){var s,n=E.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}r.setActive("visualaid",m.hasVisual);y._updateUndoStatus(m);r.setDisabled("outdent",!m.queryCommandState("Outdent"));C=o("A");if(G=r.get("link")){if(!C||!C.name){G.setDisabled(!C&&q);G.setActive(!!C)}}if(G=r.get("unlink")){G.setDisabled(!C&&q);G.setActive(!!C&&!C.name)}if(G=r.get("anchor")){G.setActive(!q&&!!C&&C.name)}C=o("IMG");if(G=r.get("image")){G.setActive(!q&&!!C&&D.className.indexOf("mceItem")==-1)}if(G=r.get("styleselect")){y._importClasses();j=[];f(G.items,function(n){j.push(n.value)});i=m.formatter.matchAll(j);G.select(i[0])}if(G=r.get("formatselect")){C=o(d.isBlock);if(C){G.select(C.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!w&&p.className){w=p.className}}if(m.dom.is(p,z.theme_advanced_font_selector)){if(!k&&p.style.fontSize){k=p.style.fontSize}if(!u&&p.style.fontFamily){u=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!B&&p.style.color){B=p.style.color}if(!l&&p.style.backgroundColor){l=p.style.backgroundColor}}return false});if(G=r.get("fontselect")){G.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==u})}if(G=r.get("fontsizeselect")){if(z.theme_advanced_runtime_fontsize&&!k&&!w){k=m.dom.getStyle(D,"fontSize",true)}G.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===w){return true}})}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_path&&z.theme_advanced_statusbar_location){C=d.get(m.id+"_path")||d.add(m.id+"_path_row","span",{id:m.id+"_path"});if(y.statusKeyboardNavigation){y.statusKeyboardNavigation.destroy();y.statusKeyboardNavigation=null}d.setHTML(C,"");o(function(H){var p=H.nodeName.toLowerCase(),s,v,t="";if(H.nodeType!=1||p==="br"||H.getAttribute("data-mce-bogus")||d.hasClass(H,"mceItemHidden")||d.hasClass(H,"mceItemRemoved")){return}if(e.isIE&&H.scopeName!=="HTML"){p=H.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(x=d.getAttrib(H,"src")){t+="src: "+x+" "}break;case"a":if(x=d.getAttrib(H,"name")){t+="name: "+x+" ";p+="#"+x}if(x=d.getAttrib(H,"href")){t+="href: "+x+" "}break;case"font":if(x=d.getAttrib(H,"face")){t+="font: "+x+" "}if(x=d.getAttrib(H,"size")){t+="size: "+x+" "}if(x=d.getAttrib(H,"color")){t+="color: "+x+" "}break;case"span":if(x=d.getAttrib(H,"style")){t+="style: "+x+" "}break}if(x=d.getAttrib(H,"id")){t+="id: "+x+" "}if(x=H.className){x=x.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(x){t+="class: "+x+" ";if(d.isBlock(H)||p=="img"||p=="span"){p+="."+x}}}p=p.replace(/(html:)/g,"");p={name:p,node:H,title:t};y.onResolveName.dispatch(y,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(F++)},p);if(C.hasChildNodes()){C.insertBefore(d.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),C.firstChild);C.insertBefore(v,C.firstChild)}else{C.appendChild(v)}},m.getBody());if(d.select("a",C).length>0){y.statusKeyboardNavigation=new e.ui.KeyboardNavigation({root:m.id+"_path_row",items:d.select("a",C),excludeFromTabOrder:true,onCancel:function(){m.focus()}},d)}}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var i=this.editor;i.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce));
+

--- a/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
+++ /dev/null
@@ -1,1363 +1,1 @@
-/**

- * editor_template_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function(tinymce) {

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;

-

-	// Tell it to load theme specific language pack(s)

-	tinymce.ThemeManager.requireLangPack('advanced');

-

-	tinymce.create('tinymce.themes.AdvancedTheme', {

-		sizes : [8, 10, 12, 14, 18, 24, 36],

-

-		// Control name lookup, format: title, command

-		controls : {

-			bold : ['bold_desc', 'Bold'],

-			italic : ['italic_desc', 'Italic'],

-			underline : ['underline_desc', 'Underline'],

-			strikethrough : ['striketrough_desc', 'Strikethrough'],

-			justifyleft : ['justifyleft_desc', 'JustifyLeft'],

-			justifycenter : ['justifycenter_desc', 'JustifyCenter'],

-			justifyright : ['justifyright_desc', 'JustifyRight'],

-			justifyfull : ['justifyfull_desc', 'JustifyFull'],

-			bullist : ['bullist_desc', 'InsertUnorderedList'],

-			numlist : ['numlist_desc', 'InsertOrderedList'],

-			outdent : ['outdent_desc', 'Outdent'],

-			indent : ['indent_desc', 'Indent'],

-			cut : ['cut_desc', 'Cut'],

-			copy : ['copy_desc', 'Copy'],

-			paste : ['paste_desc', 'Paste'],

-			undo : ['undo_desc', 'Undo'],

-			redo : ['redo_desc', 'Redo'],

-			link : ['link_desc', 'mceLink'],

-			unlink : ['unlink_desc', 'unlink'],

-			image : ['image_desc', 'mceImage'],

-			cleanup : ['cleanup_desc', 'mceCleanup'],

-			help : ['help_desc', 'mceHelp'],

-			code : ['code_desc', 'mceCodeEditor'],

-			hr : ['hr_desc', 'InsertHorizontalRule'],

-			removeformat : ['removeformat_desc', 'RemoveFormat'],

-			sub : ['sub_desc', 'subscript'],

-			sup : ['sup_desc', 'superscript'],

-			forecolor : ['forecolor_desc', 'ForeColor'],

-			forecolorpicker : ['forecolor_desc', 'mceForeColor'],

-			backcolor : ['backcolor_desc', 'HiliteColor'],

-			backcolorpicker : ['backcolor_desc', 'mceBackColor'],

-			charmap : ['charmap_desc', 'mceCharMap'],

-			visualaid : ['visualaid_desc', 'mceToggleVisualAid'],

-			anchor : ['anchor_desc', 'mceInsertAnchor'],

-			newdocument : ['newdocument_desc', 'mceNewDocument'],

-			blockquote : ['blockquote_desc', 'mceBlockQuote']

-		},

-

-		stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'],

-

-		init : function(ed, url) {

-			var t = this, s, v, o;

-	

-			t.editor = ed;

-			t.url = url;

-			t.onResolveName = new tinymce.util.Dispatcher(this);

-

-			ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast();

-			ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin;

-

-			// Default settings

-			t.settings = s = extend({

-				theme_advanced_path : true,

-				theme_advanced_toolbar_location : 'bottom',

-				theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",

-				theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",

-				theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap",

-				theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",

-				theme_advanced_toolbar_align : "center",

-				theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",

-				theme_advanced_more_colors : 1,

-				theme_advanced_row_height : 23,

-				theme_advanced_resize_horizontal : 1,

-				theme_advanced_resizing_use_cookie : 1,

-				theme_advanced_font_sizes : "1,2,3,4,5,6,7",

-				theme_advanced_font_selector : "span",

-				theme_advanced_show_current_color: 0,

-				readonly : ed.settings.readonly

-			}, ed.settings);

-

-			// Setup default font_size_style_values

-			if (!s.font_size_style_values)

-				s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt";

-

-			if (tinymce.is(s.theme_advanced_font_sizes, 'string')) {

-				s.font_size_style_values = tinymce.explode(s.font_size_style_values);

-				s.font_size_classes = tinymce.explode(s.font_size_classes || '');

-

-				// Parse string value

-				o = {};

-				ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes;

-				each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) {

-					var cl;

-

-					if (k == v && v >= 1 && v <= 7) {

-						k = v + ' (' + t.sizes[v - 1] + 'pt)';

-						cl = s.font_size_classes[v - 1];

-						v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt');

-					}

-

-					if (/^\s*\./.test(v))

-						cl = v.replace(/\./g, '');

-

-					o[k] = cl ? {'class' : cl} : {fontSize : v};

-				});

-

-				s.theme_advanced_font_sizes = o;

-			}

-

-			if ((v = s.theme_advanced_path_location) && v != 'none')

-				s.theme_advanced_statusbar_location = s.theme_advanced_path_location;

-

-			if (s.theme_advanced_statusbar_location == 'none')

-				s.theme_advanced_statusbar_location = 0;

-

-			if (ed.settings.content_css !== false)

-				ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css"));

-

-			// Init editor

-			ed.onInit.add(function() {

-				if (!ed.settings.readonly) {

-					ed.onNodeChange.add(t._nodeChanged, t);

-					ed.onKeyUp.add(t._updateUndoStatus, t);

-					ed.onMouseUp.add(t._updateUndoStatus, t);

-					ed.dom.bind(ed.dom.getRoot(), 'dragend', function() {

-						t._updateUndoStatus(ed);

-					});

-				}

-			});

-

-			ed.onSetProgressState.add(function(ed, b, ti) {

-				var co, id = ed.id, tb;

-

-				if (b) {

-					t.progressTimer = setTimeout(function() {

-						co = ed.getContainer();

-						co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);

-						tb = DOM.get(ed.id + '_tbl');

-

-						DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});

-						DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});

-					}, ti || 0);

-				} else {

-					DOM.remove(id + '_blocker');

-					DOM.remove(id + '_progress');

-					clearTimeout(t.progressTimer);

-				}

-			});

-

-			DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css");

-

-			if (s.skin_variant)

-				DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css");

-		},

-

-		_isHighContrast : function() {

-			var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'});

-

-			actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, '');

-			DOM.remove(div);

-

-			return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56';

-		},

-

-		createControl : function(n, cf) {

-			var cd, c;

-

-			if (c = cf.createControl(n))

-				return c;

-

-			switch (n) {

-				case "styleselect":

-					return this._createStyleSelect();

-

-				case "formatselect":

-					return this._createBlockFormats();

-

-				case "fontselect":

-					return this._createFontSelect();

-

-				case "fontsizeselect":

-					return this._createFontSizeSelect();

-

-				case "forecolor":

-					return this._createForeColorMenu();

-

-				case "backcolor":

-					return this._createBackColorMenu();

-			}

-

-			if ((cd = this.controls[n]))

-				return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});

-		},

-

-		execCommand : function(cmd, ui, val) {

-			var f = this['_' + cmd];

-

-			if (f) {

-				f.call(this, ui, val);

-				return true;

-			}

-

-			return false;

-		},

-

-		_importClasses : function(e) {

-			var ed = this.editor, ctrl = ed.controlManager.get('styleselect');

-

-			if (ctrl.getLength() == 0) {

-				each(ed.dom.getClasses(), function(o, idx) {

-					var name = 'style_' + idx;

-

-					ed.formatter.register(name, {

-						inline : 'span',

-						attributes : {'class' : o['class']},

-						selector : '*'

-					});

-

-					ctrl.add(o['class'], name);

-				});

-			}

-		},

-

-		_createStyleSelect : function(n) {

-			var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl;

-

-			// Setup style select box

-			ctrl = ctrlMan.createListBox('styleselect', {

-				title : 'advanced.style_select',

-				onselect : function(name) {

-					var matches, formatNames = [];

-

-					each(ctrl.items, function(item) {

-						formatNames.push(item.value);

-					});

-

-					ed.focus();

-					ed.undoManager.add();

-

-					// Toggle off the current format

-					matches = ed.formatter.matchAll(formatNames);

-					if (!name || matches[0] == name) {

-						if (matches[0]) 

-							ed.formatter.remove(matches[0]);

-					} else

-						ed.formatter.apply(name);

-

-					ed.undoManager.add();

-					ed.nodeChanged();

-

-					return false; // No auto select

-				}

-			});

-

-			// Handle specified format

-			ed.onInit.add(function() {

-				var counter = 0, formats = ed.getParam('style_formats');

-

-				if (formats) {

-					each(formats, function(fmt) {

-						var name, keys = 0;

-

-						each(fmt, function() {keys++;});

-

-						if (keys > 1) {

-							name = fmt.name = fmt.name || 'style_' + (counter++);

-							ed.formatter.register(name, fmt);

-							ctrl.add(fmt.title, name);

-						} else

-							ctrl.add(fmt.title);

-					});

-				} else {

-					each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) {

-						var name;

-

-						if (val) {

-							name = 'style_' + (counter++);

-

-							ed.formatter.register(name, {

-								inline : 'span',

-								classes : val,

-								selector : '*'

-							});

-

-							ctrl.add(t.editor.translate(key), name);

-						}

-					});

-				}

-			});

-

-			// Auto import classes if the ctrl box is empty

-			if (ctrl.getLength() == 0) {

-				ctrl.onPostRender.add(function(ed, n) {

-					if (!ctrl.NativeListBox) {

-						Event.add(n.id + '_text', 'focus', t._importClasses, t);

-						Event.add(n.id + '_text', 'mousedown', t._importClasses, t);

-						Event.add(n.id + '_open', 'focus', t._importClasses, t);

-						Event.add(n.id + '_open', 'mousedown', t._importClasses, t);

-					} else

-						Event.add(n.id, 'focus', t._importClasses, t);

-				});

-			}

-

-			return ctrl;

-		},

-

-		_createFontSelect : function() {

-			var c, t = this, ed = t.editor;

-

-			c = ed.controlManager.createListBox('fontselect', {

-				title : 'advanced.fontdefault',

-				onselect : function(v) {

-					var cur = c.items[c.selectedIndex];

-

-					if (!v && cur) {

-						ed.execCommand('FontName', false, cur.value);

-						return;

-					}

-

-					ed.execCommand('FontName', false, v);

-

-					// Fake selection, execCommand will fire a nodeChange and update the selection

-					c.select(function(sv) {

-						return v == sv;

-					});

-

-					if (cur && cur.value == v) {

-						c.select(null);

-					}

-

-					return false; // No auto select

-				}

-			});

-

-			if (c) {

-				each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {

-					c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});

-				});

-			}

-

-			return c;

-		},

-

-		_createFontSizeSelect : function() {

-			var t = this, ed = t.editor, c, i = 0, cl = [];

-

-			c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {

-				var cur = c.items[c.selectedIndex];

-

-				if (!v && cur) {

-					cur = cur.value;

-

-					if (cur['class']) {

-						ed.formatter.toggle('fontsize_class', {value : cur['class']});

-						ed.undoManager.add();

-						ed.nodeChanged();

-					} else {

-						ed.execCommand('FontSize', false, cur.fontSize);

-					}

-

-					return;

-				}

-

-				if (v['class']) {

-					ed.focus();

-					ed.undoManager.add();

-					ed.formatter.toggle('fontsize_class', {value : v['class']});

-					ed.undoManager.add();

-					ed.nodeChanged();

-				} else

-					ed.execCommand('FontSize', false, v.fontSize);

-

-				// Fake selection, execCommand will fire a nodeChange and update the selection

-				c.select(function(sv) {

-					return v == sv;

-				});

-

-				if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] && cur.value['class'] == v['class'])) {

-					c.select(null);

-				}

-

-				return false; // No auto select

-			}});

-

-			if (c) {

-				each(t.settings.theme_advanced_font_sizes, function(v, k) {

-					var fz = v.fontSize;

-

-					if (fz >= 1 && fz <= 7)

-						fz = t.sizes[parseInt(fz) - 1] + 'pt';

-

-					c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))});

-				});

-			}

-

-			return c;

-		},

-

-		_createBlockFormats : function() {

-			var c, fmts = {

-				p : 'advanced.paragraph',

-				address : 'advanced.address',

-				pre : 'advanced.pre',

-				h1 : 'advanced.h1',

-				h2 : 'advanced.h2',

-				h3 : 'advanced.h3',

-				h4 : 'advanced.h4',

-				h5 : 'advanced.h5',

-				h6 : 'advanced.h6',

-				div : 'advanced.div',

-				blockquote : 'advanced.blockquote',

-				code : 'advanced.code',

-				dt : 'advanced.dt',

-				dd : 'advanced.dd',

-				samp : 'advanced.samp'

-			}, t = this;

-

-			c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) {

-				t.editor.execCommand('FormatBlock', false, v);

-				return false;

-			}});

-

-			if (c) {

-				each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {

-					c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});

-				});

-			}

-

-			return c;

-		},

-

-		_createForeColorMenu : function() {

-			var c, t = this, s = t.settings, o = {}, v;

-

-			if (s.theme_advanced_more_colors) {

-				o.more_colors_func = function() {

-					t._mceColorPicker(0, {

-						color : c.value,

-						func : function(co) {

-							c.setColor(co);

-						}

-					});

-				};

-			}

-

-			if (v = s.theme_advanced_text_colors)

-				o.colors = v;

-

-			if (s.theme_advanced_default_foreground_color)

-				o.default_color = s.theme_advanced_default_foreground_color;

-

-			o.title = 'advanced.forecolor_desc';

-			o.cmd = 'ForeColor';

-			o.scope = this;

-

-			c = t.editor.controlManager.createColorSplitButton('forecolor', o);

-

-			return c;

-		},

-

-		_createBackColorMenu : function() {

-			var c, t = this, s = t.settings, o = {}, v;

-

-			if (s.theme_advanced_more_colors) {

-				o.more_colors_func = function() {

-					t._mceColorPicker(0, {

-						color : c.value,

-						func : function(co) {

-							c.setColor(co);

-						}

-					});

-				};

-			}

-

-			if (v = s.theme_advanced_background_colors)

-				o.colors = v;

-

-			if (s.theme_advanced_default_background_color)

-				o.default_color = s.theme_advanced_default_background_color;

-

-			o.title = 'advanced.backcolor_desc';

-			o.cmd = 'HiliteColor';

-			o.scope = this;

-

-			c = t.editor.controlManager.createColorSplitButton('backcolor', o);

-

-			return c;

-		},

-

-		renderUI : function(o) {

-			var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;

-

-			if (ed.settings) {

-				ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut');

-			}

-

-			// TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for.

-			// Maybe actually inherit it from the original textara?

-			n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});

-			DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label);

-

-			if (!DOM.boxModel)

-				n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});

-

-			n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});

-			n = tb = DOM.add(n, 'tbody');

-

-			switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {

-				case "rowlayout":

-					ic = t._rowLayout(s, tb, o);

-					break;

-

-				case "customlayout":

-					ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);

-					break;

-

-				default:

-					ic = t._simpleLayout(s, tb, o, p);

-			}

-

-			n = o.targetNode;

-

-			// Add classes to first and last TRs

-			nl = sc.rows;

-			DOM.addClass(nl[0], 'mceFirst');

-			DOM.addClass(nl[nl.length - 1], 'mceLast');

-

-			// Add classes to first and last TDs

-			each(DOM.select('tr', tb), function(n) {

-				DOM.addClass(n.firstChild, 'mceFirst');

-				DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');

-			});

-

-			if (DOM.get(s.theme_advanced_toolbar_container))

-				DOM.get(s.theme_advanced_toolbar_container).appendChild(p);

-			else

-				DOM.insertAfter(p, n);

-

-			Event.add(ed.id + '_path_row', 'click', function(e) {

-				e = e.target;

-

-				if (e.nodeName == 'A') {

-					t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));

-

-					return Event.cancel(e);

-				}

-			});

-/*

-			if (DOM.get(ed.id + '_path_row')) {

-				Event.add(ed.id + '_tbl', 'mouseover', function(e) {

-					var re;

-	

-					e = e.target;

-

-					if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {

-						re = DOM.get(ed.id + '_path_row');

-						t.lastPath = re.innerHTML;

-						DOM.setHTML(re, e.parentNode.title);

-					}

-				});

-

-				Event.add(ed.id + '_tbl', 'mouseout', function(e) {

-					if (t.lastPath) {

-						DOM.setHTML(ed.id + '_path_row', t.lastPath);

-						t.lastPath = 0;

-					}

-				});

-			}

-*/

-

-			if (!ed.getParam('accessibility_focus'))

-				Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});

-

-			if (s.theme_advanced_toolbar_location == 'external')

-				o.deltaHeight = 0;

-

-			t.deltaHeight = o.deltaHeight;

-			o.targetNode = null;

-

-			ed.onKeyDown.add(function(ed, evt) {

-				var DOM_VK_F10 = 121, DOM_VK_F11 = 122;

-

-				if (evt.altKey) {

-		 			if (evt.keyCode === DOM_VK_F10) {

-						// Make sure focus is given to toolbar in Safari.

-						// We can't do this in IE as it prevents giving focus to toolbar when editor is in a frame

-						if (tinymce.isWebKit) {

-							window.focus();

-						}

-						t.toolbarGroup.focus();

-						return Event.cancel(evt);

-					} else if (evt.keyCode === DOM_VK_F11) {

-						DOM.get(ed.id + '_path_row').focus();

-						return Event.cancel(evt);

-					}

-				}

-			});

-

-			// alt+0 is the UK recommended shortcut for accessing the list of access controls.

-			ed.addShortcut('alt+0', '', 'mceShortcuts', t);

-

-			return {

-				iframeContainer : ic,

-				editorContainer : ed.id + '_parent',

-				sizeContainer : sc,

-				deltaHeight : o.deltaHeight

-			};

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Advanced theme',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			}

-		},

-

-		resizeBy : function(dw, dh) {

-			var e = DOM.get(this.editor.id + '_ifr');

-

-			this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);

-		},

-

-		resizeTo : function(w, h, store) {

-			var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr');

-

-			// Boundery fix box

-			w = Math.max(s.theme_advanced_resizing_min_width || 100, w);

-			h = Math.max(s.theme_advanced_resizing_min_height || 100, h);

-			w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);

-			h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);

-

-			// Resize iframe and container

-			DOM.setStyle(e, 'height', '');

-			DOM.setStyle(ifr, 'height', h);

-

-			if (s.theme_advanced_resize_horizontal) {

-				DOM.setStyle(e, 'width', '');

-				DOM.setStyle(ifr, 'width', w);

-

-				// Make sure that the size is never smaller than the over all ui

-				if (w < e.clientWidth) {

-					w = e.clientWidth;

-					DOM.setStyle(ifr, 'width', e.clientWidth);

-				}

-			}

-

-			// Store away the size

-			if (store && s.theme_advanced_resizing_use_cookie) {

-				Cookie.setHash("TinyMCE_" + ed.id + "_size", {

-					cw : w,

-					ch : h

-				});

-			}

-		},

-

-		destroy : function() {

-			var id = this.editor.id;

-

-			Event.clear(id + '_resize');

-			Event.clear(id + '_path_row');

-			Event.clear(id + '_external_close');

-		},

-

-		// Internal functions

-

-		_simpleLayout : function(s, tb, o, p) {

-			var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;

-

-			if (s.readonly) {

-				n = DOM.add(tb, 'tr');

-				n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});

-				return ic;

-			}

-

-			// Create toolbar container at top

-			if (lo == 'top')

-				t._addToolbars(tb, o);

-

-			// Create external toolbar

-			if (lo == 'external') {

-				n = c = DOM.create('div', {style : 'position:relative'});

-				n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});

-				DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});

-				n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});

-				etb = DOM.add(n, 'tbody');

-

-				if (p.firstChild.className == 'mceOldBoxModel')

-					p.firstChild.appendChild(c);

-				else

-					p.insertBefore(c, p.firstChild);

-

-				t._addToolbars(etb, o);

-

-				ed.onMouseUp.add(function() {

-					var e = DOM.get(ed.id + '_external');

-					DOM.show(e);

-

-					DOM.hide(lastExtID);

-

-					var f = Event.add(ed.id + '_external_close', 'click', function() {

-						DOM.hide(ed.id + '_external');

-						Event.remove(ed.id + '_external_close', 'click', f);

-					});

-

-					DOM.show(e);

-					DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);

-

-					// Fixes IE rendering bug

-					DOM.hide(e);

-					DOM.show(e);

-					e.style.filter = '';

-

-					lastExtID = ed.id + '_external';

-

-					e = null;

-				});

-			}

-

-			if (sl == 'top')

-				t._addStatusBar(tb, o);

-

-			// Create iframe container

-			if (!s.theme_advanced_toolbar_container) {

-				n = DOM.add(tb, 'tr');

-				n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});

-			}

-

-			// Create toolbar container at bottom

-			if (lo == 'bottom')

-				t._addToolbars(tb, o);

-

-			if (sl == 'bottom')

-				t._addStatusBar(tb, o);

-

-			return ic;

-		},

-

-		_rowLayout : function(s, tb, o) {

-			var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;

-

-			dc = s.theme_advanced_containers_default_class || '';

-			da = s.theme_advanced_containers_default_align || 'center';

-

-			each(explode(s.theme_advanced_containers || ''), function(c, i) {

-				var v = s['theme_advanced_container_' + c] || '';

-

-				switch (c.toLowerCase()) {

-					case 'mceeditor':

-						n = DOM.add(tb, 'tr');

-						n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});

-						break;

-

-					case 'mceelementpath':

-						t._addStatusBar(tb, o);

-						break;

-

-					default:

-						a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase();

-						a = 'mce' + t._ufirst(a);

-

-						n = DOM.add(DOM.add(tb, 'tr'), 'td', {

-							'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da

-						});

-

-						to = cf.createToolbar("toolbar" + i);

-						t._addControls(v, to);

-						DOM.setHTML(n, to.renderHTML());

-						o.deltaHeight -= s.theme_advanced_row_height;

-				}

-			});

-

-			return ic;

-		},

-

-		_addControls : function(v, tb) {

-			var t = this, s = t.settings, di, cf = t.editor.controlManager;

-

-			if (s.theme_advanced_disable && !t._disabled) {

-				di = {};

-

-				each(explode(s.theme_advanced_disable), function(v) {

-					di[v] = 1;

-				});

-

-				t._disabled = di;

-			} else

-				di = t._disabled;

-

-			each(explode(v), function(n) {

-				var c;

-

-				if (di && di[n])

-					return;

-

-				// Compatiblity with 2.x

-				if (n == 'tablecontrols') {

-					each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {

-						n = t.createControl(n, cf);

-

-						if (n)

-							tb.add(n);

-					});

-

-					return;

-				}

-

-				c = t.createControl(n, cf);

-

-				if (c)

-					tb.add(c);

-			});

-		},

-

-		_addToolbars : function(c, o) {

-			var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup;

-

-			toolbarGroup = cf.createToolbarGroup('toolbargroup', {

-				'name': ed.getLang('advanced.toolbar'),

-				'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar')

-			});

-

-			t.toolbarGroup = toolbarGroup;

-

-			a = s.theme_advanced_toolbar_align.toLowerCase();

-			a = 'mce' + t._ufirst(a);

-

-			n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"presentation"});

-

-			// Create toolbar and add the controls

-			for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {

-				tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});

-

-				if (s['theme_advanced_buttons' + i + '_add'])

-					v += ',' + s['theme_advanced_buttons' + i + '_add'];

-

-				if (s['theme_advanced_buttons' + i + '_add_before'])

-					v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;

-

-				t._addControls(v, tb);

-				toolbarGroup.add(tb);

-

-				o.deltaHeight -= s.theme_advanced_row_height;

-			}

-			h.push(toolbarGroup.renderHTML());

-			h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));

-			DOM.setHTML(n, h.join(''));

-		},

-

-		_addStatusBar : function(tb, o) {

-			var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;

-

-			n = DOM.add(tb, 'tr');

-			n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); 

-			n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'});

-			if (s.theme_advanced_path) {

-				DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path'));

-				DOM.add(n, 'span', {}, ': ');

-			} else {

-				DOM.add(n, 'span', {}, '&#160;');

-			}

-			

-

-			if (s.theme_advanced_resizing) {

-				DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize', tabIndex:"-1"});

-

-				if (s.theme_advanced_resizing_use_cookie) {

-					ed.onPostRender.add(function() {

-						var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');

-

-						if (!o)

-							return;

-

-						t.resizeTo(o.cw, o.ch);

-					});

-				}

-

-				ed.onPostRender.add(function() {

-					Event.add(ed.id + '_resize', 'click', function(e) {

-						e.preventDefault();

-					});

-

-					Event.add(ed.id + '_resize', 'mousedown', function(e) {

-						var mouseMoveHandler1, mouseMoveHandler2,

-							mouseUpHandler1, mouseUpHandler2,

-							startX, startY, startWidth, startHeight, width, height, ifrElm;

-

-						function resizeOnMove(e) {

-							e.preventDefault();

-

-							width = startWidth + (e.screenX - startX);

-							height = startHeight + (e.screenY - startY);

-

-							t.resizeTo(width, height);

-						};

-

-						function endResize(e) {

-							// Stop listening

-							Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1);

-							Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2);

-							Event.remove(DOM.doc, 'mouseup', mouseUpHandler1);

-							Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2);

-

-							width = startWidth + (e.screenX - startX);

-							height = startHeight + (e.screenY - startY);

-							t.resizeTo(width, height, true);

-						};

-

-						e.preventDefault();

-

-						// Get the current rect size

-						startX = e.screenX;

-						startY = e.screenY;

-						ifrElm = DOM.get(t.editor.id + '_ifr');

-						startWidth = width = ifrElm.clientWidth;

-						startHeight = height = ifrElm.clientHeight;

-

-						// Register envent handlers

-						mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove);

-						mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove);

-						mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize);

-						mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize);

-					});

-				});

-			}

-

-			o.deltaHeight -= 21;

-			n = tb = null;

-		},

-

-		_updateUndoStatus : function(ed) {

-			var cm = ed.controlManager, um = ed.undoManager;

-

-			cm.setDisabled('undo', !um.hasUndo() && !um.typing);

-			cm.setDisabled('redo', !um.hasRedo());

-		},

-

-		_nodeChanged : function(ed, cm, n, co, ob) {

-			var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches;

-

-			tinymce.each(t.stateControls, function(c) {

-				cm.setActive(c, ed.queryCommandState(t.controls[c][1]));

-			});

-

-			function getParent(name) {

-				var i, parents = ob.parents, func = name;

-

-				if (typeof(name) == 'string') {

-					func = function(node) {

-						return node.nodeName == name;

-					};

-				}

-

-				for (i = 0; i < parents.length; i++) {

-					if (func(parents[i]))

-						return parents[i];

-				}

-			};

-

-			cm.setActive('visualaid', ed.hasVisual);

-			t._updateUndoStatus(ed);

-			cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));

-

-			p = getParent('A');

-			if (c = cm.get('link')) {

-				if (!p || !p.name) {

-					c.setDisabled(!p && co);

-					c.setActive(!!p);

-				}

-			}

-

-			if (c = cm.get('unlink')) {

-				c.setDisabled(!p && co);

-				c.setActive(!!p && !p.name);

-			}

-

-			if (c = cm.get('anchor')) {

-				c.setActive(!co && !!p && p.name);

-			}

-

-			p = getParent('IMG');

-			if (c = cm.get('image'))

-				c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1);

-

-			if (c = cm.get('styleselect')) {

-				t._importClasses();

-

-				formatNames = [];

-				each(c.items, function(item) {

-					formatNames.push(item.value);

-				});

-

-				matches = ed.formatter.matchAll(formatNames);

-				c.select(matches[0]);

-			}

-

-			if (c = cm.get('formatselect')) {

-				p = getParent(DOM.isBlock);

-

-				if (p)

-					c.select(p.nodeName.toLowerCase());

-			}

-

-			// Find out current fontSize, fontFamily and fontClass

-			getParent(function(n) {

-				if (n.nodeName === 'SPAN') {

-					if (!cl && n.className)

-						cl = n.className;

-				}

-

-				if (ed.dom.is(n, s.theme_advanced_font_selector)) {

-					if (!fz && n.style.fontSize)

-						fz = n.style.fontSize;

-

-					if (!fn && n.style.fontFamily)

-						fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase();

-					

-					if (!fc && n.style.color)

-						fc = n.style.color;

-

-					if (!bc && n.style.backgroundColor)

-						bc = n.style.backgroundColor;

-				}

-

-				return false;

-			});

-

-			if (c = cm.get('fontselect')) {

-				c.select(function(v) {

-					return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn;

-				});

-			}

-

-			// Select font size

-			if (c = cm.get('fontsizeselect')) {

-				// Use computed style

-				if (s.theme_advanced_runtime_fontsize && !fz && !cl)

-					fz = ed.dom.getStyle(n, 'fontSize', true);

-

-				c.select(function(v) {

-					if (v.fontSize && v.fontSize === fz)

-						return true;

-

-					if (v['class'] && v['class'] === cl)

-						return true;

-				});

-			}

-			

-			if (s.theme_advanced_show_current_color) {

-				function updateColor(controlId, color) {

-					if (c = cm.get(controlId)) {

-						if (!color)

-							color = c.settings.default_color;

-						if (color !== c.value) {

-							c.displayColor(color);

-						}

-					}

-				}

-				updateColor('forecolor', fc);

-				updateColor('backcolor', bc);

-			}

-

-			if (s.theme_advanced_show_current_color) {

-				function updateColor(controlId, color) {

-					if (c = cm.get(controlId)) {

-						if (!color)

-							color = c.settings.default_color;

-						if (color !== c.value) {

-							c.displayColor(color);

-						}

-					}

-				};

-

-				updateColor('forecolor', fc);

-				updateColor('backcolor', bc);

-			}

-

-			if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {

-				p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});

-

-				if (t.statusKeyboardNavigation) {

-					t.statusKeyboardNavigation.destroy();

-					t.statusKeyboardNavigation = null;

-				}

-

-				DOM.setHTML(p, '');

-

-				getParent(function(n) {

-					var na = n.nodeName.toLowerCase(), u, pi, ti = '';

-

-					// Ignore non element and bogus/hidden elements

-					if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))

-						return;

-

-					// Handle prefix

-					if (tinymce.isIE && n.scopeName !== 'HTML')

-						na = n.scopeName + ':' + na;

-

-					// Remove internal prefix

-					na = na.replace(/mce\:/g, '');

-

-					// Handle node name

-					switch (na) {

-						case 'b':

-							na = 'strong';

-							break;

-

-						case 'i':

-							na = 'em';

-							break;

-

-						case 'img':

-							if (v = DOM.getAttrib(n, 'src'))

-								ti += 'src: ' + v + ' ';

-

-							break;

-

-						case 'a':

-							if (v = DOM.getAttrib(n, 'name')) {

-								ti += 'name: ' + v + ' ';

-								na += '#' + v;

-							}

-

-							if (v = DOM.getAttrib(n, 'href'))

-								ti += 'href: ' + v + ' ';

-

-							break;

-

-						case 'font':

-							if (v = DOM.getAttrib(n, 'face'))

-								ti += 'font: ' + v + ' ';

-

-							if (v = DOM.getAttrib(n, 'size'))

-								ti += 'size: ' + v + ' ';

-

-							if (v = DOM.getAttrib(n, 'color'))

-								ti += 'color: ' + v + ' ';

-

-							break;

-

-						case 'span':

-							if (v = DOM.getAttrib(n, 'style'))

-								ti += 'style: ' + v + ' ';

-

-							break;

-					}

-

-					if (v = DOM.getAttrib(n, 'id'))

-						ti += 'id: ' + v + ' ';

-

-					if (v = n.className) {

-						v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '')

-

-						if (v) {

-							ti += 'class: ' + v + ' ';

-

-							if (DOM.isBlock(n) || na == 'img' || na == 'span')

-								na += '.' + v;

-						}

-					}

-

-					na = na.replace(/(html:)/g, '');

-					na = {name : na, node : n, title : ti};

-					t.onResolveName.dispatch(t, na);

-					ti = na.title;

-					na = na.name;

-

-					//u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";

-					pi = DOM.create('a', {'href' : "javascript:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);

-

-					if (p.hasChildNodes()) {

-						p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild);

-						p.insertBefore(pi, p.firstChild);

-					} else

-						p.appendChild(pi);

-				}, ed.getBody());

-

-				if (DOM.select('a', p).length > 0) {

-					t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({

-						root: ed.id + "_path_row",

-						items: DOM.select('a', p),

-						excludeFromTabOrder: true,

-						onCancel: function() {

-							ed.focus();

-						}

-					}, DOM);

-				}

-			}

-		},

-

-		// Commands gets called by execCommand

-

-		_sel : function(v) {

-			this.editor.execCommand('mceSelectNodeDepth', false, v);

-		},

-

-		_mceInsertAnchor : function(ui, v) {

-			var ed = this.editor;

-

-			ed.windowManager.open({

-				url : this.url + '/anchor.htm',

-				width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),

-				height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),

-				inline : true

-			}, {

-				theme_url : this.url

-			});

-		},

-

-		_mceCharMap : function() {

-			var ed = this.editor;

-

-			ed.windowManager.open({

-				url : this.url + '/charmap.htm',

-				width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),

-				height : 265 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),

-				inline : true

-			}, {

-				theme_url : this.url

-			});

-		},

-

-		_mceHelp : function() {

-			var ed = this.editor;

-

-			ed.windowManager.open({

-				url : this.url + '/about.htm',

-				width : 480,

-				height : 380,

-				inline : true

-			}, {

-				theme_url : this.url

-			});

-		},

-

-		_mceShortcuts : function() {

-			var ed = this.editor;

-			ed.windowManager.open({

-				url: this.url + '/shortcuts.htm',

-				width: 480,

-				height: 380,

-				inline: true

-			}, {

-				theme_url: this.url

-			});

-		},

-

-		_mceColorPicker : function(u, v) {

-			var ed = this.editor;

-

-			v = v || {};

-

-			ed.windowManager.open({

-				url : this.url + '/color_picker.htm',

-				width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),

-				height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),

-				close_previous : false,

-				inline : true

-			}, {

-				input_color : v.color,

-				func : v.func,

-				theme_url : this.url

-			});

-		},

-

-		_mceCodeEditor : function(ui, val) {

-			var ed = this.editor;

-

-			ed.windowManager.open({

-				url : this.url + '/source_editor.htm',

-				width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),

-				height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),

-				inline : true,

-				resizable : true,

-				maximizable : true

-			}, {

-				theme_url : this.url

-			});

-		},

-

-		_mceImage : function(ui, val) {

-			var ed = this.editor;

-

-			// Internal image object like a flash placeholder

-			if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)

-				return;

-

-			ed.windowManager.open({

-				url : this.url + '/image.htm',

-				width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),

-				height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),

-				inline : true

-			}, {

-				theme_url : this.url

-			});

-		},

-

-		_mceLink : function(ui, val) {

-			var ed = this.editor;

-

-			ed.windowManager.open({

-				url : this.url + '/link.htm',

-				width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),

-				height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),

-				inline : true

-			}, {

-				theme_url : this.url

-			});

-		},

-

-		_mceNewDocument : function() {

-			var ed = this.editor;

-

-			ed.windowManager.confirm('advanced.newdocument', function(s) {

-				if (s)

-					ed.execCommand('mceSetContent', false, '');

-			});

-		},

-

-		_mceForeColor : function() {

-			var t = this;

-

-			this._mceColorPicker(0, {

-				color: t.fgColor,

-				func : function(co) {

-					t.fgColor = co;

-					t.editor.execCommand('ForeColor', false, co);

-				}

-			});

-		},

-

-		_mceBackColor : function() {

-			var t = this;

-

-			this._mceColorPicker(0, {

-				color: t.bgColor,

-				func : function(co) {

-					t.bgColor = co;

-					t.editor.execCommand('HiliteColor', false, co);

-				}

-			});

-		},

-

-		_ufirst : function(s) {

-			return s.substring(0, 1).toUpperCase() + s.substring(1);

-		}

-	});

-

-	tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);

-}(tinymce));

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/image.htm
+++ /dev/null
@@ -1,81 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advanced_dlg.image_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="js/image.js"></script>

-</head>

-<body id="image" style="display: none">

-<form onsubmit="ImageDialog.update();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<table border="0" cellpadding="4" cellspacing="0">

-				<tr>

-					<td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>

-					<td><table border="0" cellspacing="0" cellpadding="0">

-						<tr>

-							<td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>

-							<td id="srcbrowsercontainer">&nbsp;</td>

-						</tr>

-					</table></td>

-				</tr>

-				<tr>

-					<td><label for="image_list">{#advanced_dlg.image_list}</label></td>

-					<td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>

-				</tr>

-				<tr>

-					<td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>

-					<td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>

-				</tr>

-				<tr>

-					<td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>

-					<td><select id="align" name="align" onchange="ImageDialog.updateStyle();">

-						<option value="">{#not_set}</option>

-						<option value="baseline">{#advanced_dlg.image_align_baseline}</option>

-						<option value="top">{#advanced_dlg.image_align_top}</option>

-						<option value="middle">{#advanced_dlg.image_align_middle}</option>

-						<option value="bottom">{#advanced_dlg.image_align_bottom}</option>

-						<option value="text-top">{#advanced_dlg.image_align_texttop}</option>

-						<option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>

-						<option value="left">{#advanced_dlg.image_align_left}</option>

-						<option value="right">{#advanced_dlg.image_align_right}</option>

-					</select></td>

-				</tr>

-				<tr>

-					<td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>

-					<td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />

-					 x 

-					<input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>

-				</tr>

-				<tr>

-				<td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>

-				<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>

-				</tr>

-				<tr>

-					<td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>

-					<td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>

-				</tr>

-				<tr>

-					<td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>

-					<td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>

-				</tr>

-			</table>

-		</div>

-	</div>

-

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#insert}" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/flash.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/iframe.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/quicktime.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/realmedia.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/shockwave.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/trans.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/video.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js
+++ /dev/null
@@ -1,74 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-function init() {

-	var ed, tcont;

-

-	tinyMCEPopup.resizeToInnerSize();

-	ed = tinyMCEPopup.editor;

-

-	// Give FF some time

-	window.setTimeout(insertHelpIFrame, 10);

-

-	tcont = document.getElementById('plugintablecontainer');

-	document.getElementById('plugins_tab').style.display = 'none';

-

-	var html = "";

-	html += '<table id="plugintable">';

-	html += '<thead>';

-	html += '<tr>';

-	html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';

-	html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';

-	html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';

-	html += '</tr>';

-	html += '</thead>';

-	html += '<tbody>';

-

-	tinymce.each(ed.plugins, function(p, n) {

-		var info;

-

-		if (!p.getInfo)

-			return;

-

-		html += '<tr>';

-

-		info = p.getInfo();

-

-		if (info.infourl != null && info.infourl != '')

-			html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';

-		else

-			html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';

-

-		if (info.authorurl != null && info.authorurl != '')

-			html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';

-		else

-			html += '<td width="35%">' + info.author + '</td>';

-

-		html += '<td width="15%">' + info.version + '</td>';

-		html += '</tr>';

-

-		document.getElementById('plugins_tab').style.display = '';

-

-	});

-

-	html += '</tbody>';

-	html += '</table>';

-

-	tcont.innerHTML = html;

-

-	tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;

-	tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;

-}

-

-function insertHelpIFrame() {

-	var html;

-

-	if (tinyMCEPopup.getParam('docs_url')) {

-		html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';

-		document.getElementById('iframecontainer').innerHTML = html;

-		document.getElementById('help_tab').style.display = 'block';

-		document.getElementById('help_tab').setAttribute("aria-hidden", "false");

-	}

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js
+++ /dev/null
@@ -1,44 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var AnchorDialog = {

-	init : function(ed) {

-		var action, elm, f = document.forms[0];

-

-		this.editor = ed;

-		elm = ed.dom.getParent(ed.selection.getNode(), 'A');

-		v = ed.dom.getAttrib(elm, 'name');

-

-		if (v) {

-			this.action = 'update';

-			f.anchorName.value = v;

-		}

-

-		f.insert.value = ed.getLang(elm ? 'update' : 'insert');

-	},

-

-	update : function() {

-		var ed = this.editor, elm, name = document.forms[0].anchorName.value;

-

-		if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) {

-			tinyMCEPopup.alert('advanced_dlg.anchor_invalid');

-			return;

-		}

-

-		tinyMCEPopup.restoreSelection();

-

-		if (this.action != 'update')

-			ed.selection.collapse(1);

-

-		elm = ed.dom.getParent(ed.selection.getNode(), 'A');

-		if (elm) {

-			elm.setAttribute('name', name);

-			elm.name = name;

-		} else

-			ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, ''));

-

-		tinyMCEPopup.close();

-	}

-};

-

-tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js
+++ /dev/null
@@ -1,364 +1,1 @@
-/**

- * charmap.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-tinyMCEPopup.requireLangPack();

-

-var charmap = [

-	['&nbsp;',    '&#160;',  true, 'no-break space'],

-	['&amp;',     '&#38;',   true, 'ampersand'],

-	['&quot;',    '&#34;',   true, 'quotation mark'],

-// finance

-	['&cent;',    '&#162;',  true, 'cent sign'],

-	['&euro;',    '&#8364;', true, 'euro sign'],

-	['&pound;',   '&#163;',  true, 'pound sign'],

-	['&yen;',     '&#165;',  true, 'yen sign'],

-// signs

-	['&copy;',    '&#169;',  true, 'copyright sign'],

-	['&reg;',     '&#174;',  true, 'registered sign'],

-	['&trade;',   '&#8482;', true, 'trade mark sign'],

-	['&permil;',  '&#8240;', true, 'per mille sign'],

-	['&micro;',   '&#181;',  true, 'micro sign'],

-	['&middot;',  '&#183;',  true, 'middle dot'],

-	['&bull;',    '&#8226;', true, 'bullet'],

-	['&hellip;',  '&#8230;', true, 'three dot leader'],

-	['&prime;',   '&#8242;', true, 'minutes / feet'],

-	['&Prime;',   '&#8243;', true, 'seconds / inches'],

-	['&sect;',    '&#167;',  true, 'section sign'],

-	['&para;',    '&#182;',  true, 'paragraph sign'],

-	['&szlig;',   '&#223;',  true, 'sharp s / ess-zed'],

-// quotations

-	['&lsaquo;',  '&#8249;', true, 'single left-pointing angle quotation mark'],

-	['&rsaquo;',  '&#8250;', true, 'single right-pointing angle quotation mark'],

-	['&laquo;',   '&#171;',  true, 'left pointing guillemet'],

-	['&raquo;',   '&#187;',  true, 'right pointing guillemet'],

-	['&lsquo;',   '&#8216;', true, 'left single quotation mark'],

-	['&rsquo;',   '&#8217;', true, 'right single quotation mark'],

-	['&ldquo;',   '&#8220;', true, 'left double quotation mark'],

-	['&rdquo;',   '&#8221;', true, 'right double quotation mark'],

-	['&sbquo;',   '&#8218;', true, 'single low-9 quotation mark'],

-	['&bdquo;',   '&#8222;', true, 'double low-9 quotation mark'],

-	['&lt;',      '&#60;',   true, 'less-than sign'],

-	['&gt;',      '&#62;',   true, 'greater-than sign'],

-	['&le;',      '&#8804;', true, 'less-than or equal to'],

-	['&ge;',      '&#8805;', true, 'greater-than or equal to'],

-	['&ndash;',   '&#8211;', true, 'en dash'],

-	['&mdash;',   '&#8212;', true, 'em dash'],

-	['&macr;',    '&#175;',  true, 'macron'],

-	['&oline;',   '&#8254;', true, 'overline'],

-	['&curren;',  '&#164;',  true, 'currency sign'],

-	['&brvbar;',  '&#166;',  true, 'broken bar'],

-	['&uml;',     '&#168;',  true, 'diaeresis'],

-	['&iexcl;',   '&#161;',  true, 'inverted exclamation mark'],

-	['&iquest;',  '&#191;',  true, 'turned question mark'],

-	['&circ;',    '&#710;',  true, 'circumflex accent'],

-	['&tilde;',   '&#732;',  true, 'small tilde'],

-	['&deg;',     '&#176;',  true, 'degree sign'],

-	['&minus;',   '&#8722;', true, 'minus sign'],

-	['&plusmn;',  '&#177;',  true, 'plus-minus sign'],

-	['&divide;',  '&#247;',  true, 'division sign'],

-	['&frasl;',   '&#8260;', true, 'fraction slash'],

-	['&times;',   '&#215;',  true, 'multiplication sign'],

-	['&sup1;',    '&#185;',  true, 'superscript one'],

-	['&sup2;',    '&#178;',  true, 'superscript two'],

-	['&sup3;',    '&#179;',  true, 'superscript three'],

-	['&frac14;',  '&#188;',  true, 'fraction one quarter'],

-	['&frac12;',  '&#189;',  true, 'fraction one half'],

-	['&frac34;',  '&#190;',  true, 'fraction three quarters'],

-// math / logical

-	['&fnof;',    '&#402;',  true, 'function / florin'],

-	['&int;',     '&#8747;', true, 'integral'],

-	['&sum;',     '&#8721;', true, 'n-ary sumation'],

-	['&infin;',   '&#8734;', true, 'infinity'],

-	['&radic;',   '&#8730;', true, 'square root'],

-	['&sim;',     '&#8764;', false,'similar to'],

-	['&cong;',    '&#8773;', false,'approximately equal to'],

-	['&asymp;',   '&#8776;', true, 'almost equal to'],

-	['&ne;',      '&#8800;', true, 'not equal to'],

-	['&equiv;',   '&#8801;', true, 'identical to'],

-	['&isin;',    '&#8712;', false,'element of'],

-	['&notin;',   '&#8713;', false,'not an element of'],

-	['&ni;',      '&#8715;', false,'contains as member'],

-	['&prod;',    '&#8719;', true, 'n-ary product'],

-	['&and;',     '&#8743;', false,'logical and'],

-	['&or;',      '&#8744;', false,'logical or'],

-	['&not;',     '&#172;',  true, 'not sign'],

-	['&cap;',     '&#8745;', true, 'intersection'],

-	['&cup;',     '&#8746;', false,'union'],

-	['&part;',    '&#8706;', true, 'partial differential'],

-	['&forall;',  '&#8704;', false,'for all'],

-	['&exist;',   '&#8707;', false,'there exists'],

-	['&empty;',   '&#8709;', false,'diameter'],

-	['&nabla;',   '&#8711;', false,'backward difference'],

-	['&lowast;',  '&#8727;', false,'asterisk operator'],

-	['&prop;',    '&#8733;', false,'proportional to'],

-	['&ang;',     '&#8736;', false,'angle'],

-// undefined

-	['&acute;',   '&#180;',  true, 'acute accent'],

-	['&cedil;',   '&#184;',  true, 'cedilla'],

-	['&ordf;',    '&#170;',  true, 'feminine ordinal indicator'],

-	['&ordm;',    '&#186;',  true, 'masculine ordinal indicator'],

-	['&dagger;',  '&#8224;', true, 'dagger'],

-	['&Dagger;',  '&#8225;', true, 'double dagger'],

-// alphabetical special chars

-	['&Agrave;',  '&#192;',  true, 'A - grave'],

-	['&Aacute;',  '&#193;',  true, 'A - acute'],

-	['&Acirc;',   '&#194;',  true, 'A - circumflex'],

-	['&Atilde;',  '&#195;',  true, 'A - tilde'],

-	['&Auml;',    '&#196;',  true, 'A - diaeresis'],

-	['&Aring;',   '&#197;',  true, 'A - ring above'],

-	['&AElig;',   '&#198;',  true, 'ligature AE'],

-	['&Ccedil;',  '&#199;',  true, 'C - cedilla'],

-	['&Egrave;',  '&#200;',  true, 'E - grave'],

-	['&Eacute;',  '&#201;',  true, 'E - acute'],

-	['&Ecirc;',   '&#202;',  true, 'E - circumflex'],

-	['&Euml;',    '&#203;',  true, 'E - diaeresis'],

-	['&Igrave;',  '&#204;',  true, 'I - grave'],

-	['&Iacute;',  '&#205;',  true, 'I - acute'],

-	['&Icirc;',   '&#206;',  true, 'I - circumflex'],

-	['&Iuml;',    '&#207;',  true, 'I - diaeresis'],

-	['&ETH;',     '&#208;',  true, 'ETH'],

-	['&Ntilde;',  '&#209;',  true, 'N - tilde'],

-	['&Ograve;',  '&#210;',  true, 'O - grave'],

-	['&Oacute;',  '&#211;',  true, 'O - acute'],

-	['&Ocirc;',   '&#212;',  true, 'O - circumflex'],

-	['&Otilde;',  '&#213;',  true, 'O - tilde'],

-	['&Ouml;',    '&#214;',  true, 'O - diaeresis'],

-	['&Oslash;',  '&#216;',  true, 'O - slash'],

-	['&OElig;',   '&#338;',  true, 'ligature OE'],

-	['&Scaron;',  '&#352;',  true, 'S - caron'],

-	['&Ugrave;',  '&#217;',  true, 'U - grave'],

-	['&Uacute;',  '&#218;',  true, 'U - acute'],

-	['&Ucirc;',   '&#219;',  true, 'U - circumflex'],

-	['&Uuml;',    '&#220;',  true, 'U - diaeresis'],

-	['&Yacute;',  '&#221;',  true, 'Y - acute'],

-	['&Yuml;',    '&#376;',  true, 'Y - diaeresis'],

-	['&THORN;',   '&#222;',  true, 'THORN'],

-	['&agrave;',  '&#224;',  true, 'a - grave'],

-	['&aacute;',  '&#225;',  true, 'a - acute'],

-	['&acirc;',   '&#226;',  true, 'a - circumflex'],

-	['&atilde;',  '&#227;',  true, 'a - tilde'],

-	['&auml;',    '&#228;',  true, 'a - diaeresis'],

-	['&aring;',   '&#229;',  true, 'a - ring above'],

-	['&aelig;',   '&#230;',  true, 'ligature ae'],

-	['&ccedil;',  '&#231;',  true, 'c - cedilla'],

-	['&egrave;',  '&#232;',  true, 'e - grave'],

-	['&eacute;',  '&#233;',  true, 'e - acute'],

-	['&ecirc;',   '&#234;',  true, 'e - circumflex'],

-	['&euml;',    '&#235;',  true, 'e - diaeresis'],

-	['&igrave;',  '&#236;',  true, 'i - grave'],

-	['&iacute;',  '&#237;',  true, 'i - acute'],

-	['&icirc;',   '&#238;',  true, 'i - circumflex'],

-	['&iuml;',    '&#239;',  true, 'i - diaeresis'],

-	['&eth;',     '&#240;',  true, 'eth'],

-	['&ntilde;',  '&#241;',  true, 'n - tilde'],

-	['&ograve;',  '&#242;',  true, 'o - grave'],

-	['&oacute;',  '&#243;',  true, 'o - acute'],

-	['&ocirc;',   '&#244;',  true, 'o - circumflex'],

-	['&otilde;',  '&#245;',  true, 'o - tilde'],

-	['&ouml;',    '&#246;',  true, 'o - diaeresis'],

-	['&oslash;',  '&#248;',  true, 'o slash'],

-	['&oelig;',   '&#339;',  true, 'ligature oe'],

-	['&scaron;',  '&#353;',  true, 's - caron'],

-	['&ugrave;',  '&#249;',  true, 'u - grave'],

-	['&uacute;',  '&#250;',  true, 'u - acute'],

-	['&ucirc;',   '&#251;',  true, 'u - circumflex'],

-	['&uuml;',    '&#252;',  true, 'u - diaeresis'],

-	['&yacute;',  '&#253;',  true, 'y - acute'],

-	['&thorn;',   '&#254;',  true, 'thorn'],

-	['&yuml;',    '&#255;',  true, 'y - diaeresis'],

-	['&Alpha;',   '&#913;',  true, 'Alpha'],

-	['&Beta;',    '&#914;',  true, 'Beta'],

-	['&Gamma;',   '&#915;',  true, 'Gamma'],

-	['&Delta;',   '&#916;',  true, 'Delta'],

-	['&Epsilon;', '&#917;',  true, 'Epsilon'],

-	['&Zeta;',    '&#918;',  true, 'Zeta'],

-	['&Eta;',     '&#919;',  true, 'Eta'],

-	['&Theta;',   '&#920;',  true, 'Theta'],

-	['&Iota;',    '&#921;',  true, 'Iota'],

-	['&Kappa;',   '&#922;',  true, 'Kappa'],

-	['&Lambda;',  '&#923;',  true, 'Lambda'],

-	['&Mu;',      '&#924;',  true, 'Mu'],

-	['&Nu;',      '&#925;',  true, 'Nu'],

-	['&Xi;',      '&#926;',  true, 'Xi'],

-	['&Omicron;', '&#927;',  true, 'Omicron'],

-	['&Pi;',      '&#928;',  true, 'Pi'],

-	['&Rho;',     '&#929;',  true, 'Rho'],

-	['&Sigma;',   '&#931;',  true, 'Sigma'],

-	['&Tau;',     '&#932;',  true, 'Tau'],

-	['&Upsilon;', '&#933;',  true, 'Upsilon'],

-	['&Phi;',     '&#934;',  true, 'Phi'],

-	['&Chi;',     '&#935;',  true, 'Chi'],

-	['&Psi;',     '&#936;',  true, 'Psi'],

-	['&Omega;',   '&#937;',  true, 'Omega'],

-	['&alpha;',   '&#945;',  true, 'alpha'],

-	['&beta;',    '&#946;',  true, 'beta'],

-	['&gamma;',   '&#947;',  true, 'gamma'],

-	['&delta;',   '&#948;',  true, 'delta'],

-	['&epsilon;', '&#949;',  true, 'epsilon'],

-	['&zeta;',    '&#950;',  true, 'zeta'],

-	['&eta;',     '&#951;',  true, 'eta'],

-	['&theta;',   '&#952;',  true, 'theta'],

-	['&iota;',    '&#953;',  true, 'iota'],

-	['&kappa;',   '&#954;',  true, 'kappa'],

-	['&lambda;',  '&#955;',  true, 'lambda'],

-	['&mu;',      '&#956;',  true, 'mu'],

-	['&nu;',      '&#957;',  true, 'nu'],

-	['&xi;',      '&#958;',  true, 'xi'],

-	['&omicron;', '&#959;',  true, 'omicron'],

-	['&pi;',      '&#960;',  true, 'pi'],

-	['&rho;',     '&#961;',  true, 'rho'],

-	['&sigmaf;',  '&#962;',  true, 'final sigma'],

-	['&sigma;',   '&#963;',  true, 'sigma'],

-	['&tau;',     '&#964;',  true, 'tau'],

-	['&upsilon;', '&#965;',  true, 'upsilon'],

-	['&phi;',     '&#966;',  true, 'phi'],

-	['&chi;',     '&#967;',  true, 'chi'],

-	['&psi;',     '&#968;',  true, 'psi'],

-	['&omega;',   '&#969;',  true, 'omega'],

-// symbols

-	['&alefsym;', '&#8501;', false,'alef symbol'],

-	['&piv;',     '&#982;',  false,'pi symbol'],

-	['&real;',    '&#8476;', false,'real part symbol'],

-	['&thetasym;','&#977;',  false,'theta symbol'],

-	['&upsih;',   '&#978;',  false,'upsilon - hook symbol'],

-	['&weierp;',  '&#8472;', false,'Weierstrass p'],

-	['&image;',   '&#8465;', false,'imaginary part'],

-// arrows

-	['&larr;',    '&#8592;', true, 'leftwards arrow'],

-	['&uarr;',    '&#8593;', true, 'upwards arrow'],

-	['&rarr;',    '&#8594;', true, 'rightwards arrow'],

-	['&darr;',    '&#8595;', true, 'downwards arrow'],

-	['&harr;',    '&#8596;', true, 'left right arrow'],

-	['&crarr;',   '&#8629;', false,'carriage return'],

-	['&lArr;',    '&#8656;', false,'leftwards double arrow'],

-	['&uArr;',    '&#8657;', false,'upwards double arrow'],

-	['&rArr;',    '&#8658;', false,'rightwards double arrow'],

-	['&dArr;',    '&#8659;', false,'downwards double arrow'],

-	['&hArr;',    '&#8660;', false,'left right double arrow'],

-	['&there4;',  '&#8756;', false,'therefore'],

-	['&sub;',     '&#8834;', false,'subset of'],

-	['&sup;',     '&#8835;', false,'superset of'],

-	['&nsub;',    '&#8836;', false,'not a subset of'],

-	['&sube;',    '&#8838;', false,'subset of or equal to'],

-	['&supe;',    '&#8839;', false,'superset of or equal to'],

-	['&oplus;',   '&#8853;', false,'circled plus'],

-	['&otimes;',  '&#8855;', false,'circled times'],

-	['&perp;',    '&#8869;', false,'perpendicular'],

-	['&sdot;',    '&#8901;', false,'dot operator'],

-	['&lceil;',   '&#8968;', false,'left ceiling'],

-	['&rceil;',   '&#8969;', false,'right ceiling'],

-	['&lfloor;',  '&#8970;', false,'left floor'],

-	['&rfloor;',  '&#8971;', false,'right floor'],

-	['&lang;',    '&#9001;', false,'left-pointing angle bracket'],

-	['&rang;',    '&#9002;', false,'right-pointing angle bracket'],

-	['&loz;',     '&#9674;', true, 'lozenge'],

-	['&spades;',  '&#9824;', true, 'black spade suit'],

-	['&clubs;',   '&#9827;', true, 'black club suit'],

-	['&hearts;',  '&#9829;', true, 'black heart suit'],

-	['&diams;',   '&#9830;', true, 'black diamond suit'],

-	['&ensp;',    '&#8194;', false,'en space'],

-	['&emsp;',    '&#8195;', false,'em space'],

-	['&thinsp;',  '&#8201;', false,'thin space'],

-	['&zwnj;',    '&#8204;', false,'zero width non-joiner'],

-	['&zwj;',     '&#8205;', false,'zero width joiner'],

-	['&lrm;',     '&#8206;', false,'left-to-right mark'],

-	['&rlm;',     '&#8207;', false,'right-to-left mark'],

-	['&shy;',     '&#173;',  false,'soft hyphen']

-];

-

-tinyMCEPopup.onInit.add(function() {

-	tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());

-	addKeyboardNavigation();

-});

-

-function addKeyboardNavigation(){

-	var tableElm, cells, settings;

-

-	cells = tinyMCEPopup.dom.select("a.charmaplink", "charmapgroup");

-

-	settings ={

-		root: "charmapgroup",

-		items: cells

-	};

-	cells[0].tabindex=0;

-	tinyMCEPopup.dom.addClass(cells[0], "mceFocus");

-	if (tinymce.isGecko) {

-		cells[0].focus();		

-	} else {

-		setTimeout(function(){

-			cells[0].focus();

-		}, 100);

-	}

-	tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);

-}

-

-function renderCharMapHTML() {

-	var charsPerRow = 20, tdWidth=20, tdHeight=20, i;

-	var html = '<div id="charmapgroup" aria-labelledby="charmap_label" tabindex="0" role="listbox">'+

-	'<table role="presentation" border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + 

-	'"><tr height="' + tdHeight + '">';

-	var cols=-1;

-

-	for (i=0; i<charmap.length; i++) {

-		var previewCharFn;

-

-		if (charmap[i][2]==true) {

-			cols++;

-			previewCharFn = 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');';

-			html += ''

-				+ '<td class="charmap">'

-				+ '<a class="charmaplink" role="button" onmouseover="'+previewCharFn+'" onfocus="'+previewCharFn+'" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + ' '+ tinyMCEPopup.editor.translate("advanced_dlg.charmap_usage")+'">'

-				+ charmap[i][1]

-				+ '</a></td>';

-			if ((cols+1) % charsPerRow == 0)

-				html += '</tr><tr height="' + tdHeight + '">';

-		}

-	 }

-

-	if (cols % charsPerRow > 0) {

-		var padd = charsPerRow - (cols % charsPerRow);

-		for (var i=0; i<padd-1; i++)

-			html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';

-	}

-

-	html += '</tr></table></div>';

-	html = html.replace(/<tr height="20"><\/tr>/g, '');

-

-	return html;

-}

-

-function insertChar(chr) {

-	tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');

-

-	// Refocus in window

-	if (tinyMCEPopup.isWindow)

-		window.focus();

-

-	tinyMCEPopup.editor.focus();

-	tinyMCEPopup.close();

-}

-

-function previewChar(codeA, codeB, codeN) {

-	var elmA = document.getElementById('codeA');

-	var elmB = document.getElementById('codeB');

-	var elmV = document.getElementById('codeV');

-	var elmN = document.getElementById('codeN');

-

-	if (codeA=='#160;') {

-		elmV.innerHTML = '__';

-	} else {

-		elmV.innerHTML = '&' + codeA;

-	}

-

-	elmB.innerHTML = '&amp;' + codeA;

-	elmA.innerHTML = '&amp;' + codeB;

-	elmN.innerHTML = codeN;

-}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js
+++ /dev/null
@@ -1,330 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;

-

-var colors = [

-	"#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",

-	"#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",

-	"#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",

-	"#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",

-	"#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",

-	"#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",

-	"#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",

-	"#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",

-	"#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",

-	"#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",

-	"#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",

-	"#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",

-	"#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",

-	"#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",

-	"#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",

-	"#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",

-	"#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",

-	"#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",

-	"#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",

-	"#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",

-	"#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",

-	"#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",

-	"#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",

-	"#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",

-	"#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",

-	"#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",

-	"#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"

-];

-

-var named = {

-	'#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',

-	'#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown',

-	'#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue',

-	'#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod',

-	'#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green',

-	'#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue',

-	'#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue',

-	'#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green',

-	'#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey',

-	'#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory',

-	'#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue',

-	'#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green',

-	'#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey',

-	'#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',

-	'#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue',

-	'#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin',

-	'#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid',

-	'#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff',

-	'#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue',

-	'#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver',

-	'#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green',

-	'#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',

-	'#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green'

-};

-

-var namedLookup = {};

-

-function init() {

-	var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value;

-

-	tinyMCEPopup.resizeToInnerSize();

-

-	generatePicker();

-	generateWebColors();

-	generateNamedColors();

-

-	if (inputColor) {

-		changeFinalColor(inputColor);

-

-		col = convertHexToRGB(inputColor);

-

-		if (col)

-			updateLight(col.r, col.g, col.b);

-	}

-	

-	for (key in named) {

-		value = named[key];

-		namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase();

-	}

-}

-

-function toHexColor(color) {

-	var matches, red, green, blue, toInt = parseInt;

-

-	function hex(value) {

-		value = parseInt(value).toString(16);

-

-		return value.length > 1 ? value : '0' + value; // Padd with leading zero

-	};

-

-	color = color.replace(/[\s#]+/g, '').toLowerCase();

-	color = namedLookup[color] || color;

-	matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)|([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})|([a-f0-9])([a-f0-9])([a-f0-9])$/.exec(color);

-

-	if (matches) {

-		if (matches[1]) {

-			red = toInt(matches[1]);

-			green = toInt(matches[2]);

-			blue = toInt(matches[3]);

-		} else if (matches[4]) {

-			red = toInt(matches[4], 16);

-			green = toInt(matches[5], 16);

-			blue = toInt(matches[6], 16);

-		} else if (matches[7]) {

-			red = toInt(matches[7] + matches[7], 16);

-			green = toInt(matches[8] + matches[8], 16);

-			blue = toInt(matches[9] + matches[9], 16);

-		}

-

-		return '#' + hex(red) + hex(green) + hex(blue);

-	}

-

-	return '';

-}

-

-function insertAction() {

-	var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');

-

-	tinyMCEPopup.restoreSelection();

-

-	if (f)

-		f(toHexColor(color));

-

-	tinyMCEPopup.close();

-}

-

-function showColor(color, name) {

-	if (name)

-		document.getElementById("colorname").innerHTML = name;

-

-	document.getElementById("preview").style.backgroundColor = color;

-	document.getElementById("color").value = color.toUpperCase();

-}

-

-function convertRGBToHex(col) {

-	var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");

-

-	if (!col)

-		return col;

-

-	var rgb = col.replace(re, "$1,$2,$3").split(',');

-	if (rgb.length == 3) {

-		r = parseInt(rgb[0]).toString(16);

-		g = parseInt(rgb[1]).toString(16);

-		b = parseInt(rgb[2]).toString(16);

-

-		r = r.length == 1 ? '0' + r : r;

-		g = g.length == 1 ? '0' + g : g;

-		b = b.length == 1 ? '0' + b : b;

-

-		return "#" + r + g + b;

-	}

-

-	return col;

-}

-

-function convertHexToRGB(col) {

-	if (col.indexOf('#') != -1) {

-		col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');

-

-		r = parseInt(col.substring(0, 2), 16);

-		g = parseInt(col.substring(2, 4), 16);

-		b = parseInt(col.substring(4, 6), 16);

-

-		return {r : r, g : g, b : b};

-	}

-

-	return null;

-}

-

-function generatePicker() {

-	var el = document.getElementById('light'), h = '', i;

-

-	for (i = 0; i < detail; i++){

-		h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'

-		+ ' onclick="changeFinalColor(this.style.backgroundColor)"'

-		+ ' onmousedown="isMouseDown = true; return false;"'

-		+ ' onmouseup="isMouseDown = false;"'

-		+ ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'

-		+ ' onmouseover="isMouseOver = true;"'

-		+ ' onmouseout="isMouseOver = false;"'

-		+ '></div>';

-	}

-

-	el.innerHTML = h;

-}

-

-function generateWebColors() {

-	var el = document.getElementById('webcolors'), h = '', i;

-

-	if (el.className == 'generated')

-		return;

-

-	// TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby.

-	h += '<div role="listbox" aria-labelledby="webcolors_title" tabindex="0"><table role="presentation" border="0" cellspacing="1" cellpadding="0">'

-		+ '<tr>';

-

-	for (i=0; i<colors.length; i++) {

-		h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'

-			+ '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="web_colors_' + i + '" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">';

-		if (tinyMCEPopup.editor.forcedHighContrastMode) {

-			h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';

-		}

-		h += '<span class="mceVoiceLabel" style="display:none;" id="web_colors_' + i + '">' + colors[i].toUpperCase() + '</span>';

-		h += '</a></td>';

-		if ((i+1) % 18 == 0)

-			h += '</tr><tr>';

-	}

-

-	h += '</table></div>';

-

-	el.innerHTML = h;

-	el.className = 'generated';

-

-	paintCanvas(el);

-	enableKeyboardNavigation(el.firstChild);

-}

-

-function paintCanvas(el) {

-	tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) {

-		var context;

-		if (canvas.getContext && (context = canvas.getContext("2d"))) {

-			context.fillStyle = canvas.getAttribute('data-color');

-			context.fillRect(0, 0, 10, 10);

-		}

-	});

-}

-function generateNamedColors() {

-	var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;

-

-	if (el.className == 'generated')

-		return;

-

-	for (n in named) {

-		v = named[n];

-		h += '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="named_colors_' + i + '" onfocus="showColor(\'' + n + '\',\'' + v + '\');" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '">';

-		if (tinyMCEPopup.editor.forcedHighContrastMode) {

-			h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';

-		}

-		h += '<span class="mceVoiceLabel" style="display:none;" id="named_colors_' + i + '">' + v + '</span>';

-		h += '</a>';

-		i++;

-	}

-

-	el.innerHTML = h;

-	el.className = 'generated';

-

-	paintCanvas(el);

-	enableKeyboardNavigation(el);

-}

-

-function enableKeyboardNavigation(el) {

-	tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {

-		root: el,

-		items: tinyMCEPopup.dom.select('a', el)

-	}, tinyMCEPopup.dom);

-}

-

-function dechex(n) {

-	return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);

-}

-

-function computeColor(e) {

-	var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB, pos = tinyMCEPopup.dom.getPos(e.target);

-

-	x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0);

-	y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.y : 0);

-

-	partWidth = document.getElementById('colors').width / 6;

-	partDetail = detail / 2;

-	imHeight = document.getElementById('colors').height;

-

-	r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;

-	g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255	+ (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);

-	b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);

-

-	coef = (imHeight - y) / imHeight;

-	r = 128 + (r - 128) * coef;

-	g = 128 + (g - 128) * coef;

-	b = 128 + (b - 128) * coef;

-

-	changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));

-	updateLight(r, g, b);

-}

-

-function updateLight(r, g, b) {

-	var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;

-

-	for (i=0; i<detail; i++) {

-		if ((i>=0) && (i<partDetail)) {

-			finalCoef = i / partDetail;

-			finalR = dechex(255 - (255 - r) * finalCoef);

-			finalG = dechex(255 - (255 - g) * finalCoef);

-			finalB = dechex(255 - (255 - b) * finalCoef);

-		} else {

-			finalCoef = 2 - i / partDetail;

-			finalR = dechex(r * finalCoef);

-			finalG = dechex(g * finalCoef);

-			finalB = dechex(b * finalCoef);

-		}

-

-		color = finalR + finalG + finalB;

-

-		setCol('gs' + i, '#'+color);

-	}

-}

-

-function changeFinalColor(color) {

-	if (color.indexOf('#') == -1)

-		color = convertRGBToHex(color);

-

-	setCol('preview', color);

-	document.getElementById('color').value = color;

-}

-

-function setCol(e, c) {

-	try {

-		document.getElementById(e).style.backgroundColor = c;

-	} catch (ex) {

-		// Ignore IE warning

-	}

-}

-

-tinyMCEPopup.onInit.add(init);

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
+++ /dev/null
@@ -1,252 +1,1 @@
-var ImageDialog = {

-	preInit : function() {

-		var url;

-

-		tinyMCEPopup.requireLangPack();

-

-		if (url = tinyMCEPopup.getParam("external_image_list_url"))

-			document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

-	},

-

-	init : function() {

-		var f = document.forms[0], ed = tinyMCEPopup.editor;

-

-		// Setup browse button

-		document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');

-		if (isVisible('srcbrowser'))

-			document.getElementById('src').style.width = '180px';

-

-		e = ed.selection.getNode();

-

-		this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'));

-

-		if (e.nodeName == 'IMG') {

-			f.src.value = ed.dom.getAttrib(e, 'src');

-			f.alt.value = ed.dom.getAttrib(e, 'alt');

-			f.border.value = this.getAttrib(e, 'border');

-			f.vspace.value = this.getAttrib(e, 'vspace');

-			f.hspace.value = this.getAttrib(e, 'hspace');

-			f.width.value = ed.dom.getAttrib(e, 'width');

-			f.height.value = ed.dom.getAttrib(e, 'height');

-			f.insert.value = ed.getLang('update');

-			this.styleVal = ed.dom.getAttrib(e, 'style');

-			selectByValue(f, 'image_list', f.src.value);

-			selectByValue(f, 'align', this.getAttrib(e, 'align'));

-			this.updateStyle();

-		}

-	},

-

-	fillFileList : function(id, l) {

-		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

-

-		l = typeof(l) === 'function' ? l() : window[l];

-

-		if (l && l.length > 0) {

-			lst.options[lst.options.length] = new Option('', '');

-

-			tinymce.each(l, function(o) {

-				lst.options[lst.options.length] = new Option(o[0], o[1]);

-			});

-		} else

-			dom.remove(dom.getParent(id, 'tr'));

-	},

-

-	update : function() {

-		var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;

-

-		tinyMCEPopup.restoreSelection();

-

-		if (f.src.value === '') {

-			if (ed.selection.getNode().nodeName == 'IMG') {

-				ed.dom.remove(ed.selection.getNode());

-				ed.execCommand('mceRepaint');

-			}

-

-			tinyMCEPopup.close();

-			return;

-		}

-

-		if (!ed.settings.inline_styles) {

-			args = tinymce.extend(args, {

-				vspace : nl.vspace.value,

-				hspace : nl.hspace.value,

-				border : nl.border.value,

-				align : getSelectValue(f, 'align')

-			});

-		} else

-			args.style = this.styleVal;

-

-		tinymce.extend(args, {

-			src : f.src.value.replace(/ /g, '%20'),

-			alt : f.alt.value,

-			width : f.width.value,

-			height : f.height.value

-		});

-

-		el = ed.selection.getNode();

-

-		if (el && el.nodeName == 'IMG') {

-			ed.dom.setAttribs(el, args);

-			tinyMCEPopup.editor.execCommand('mceRepaint');

-			tinyMCEPopup.editor.focus();

-		} else {

-			tinymce.each(args, function(value, name) {

-				if (value === "") {

-					delete args[name];

-				}

-			});

-

-			ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});

-			ed.undoManager.add();

-		}

-

-		tinyMCEPopup.close();

-	},

-

-	updateStyle : function() {

-		var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];

-

-		if (tinyMCEPopup.editor.settings.inline_styles) {

-			st = tinyMCEPopup.dom.parseStyle(this.styleVal);

-

-			// Handle align

-			v = getSelectValue(f, 'align');

-			if (v) {

-				if (v == 'left' || v == 'right') {

-					st['float'] = v;

-					delete st['vertical-align'];

-				} else {

-					st['vertical-align'] = v;

-					delete st['float'];

-				}

-			} else {

-				delete st['float'];

-				delete st['vertical-align'];

-			}

-

-			// Handle border

-			v = f.border.value;

-			if (v || v == '0') {

-				if (v == '0')

-					st['border'] = '0';

-				else

-					st['border'] = v + 'px solid black';

-			} else

-				delete st['border'];

-

-			// Handle hspace

-			v = f.hspace.value;

-			if (v) {

-				delete st['margin'];

-				st['margin-left'] = v + 'px';

-				st['margin-right'] = v + 'px';

-			} else {

-				delete st['margin-left'];

-				delete st['margin-right'];

-			}

-

-			// Handle vspace

-			v = f.vspace.value;

-			if (v) {

-				delete st['margin'];

-				st['margin-top'] = v + 'px';

-				st['margin-bottom'] = v + 'px';

-			} else {

-				delete st['margin-top'];

-				delete st['margin-bottom'];

-			}

-

-			// Merge

-			st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');

-			this.styleVal = dom.serializeStyle(st, 'img');

-		}

-	},

-

-	getAttrib : function(e, at) {

-		var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;

-

-		if (ed.settings.inline_styles) {

-			switch (at) {

-				case 'align':

-					if (v = dom.getStyle(e, 'float'))

-						return v;

-

-					if (v = dom.getStyle(e, 'vertical-align'))

-						return v;

-

-					break;

-

-				case 'hspace':

-					v = dom.getStyle(e, 'margin-left')

-					v2 = dom.getStyle(e, 'margin-right');

-					if (v && v == v2)

-						return parseInt(v.replace(/[^0-9]/g, ''));

-

-					break;

-

-				case 'vspace':

-					v = dom.getStyle(e, 'margin-top')

-					v2 = dom.getStyle(e, 'margin-bottom');

-					if (v && v == v2)

-						return parseInt(v.replace(/[^0-9]/g, ''));

-

-					break;

-

-				case 'border':

-					v = 0;

-

-					tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {

-						sv = dom.getStyle(e, 'border-' + sv + '-width');

-

-						// False or not the same as prev

-						if (!sv || (sv != v && v !== 0)) {

-							v = 0;

-							return false;

-						}

-

-						if (sv)

-							v = sv;

-					});

-

-					if (v)

-						return parseInt(v.replace(/[^0-9]/g, ''));

-

-					break;

-			}

-		}

-

-		if (v = dom.getAttrib(e, at))

-			return v;

-

-		return '';

-	},

-

-	resetImageData : function() {

-		var f = document.forms[0];

-

-		f.width.value = f.height.value = "";	

-	},

-

-	updateImageData : function() {

-		var f = document.forms[0], t = ImageDialog;

-

-		if (f.width.value == "")

-			f.width.value = t.preloadImg.width;

-

-		if (f.height.value == "")

-			f.height.value = t.preloadImg.height;

-	},

-

-	getImageData : function() {

-		var f = document.forms[0];

-

-		this.preloadImg = new Image();

-		this.preloadImg.onload = this.updateImageData;

-		this.preloadImg.onerror = this.resetImageData;

-		this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);

-	}

-};

-

-ImageDialog.preInit();

-tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js
+++ /dev/null
@@ -1,154 +1,1 @@
-tinyMCEPopup.requireLangPack();

-

-var LinkDialog = {

-	preInit : function() {

-		var url;

-

-		if (url = tinyMCEPopup.getParam("external_link_list_url"))

-			document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

-	},

-

-	init : function() {

-		var f = document.forms[0], ed = tinyMCEPopup.editor;

-

-		// Setup browse button

-		document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');

-		if (isVisible('hrefbrowser'))

-			document.getElementById('href').style.width = '180px';

-

-		this.fillClassList('class_list');

-		this.fillFileList('link_list', 'tinyMCELinkList');

-		this.fillTargetList('target_list');

-

-		if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {

-			f.href.value = ed.dom.getAttrib(e, 'href');

-			f.linktitle.value = ed.dom.getAttrib(e, 'title');

-			f.insert.value = ed.getLang('update');

-			selectByValue(f, 'link_list', f.href.value);

-			selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));

-			selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));

-		}

-	},

-

-	update : function() {

-		var f = document.forms[0], ed = tinyMCEPopup.editor, e, b, href = f.href.value.replace(/ /g, '%20');

-

-		tinyMCEPopup.restoreSelection();

-		e = ed.dom.getParent(ed.selection.getNode(), 'A');

-

-		// Remove element if there is no href

-		if (!f.href.value) {

-			if (e) {

-				b = ed.selection.getBookmark();

-				ed.dom.remove(e, 1);

-				ed.selection.moveToBookmark(b);

-				tinyMCEPopup.execCommand("mceEndUndoLevel");

-				tinyMCEPopup.close();

-				return;

-			}

-		}

-

-		// Create new anchor elements

-		if (e == null) {

-			ed.getDoc().execCommand("unlink", false, null);

-			tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});

-

-			tinymce.each(ed.dom.select("a"), function(n) {

-				if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {

-					e = n;

-

-					ed.dom.setAttribs(e, {

-						href : href,

-						title : f.linktitle.value,

-						target : f.target_list ? getSelectValue(f, "target_list") : null,

-						'class' : f.class_list ? getSelectValue(f, "class_list") : null

-					});

-				}

-			});

-		} else {

-			ed.dom.setAttribs(e, {

-				href : href,

-				title : f.linktitle.value,

-				target : f.target_list ? getSelectValue(f, "target_list") : null,

-				'class' : f.class_list ? getSelectValue(f, "class_list") : null

-			});

-		}

-

-		// Don't move caret if selection was image

-		if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {

-			ed.focus();

-			ed.selection.select(e);

-			ed.selection.collapse(0);

-			tinyMCEPopup.storeSelection();

-		}

-

-		tinyMCEPopup.execCommand("mceEndUndoLevel");

-		tinyMCEPopup.close();

-	},

-

-	checkPrefix : function(n) {

-		if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))

-			n.value = 'mailto:' + n.value;

-

-		if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))

-			n.value = 'http://' + n.value;

-	},

-

-	fillFileList : function(id, l) {

-		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

-

-		l = window[l];

-

-		if (l && l.length > 0) {

-			lst.options[lst.options.length] = new Option('', '');

-

-			tinymce.each(l, function(o) {

-				lst.options[lst.options.length] = new Option(o[0], o[1]);

-			});

-		} else

-			dom.remove(dom.getParent(id, 'tr'));

-	},

-

-	fillClassList : function(id) {

-		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

-

-		if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {

-			cl = [];

-

-			tinymce.each(v.split(';'), function(v) {

-				var p = v.split('=');

-

-				cl.push({'title' : p[0], 'class' : p[1]});

-			});

-		} else

-			cl = tinyMCEPopup.editor.dom.getClasses();

-

-		if (cl.length > 0) {

-			lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');

-

-			tinymce.each(cl, function(o) {

-				lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);

-			});

-		} else

-			dom.remove(dom.getParent(id, 'tr'));

-	},

-

-	fillTargetList : function(id) {

-		var dom = tinyMCEPopup.dom, lst = dom.get(id), v;

-

-		lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');

-		lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');

-		lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');

-

-		if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {

-			tinymce.each(v.split(','), function(v) {

-				v = v.split('=');

-				lst.options[lst.options.length] = new Option(v[0], v[1]);

-			});

-		}

-	}

-};

-

-LinkDialog.preInit();

-tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js
+++ /dev/null
@@ -1,57 +1,1 @@
-tinyMCEPopup.requireLangPack();

-tinyMCEPopup.onInit.add(onLoadInit);

-

-function saveContent() {

-	tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});

-	tinyMCEPopup.close();

-}

-

-function onLoadInit() {

-	tinyMCEPopup.resizeToInnerSize();

-

-	// Remove Gecko spellchecking

-	if (tinymce.isGecko)

-		document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");

-

-	document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});

-

-	if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {

-		setWrap('soft');

-		document.getElementById('wraped').checked = true;

-	}

-

-	resizeInputs();

-}

-

-function setWrap(val) {

-	var v, n, s = document.getElementById('htmlSource');

-

-	s.wrap = val;

-

-	if (!tinymce.isIE) {

-		v = s.value;

-		n = s.cloneNode(false);

-		n.setAttribute("wrap", val);

-		s.parentNode.replaceChild(n, s);

-		n.value = v;

-	}

-}

-

-function toggleWordWrap(elm) {

-	if (elm.checked)

-		setWrap('soft');

-	else

-		setWrap('off');

-}

-

-function resizeInputs() {

-	var vp = tinyMCEPopup.dom.getViewPort(window), el;

-

-	el = document.getElementById('htmlSource');

-

-	if (el) {

-		el.style.width = (vp.w - 20) + 'px';

-		el.style.height = (vp.h - 65) + 'px';

-	}

-}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"});
+

--- a/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js
+++ /dev/null
@@ -1,2 +1,1 @@
-tinyMCE.addI18n('en.advanced_dlg', {"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character", "charmap_usage":"Use left and right arrows to navigate.","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","":""});
 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/link.htm
+++ /dev/null
@@ -1,58 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advanced_dlg.link_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="../../utils/mctabs.js"></script>

-	<script type="text/javascript" src="../../utils/form_utils.js"></script>

-	<script type="text/javascript" src="../../utils/validate.js"></script>

-	<script type="text/javascript" src="js/link.js"></script>

-</head>

-<body id="link" style="display: none">

-<form onsubmit="LinkDialog.update();return false;" action="#">

-	<div class="tabs">

-		<ul>

-			<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>

-		</ul>

-	</div>

-

-	<div class="panel_wrapper">

-		<div id="general_panel" class="panel current">

-			<table border="0" cellpadding="4" cellspacing="0">

-				<tr>

-					<td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>

-					<td><table border="0" cellspacing="0" cellpadding="0"> 

-						<tr> 

-							<td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> 

-							<td id="hrefbrowsercontainer">&nbsp;</td>

-						</tr> 

-					</table></td>

-				</tr>

-				<tr>

-					<td><label for="link_list">{#advanced_dlg.link_list}</label></td>

-					<td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>

-				</tr>

-				<tr>

-					<td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>

-					<td><select id="target_list" name="target_list"></select></td>

-				</tr>

-				<tr>

-					<td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>

-					<td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>

-				</tr>

-				<tr>

-					<td><label for="class_list">{#class_name}</label></td>

-					<td><select id="class_list" name="class_list"></select></td>

-				</tr>

-			</table>

-		</div>

-	</div>

-

-	<div class="mceActionPanel">

-		<input type="submit" id="insert" name="insert" value="{#insert}" />

-		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

-	</div>

-</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/shortcuts.htm
+++ /dev/null
@@ -1,48 +1,1 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

-<html xmlns="http://www.w3.org/1999/xhtml">

-	<head>

-		<title>{#advanced_dlg.accessibility_help}</title>

-		<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-		<script type="text/javascript">tinyMCEPopup.requireLangPack();</script>

-	</head>

-	<body id="content">

-		<h1>{#advanced_dlg.accessibility_usage_title}</h1>

-		<h2>Toolbars</h2>

-		<p>Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys.

-		Press enter to activate a button and return focus to the editor.

-		Press escape to return focus to the editor without performing any actions.</p>

-		

-		<h2>Status Bar</h2>

-		<p>To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path.

-		Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.</p>

-		

-		<h2>Context Menu</h2>

-		<p>Press shift-F10 to activate the context menu. Use the up and down arrow keys to move between menu items. To open sub-menus press the right arrow key.

-		To close submenus press the left arrow key.  Press escape to close the context menu.</p>

-		

-		<h1>Keyboard Shortcuts</h1>

-		<table>

-			<thead>

-				<tr>

-					<th>Keystroke</th>

-					<th>Function</th>

-				</tr>

-			</thead>

-			<tbody>

-				<tr>

-					<td>Control-B</td><td>Bold</td>

-				</tr>

-				<tr>

-					<td>Control-I</td><td>Italic</td>

-				</tr>

-				<tr>

-					<td>Control-Z</td><td>Undo</td>

-				</tr>

-				<tr>

-					<td>Control-Y</td><td>Redo</td>

-				</tr>

-			</tbody>

-		</table>

-	</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css
+++ /dev/null
@@ -1,51 +1,1 @@
-body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}

-body {background:#FFF;}

-body.mceForceColors {background:#FFF; color:#000;}

-body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;}

-h1 {font-size: 2em}

-h2 {font-size: 1.5em}

-h3 {font-size: 1.17em}

-h4 {font-size: 1em}

-h5 {font-size: .83em}

-h6 {font-size: .75em}

-.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}

-a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat center center}

-span.mceItemNbsp {background: #DDD}

-td.mceSelected, th.mceSelected {background-color:#3399ff !important}

-img {border:0;}

-table, img, hr, .mceItemAnchor {cursor:default}

-table td, table th {cursor:text}

-ins {border-bottom:1px solid green; text-decoration: none; color:green}

-del {color:red; text-decoration:line-through}

-cite {border-bottom:1px dashed blue}

-acronym {border-bottom:1px dotted #CCC; cursor:help}

-abbr {border-bottom:1px dashed #CCC; cursor:help}

-

-/* IE */

-* html body {

-scrollbar-3dlight-color:#F0F0EE;

-scrollbar-arrow-color:#676662;

-scrollbar-base-color:#F0F0EE;

-scrollbar-darkshadow-color:#DDD;

-scrollbar-face-color:#E0E0DD;

-scrollbar-highlight-color:#F0F0EE;

-scrollbar-shadow-color:#F0F0EE;

-scrollbar-track-color:#F5F5F5;

-}

-

-img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}

-font[face=mceinline] {font-family:inherit !important}

-*[contentEditable]:focus {outline:0}

-

-.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}

-.mceItemShockWave {background-image:url(../../img/shockwave.gif)}

-.mceItemFlash {background-image:url(../../img/flash.gif)}

-.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}

-.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}

-.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}

-.mceItemVideo {background-image:url(../../img/video.gif)}

-.mceItemAudio {background-image:url(../../img/video.gif)}

-.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)}

-.mceItemIframe {background-image:url(../../img/iframe.gif)}

-.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css
+++ /dev/null
@@ -1,118 +1,1 @@
-/* Generic */

-body {

-font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;

-scrollbar-3dlight-color:#F0F0EE;

-scrollbar-arrow-color:#676662;

-scrollbar-base-color:#F0F0EE;

-scrollbar-darkshadow-color:#DDDDDD;

-scrollbar-face-color:#E0E0DD;

-scrollbar-highlight-color:#F0F0EE;

-scrollbar-shadow-color:#F0F0EE;

-scrollbar-track-color:#F5F5F5;

-background:#F0F0EE;

-padding:0;

-margin:8px 8px 0 8px;

-}

-

-html {background:#F0F0EE;}

-td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

-textarea {resize:none;outline:none;}

-a:link, a:visited {color:black;}

-a:hover {color:#2B6FB6;}

-.nowrap {white-space: nowrap}

-

-/* Forms */

-fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}

-legend {color:#2B6FB6; font-weight:bold;}

-label.msg {display:none;}

-label.invalid {color:#EE0000; display:inline;}

-input.invalid {border:1px solid #EE0000;}

-input {background:#FFF; border:1px solid #CCC;}

-input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

-input, select, textarea {border:1px solid #808080;}

-input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}

-input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}

-.input_noborder {border:0;}

-

-/* Buttons */

-#insert, #cancel, input.button, .updateButton {

-border:0; margin:0; padding:0;

-font-weight:bold;

-width:94px; height:26px;

-background:url(img/buttons.png) 0 -26px;

-cursor:pointer;

-padding-bottom:2px;

-float:left;

-}

-

-#insert {background:url(img/buttons.png) 0 -52px}

-#cancel {background:url(img/buttons.png) 0 0; float:right}

-

-/* Browse */

-a.pickcolor, a.browse {text-decoration:none}

-a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}

-.mceOldBoxModel a.browse span {width:22px; height:20px;}

-a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}

-a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}

-a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}

-.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

-a.pickcolor:hover span {background-color:#B2BBD0;}

-a.pickcolor:hover span.disabled {}

-

-/* Charmap */

-table.charmap {border:1px solid #AAA; text-align:center}

-td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}

-#charmap a {display:block; color:#000; text-decoration:none; border:0}

-#charmap a:hover {background:#CCC;color:#2B6FB6}

-#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}

-#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}

-

-/* Source */

-.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}

-.mceActionPanel {margin-top:5px;}

-

-/* Tabs classes */

-.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}

-.tabs ul {margin:0; padding:0; list-style:none;}

-.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}

-.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}

-.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}

-.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}

-.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}

-.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}

-

-/* Panels */

-.panel_wrapper div.panel {display:none;}

-.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}

-.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}

-

-/* Columns */

-.column {float:left;}

-.properties {width:100%;}

-.properties .column1 {}

-.properties .column2 {text-align:left;}

-

-/* Titles */

-h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}

-h3 {font-size:14px;}

-.title {font-size:12px; font-weight:bold; color:#2B6FB6;}

-

-/* Dialog specific */

-#link .panel_wrapper, #link div.current {height:125px;}

-#image .panel_wrapper, #image div.current {height:200px;}

-#plugintable thead {font-weight:bold; background:#DDD;}

-#plugintable, #about #plugintable td {border:1px solid #919B9C;}

-#plugintable {width:96%; margin-top:10px;}

-#pluginscontainer {height:290px; overflow:auto;}

-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}

-#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}

-#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}

-#colorpicker #light div {overflow:hidden;}

-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}

-#colorpicker .panel_wrapper div.current {height:175px;}

-#colorpicker #namedcolors {width:150px;}

-#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}

-#colorpicker #colornamecontainer {margin-top:5px;}

-#colorpicker #picker_panel fieldset {margin:auto;width:325px;}

 

 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css
+++ /dev/null
@@ -1,215 +1,1 @@
-/* Reset */

-.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}

-.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}

-.defaultSkin table td {vertical-align:middle}

-

-/* Containers */

-.defaultSkin table {direction:ltr;background:transparent}

-.defaultSkin iframe {display:block;}

-.defaultSkin .mceToolbar {height:26px}

-.defaultSkin .mceLeft {text-align:left}

-.defaultSkin .mceRight {text-align:right}

-

-/* External */

-.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}

-.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}

-.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}

-

-/* Layout */

-.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}

-.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}

-.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}

-.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}

-.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top}

-.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}

-.defaultSkin .mceStatusbar {background:#F0F0EE; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}

-.defaultSkin .mceStatusbar div {float:left; margin:2px}

-.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}

-.defaultSkin .mceStatusbar a:hover {text-decoration:underline}

-.defaultSkin table.mceToolbar {margin-left:3px}

-.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}

-.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

-.defaultSkin td.mceCenter {text-align:center;}

-.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}

-.defaultSkin td.mceRight table {margin:0 0 0 auto;}

-

-/* Button */

-.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px}

-.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}

-.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}

-.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-.defaultSkin .mceButtonLabeled {width:auto}

-.defaultSkin .mceButtonLabeled span.mceIcon {float:left}

-.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}

-.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888}

-

-/* Separator */

-.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}

-

-/* ListBox */

-.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}

-.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}

-.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}

-.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}

-.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}

-.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}

-.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}

-.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}

-.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}

-.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}

-

-/* SplitButton */

-.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}

-.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}

-.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}

-.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);}

-.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}

-.defaultSkin .mceSplitButton span.mceOpen {display:none}

-.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}

-.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;}

-.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}

-.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}

-

-/* ColorSplitButton */

-.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}

-.defaultSkin .mceColorSplitMenu td {padding:2px}

-.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}

-.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}

-.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}

-.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}

-.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}

-.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}

-.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}

-

-/* Menu */

-.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}

-.defaultSkin .mceNoIcons span.mceIcon {width:0;}

-.defaultSkin .mceNoIcons a .mceText {padding-left:10px}

-.defaultSkin .mceMenu table {background:#FFF}

-.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}

-.defaultSkin .mceMenu td {height:20px}

-.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}

-.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}

-.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}

-.defaultSkin .mceMenu pre.mceText {font-family:Monospace}

-.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}

-.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}

-.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}

-.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}

-.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}

-.defaultSkin .mceMenuItemDisabled .mceText {color:#888}

-.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}

-.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}

-.defaultSkin .mceMenu span.mceMenuLine {display:none}

-.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}

-.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal}

-

-/* Progress,Resize */

-.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}

-.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}

-

-/* Formats */

-.defaultSkin .mce_formatPreview a {font-size:10px}

-.defaultSkin .mce_p span.mceText {}

-.defaultSkin .mce_address span.mceText {font-style:italic}

-.defaultSkin .mce_pre span.mceText {font-family:monospace}

-.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}

-.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}

-.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}

-.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}

-.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}

-.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}

-

-/* Theme */

-.defaultSkin span.mce_bold {background-position:0 0}

-.defaultSkin span.mce_italic {background-position:-60px 0}

-.defaultSkin span.mce_underline {background-position:-140px 0}

-.defaultSkin span.mce_strikethrough {background-position:-120px 0}

-.defaultSkin span.mce_undo {background-position:-160px 0}

-.defaultSkin span.mce_redo {background-position:-100px 0}

-.defaultSkin span.mce_cleanup {background-position:-40px 0}

-.defaultSkin span.mce_bullist {background-position:-20px 0}

-.defaultSkin span.mce_numlist {background-position:-80px 0}

-.defaultSkin span.mce_justifyleft {background-position:-460px 0}

-.defaultSkin span.mce_justifyright {background-position:-480px 0}

-.defaultSkin span.mce_justifycenter {background-position:-420px 0}

-.defaultSkin span.mce_justifyfull {background-position:-440px 0}

-.defaultSkin span.mce_anchor {background-position:-200px 0}

-.defaultSkin span.mce_indent {background-position:-400px 0}

-.defaultSkin span.mce_outdent {background-position:-540px 0}

-.defaultSkin span.mce_link {background-position:-500px 0}

-.defaultSkin span.mce_unlink {background-position:-640px 0}

-.defaultSkin span.mce_sub {background-position:-600px 0}

-.defaultSkin span.mce_sup {background-position:-620px 0}

-.defaultSkin span.mce_removeformat {background-position:-580px 0}

-.defaultSkin span.mce_newdocument {background-position:-520px 0}

-.defaultSkin span.mce_image {background-position:-380px 0}

-.defaultSkin span.mce_help {background-position:-340px 0}

-.defaultSkin span.mce_code {background-position:-260px 0}

-.defaultSkin span.mce_hr {background-position:-360px 0}

-.defaultSkin span.mce_visualaid {background-position:-660px 0}

-.defaultSkin span.mce_charmap {background-position:-240px 0}

-.defaultSkin span.mce_paste {background-position:-560px 0}

-.defaultSkin span.mce_copy {background-position:-700px 0}

-.defaultSkin span.mce_cut {background-position:-680px 0}

-.defaultSkin span.mce_blockquote {background-position:-220px 0}

-.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}

-.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}

-.defaultSkin span.mce_forecolorpicker {background-position:-720px 0}

-.defaultSkin span.mce_backcolorpicker {background-position:-760px 0}

-

-/* Plugins */

-.defaultSkin span.mce_advhr {background-position:-0px -20px}

-.defaultSkin span.mce_ltr {background-position:-20px -20px}

-.defaultSkin span.mce_rtl {background-position:-40px -20px}

-.defaultSkin span.mce_emotions {background-position:-60px -20px}

-.defaultSkin span.mce_fullpage {background-position:-80px -20px}

-.defaultSkin span.mce_fullscreen {background-position:-100px -20px}

-.defaultSkin span.mce_iespell {background-position:-120px -20px}

-.defaultSkin span.mce_insertdate {background-position:-140px -20px}

-.defaultSkin span.mce_inserttime {background-position:-160px -20px}

-.defaultSkin span.mce_absolute {background-position:-180px -20px}

-.defaultSkin span.mce_backward {background-position:-200px -20px}

-.defaultSkin span.mce_forward {background-position:-220px -20px}

-.defaultSkin span.mce_insert_layer {background-position:-240px -20px}

-.defaultSkin span.mce_insertlayer {background-position:-260px -20px}

-.defaultSkin span.mce_movebackward {background-position:-280px -20px}

-.defaultSkin span.mce_moveforward {background-position:-300px -20px}

-.defaultSkin span.mce_media {background-position:-320px -20px}

-.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}

-.defaultSkin span.mce_pastetext {background-position:-360px -20px}

-.defaultSkin span.mce_pasteword {background-position:-380px -20px}

-.defaultSkin span.mce_selectall {background-position:-400px -20px}

-.defaultSkin span.mce_preview {background-position:-420px -20px}

-.defaultSkin span.mce_print {background-position:-440px -20px}

-.defaultSkin span.mce_cancel {background-position:-460px -20px}

-.defaultSkin span.mce_save {background-position:-480px -20px}

-.defaultSkin span.mce_replace {background-position:-500px -20px}

-.defaultSkin span.mce_search {background-position:-520px -20px}

-.defaultSkin span.mce_styleprops {background-position:-560px -20px}

-.defaultSkin span.mce_table {background-position:-580px -20px}

-.defaultSkin span.mce_cell_props {background-position:-600px -20px}

-.defaultSkin span.mce_delete_table {background-position:-620px -20px}

-.defaultSkin span.mce_delete_col {background-position:-640px -20px}

-.defaultSkin span.mce_delete_row {background-position:-660px -20px}

-.defaultSkin span.mce_col_after {background-position:-680px -20px}

-.defaultSkin span.mce_col_before {background-position:-700px -20px}

-.defaultSkin span.mce_row_after {background-position:-720px -20px}

-.defaultSkin span.mce_row_before {background-position:-740px -20px}

-.defaultSkin span.mce_merge_cells {background-position:-760px -20px}

-.defaultSkin span.mce_table_props {background-position:-980px -20px}

-.defaultSkin span.mce_row_props {background-position:-780px -20px}

-.defaultSkin span.mce_split_cells {background-position:-800px -20px}

-.defaultSkin span.mce_template {background-position:-820px -20px}

-.defaultSkin span.mce_visualchars {background-position:-840px -20px}

-.defaultSkin span.mce_abbr {background-position:-860px -20px}

-.defaultSkin span.mce_acronym {background-position:-880px -20px}

-.defaultSkin span.mce_attribs {background-position:-900px -20px}

-.defaultSkin span.mce_cite {background-position:-920px -20px}

-.defaultSkin span.mce_del {background-position:-940px -20px}

-.defaultSkin span.mce_ins {background-position:-960px -20px}

-.defaultSkin span.mce_pagebreak {background-position:0 -40px}

-.defaultSkin span.mce_restoredraft {background-position:-20px -40px}

-.defaultSkin span.mce_spellchecker {background-position:-540px -20px}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css
+++ /dev/null
@@ -1,25 +1,1 @@
-body, td, pre { margin:8px;}

-body.mceForceColors {background:#FFF; color:#000;}

-h1 {font-size: 2em}

-h2 {font-size: 1.5em}

-h3 {font-size: 1.17em}

-h4 {font-size: 1em}

-h5 {font-size: .83em}

-h6 {font-size: .75em}

-.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}

-a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(../default/img/items.gif) no-repeat 0 0;}

-span.mceItemNbsp {background: #DDD}

-td.mceSelected, th.mceSelected {background-color:#3399ff !important}

-img {border:0;}

-table, img, hr, .mceItemAnchor {cursor:default}

-table td, table th {cursor:text}

-ins {border-bottom:1px solid green; text-decoration: none; color:green}

-del {color:red; text-decoration:line-through}

-cite {border-bottom:1px dashed blue}

-acronym {border-bottom:1px dotted #CCC; cursor:help}

-abbr {border-bottom:1px dashed #CCC; cursor:help}

-

-img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}

-font[face=mceinline] {font-family:inherit !important}

-*[contentEditable]:focus {outline:0}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
+++ /dev/null
@@ -1,106 +1,1 @@
-/* Generic */

-body {

-font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;

-background:#F0F0EE;
-color: black;

-padding:0;

-margin:8px 8px 0 8px;

-}

-

-html {background:#F0F0EE; color:#000;}

-td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

-textarea {resize:none;outline:none;}

-a:link, a:visited {color:black;background-color:transparent;}

-a:hover {color:#2B6FB6;background-color:transparent;}

-.nowrap {white-space: nowrap}

-

-/* Forms */

-fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}

-legend {color:#2B6FB6; font-weight:bold;}

-label.msg {display:none;}

-label.invalid {color:#EE0000; display:inline;background-color:transparent;}

-input.invalid {border:1px solid #EE0000;background-color:transparent;}

-input {background:#FFF; border:1px solid #CCC;color:black;}

-input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

-input, select, textarea {border:1px solid #808080;}

-input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}

-input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}

-.input_noborder {border:0;}

-

-/* Buttons */

-#insert, #cancel, input.button, .updateButton {

-font-weight:bold;

-width:94px; height:23px;

-cursor:pointer;

-padding-bottom:2px;

-float:left;

-}

-

-#cancel {float:right}

-

-/* Browse */

-a.pickcolor, a.browse {text-decoration:none}

-a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}

-.mceOldBoxModel a.browse span {width:22px; height:20px;}

-a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}

-a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}

-a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}

-.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

-a.pickcolor:hover span {background-color:#B2BBD0;}

-a.pickcolor:hover span.disabled {}

-

-/* Charmap */

-table.charmap {border:1px solid #AAA; text-align:center}

-td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}

-#charmap a {display:block; color:#000; text-decoration:none; border:0}

-#charmap a:hover {background:#CCC;color:#2B6FB6}

-#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}

-#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}

-

-/* Source */

-.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}

-.mceActionPanel {margin-top:5px;}

-

-/* Tabs classes */

-.tabs {width:100%; height:18px; line-height:normal;}

-.tabs ul {margin:0; padding:0; list-style:none;}

-.tabs li {float:left; border: 1px solid black; border-bottom:0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block; cursor:pointer;}

-.tabs li.current {font-weight: bold; margin-right:2px;}

-.tabs span {float:left; display:block; padding:0px 10px 0 0;}

-.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}

-.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}

-

-/* Panels */

-.panel_wrapper div.panel {display:none;}

-.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}

-.panel_wrapper {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;}

-

-/* Columns */

-.column {float:left;}

-.properties {width:100%;}

-.properties .column1 {}

-.properties .column2 {text-align:left;}

-

-/* Titles */

-h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}

-h3 {font-size:14px;}

-.title {font-size:12px; font-weight:bold; color:#2B6FB6;}

-

-/* Dialog specific */

-#link .panel_wrapper, #link div.current {height:125px;}

-#image .panel_wrapper, #image div.current {height:200px;}

-#plugintable thead {font-weight:bold; background:#DDD;}

-#plugintable, #about #plugintable td {border:1px solid #919B9C;}

-#plugintable {width:96%; margin-top:10px;}

-#pluginscontainer {height:290px; overflow:auto;}

-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}

-#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}

-#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}

-#colorpicker #light div {overflow:hidden;}

-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}

-#colorpicker .panel_wrapper div.current {height:175px;}

-#colorpicker #namedcolors {width:150px;}

-#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}

-#colorpicker #colornamecontainer {margin-top:5px;}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
+++ /dev/null
@@ -1,103 +1,1 @@
-/* Reset */

-.highcontrastSkin table, .highcontrastSkin tbody, .highcontrastSkin a, .highcontrastSkin img, .highcontrastSkin tr, .highcontrastSkin div, .highcontrastSkin td, .highcontrastSkin iframe, .highcontrastSkin span, .highcontrastSkin *, .highcontrastSkin .mceText {border:0; margin:0; padding:0; vertical-align:baseline; border-collapse:separate;}

-.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;}

-.highcontrastSkin table td {vertical-align:middle}

-

-.highcontrastSkin .mceIconOnly {display: block !important;}

-

-/* External */

-.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;}

-.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}

-.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;}

-

-/* Layout */

-.highcontrastSkin table.mceLayout {border: 1px solid;}

-.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid}

-.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline}

-.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;}

-.highcontrastSkin .mceStatusbar div {float:left}

-.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0}

-

-.highcontrastSkin .mceToolbar td { display: inline-block; float: left;}

-.highcontrastSkin .mceToolbar tr { display: block;}

-.highcontrastSkin .mceToolbar table { display: block; }

-

-/* Button */

-

-.highcontrastSkin .mceButton { display:block; margin: 2px; padding: 5px 10px;border: 1px solid; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -ms-border-radius: 3px; height: 2em;}

-.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em}

-.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}

-.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;}

-

-/* Separator */

-.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;}

-

-/* ListBox */

-.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;}

-.highcontrastSkin .mceListBox .mceText {padding: 5px 6px;  line-height: 2em; width: 15ex; overflow: hidden;}

-.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}

-.highcontrastSkin .mceListBox a.mceText { padding: 5px 10px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;}

-.highcontrastSkin .mceListBox a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;}

-.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;}

-.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;}

-

-.highcontrastSkin .mceListBoxMenu {overflow-y:auto}

-

-/* SplitButton */

-.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-

-.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;}

-.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;}

-.highcontrastSkin .mceSplitButton tr { display: table-row; }

-.highcontrastSkin table.mceSplitButton  { display: table; }

-.highcontrastSkin .mceSplitButton a.mceAction { padding: 5px 10px; display: block; height: 2em; line-height: 2em; overflow: hidden; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;}

-.highcontrastSkin .mceSplitButton a.mceOpen { padding: 5px 4px;  display: block; height: 2em; line-height: 2em; border: 1px solid; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;}

-.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; } 

-.highcontrastSkin .mceSplitButton:focus a.mceAction, .highcontrastSkin .mceSplitButton:active a.mceAction { border-width: 5px; border-right-width: 1px; padding: 1px 10px 1px 6px;-webkit-focus-ring-color:none;outline:none;}

-.highcontrastSkin .mceSplitButton:focus a.mceOpen, .highcontrastSkin .mceSplitButton:active a.mceOpen { border-width: 5px; border-left-width: 1px; padding: 1px 0px 1px 4px;-webkit-focus-ring-color:none;outline:none;}

-

-/* Menu */

-.highcontrastSkin .mceNoIcons span.mceIcon {width:0;}

-.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; }

-.highcontrastSkin .mceMenu table {background:white; color: black}

-.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px}

-.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black}

-.highcontrastSkin .mceMenu td {height:2em}

-.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;}

-.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;}

-.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace}

-.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;}

-.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px}

-.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid}

-.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px}

-.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";}

-.highcontrastSkin .mceMenu span.mceMenuLine {display:none}

-.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"}

-.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal}

-

-/* ColorSplitButton */

-.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000}

-.highcontrastSkin .mceColorSplitMenu td {padding:2px}

-.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;}

-.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}

-.highcontrastSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}

-.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2}

-.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;}

-.highcontrastSkin .mceColorPreview {display:none;}

-.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden}

-

-/* Progress,Resize */

-.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}

-.highcontrastSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}

-

-/* Formats */

-.highcontrastSkin .mce_p span.mceText {}

-.highcontrastSkin .mce_address span.mceText {font-style:italic}

-.highcontrastSkin .mce_pre span.mceText {font-family:monospace}

-.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}

-.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}

-.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}

-.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}

-.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}

-.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css
+++ /dev/null
@@ -1,49 +1,1 @@
-body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}

-body {background:#FFF;}

-body.mceForceColors {background:#FFF; color:#000;}

-h1 {font-size: 2em}

-h2 {font-size: 1.5em}

-h3 {font-size: 1.17em}

-h4 {font-size: 1em}

-h5 {font-size: .83em}

-h6 {font-size: .75em}

-.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}

-a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(../default/img/items.gif) no-repeat 0 0;}

-span.mceItemNbsp {background: #DDD}

-td.mceSelected, th.mceSelected {background-color:#3399ff !important}

-img {border:0;}

-table, img, hr, .mceItemAnchor {cursor:default}

-table td, table th {cursor:text}

-ins {border-bottom:1px solid green; text-decoration: none; color:green}

-del {color:red; text-decoration:line-through}

-cite {border-bottom:1px dashed blue}

-acronym {border-bottom:1px dotted #CCC; cursor:help}

-abbr {border-bottom:1px dashed #CCC; cursor:help}

-

-/* IE */

-* html body {

-scrollbar-3dlight-color:#F0F0EE;

-scrollbar-arrow-color:#676662;

-scrollbar-base-color:#F0F0EE;

-scrollbar-darkshadow-color:#DDD;

-scrollbar-face-color:#E0E0DD;

-scrollbar-highlight-color:#F0F0EE;

-scrollbar-shadow-color:#F0F0EE;

-scrollbar-track-color:#F5F5F5;

-}

-

-img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}

-font[face=mceinline] {font-family:inherit !important}

-*[contentEditable]:focus {outline:0}

-

-.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}

-.mceItemShockWave {background-image:url(../../img/shockwave.gif)}

-.mceItemFlash {background-image:url(../../img/flash.gif)}

-.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}

-.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}

-.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}

-.mceItemVideo {background-image:url(../../img/video.gif)}

-.mceItemAudio {background-image:url(../../img/video.gif)}

-.mceItemIframe {background-image:url(../../img/iframe.gif)}

-.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
+++ /dev/null
@@ -1,118 +1,1 @@
-/* Generic */

-body {

-font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;

-scrollbar-3dlight-color:#F0F0EE;

-scrollbar-arrow-color:#676662;

-scrollbar-base-color:#F0F0EE;

-scrollbar-darkshadow-color:#DDDDDD;

-scrollbar-face-color:#E0E0DD;

-scrollbar-highlight-color:#F0F0EE;

-scrollbar-shadow-color:#F0F0EE;

-scrollbar-track-color:#F5F5F5;

-background:#F0F0EE;

-padding:0;

-margin:8px 8px 0 8px;

-}

-

-html {background:#F0F0EE;}

-td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

-textarea {resize:none;outline:none;}

-a:link, a:visited {color:black;}

-a:hover {color:#2B6FB6;}

-.nowrap {white-space: nowrap}

-

-/* Forms */

-fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}

-legend {color:#2B6FB6; font-weight:bold;}

-label.msg {display:none;}

-label.invalid {color:#EE0000; display:inline;}

-input.invalid {border:1px solid #EE0000;}

-input {background:#FFF; border:1px solid #CCC;}

-input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

-input, select, textarea {border:1px solid #808080;}

-input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}

-input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}

-.input_noborder {border:0;}

-

-/* Buttons */

-#insert, #cancel, input.button, .updateButton {

-border:0; margin:0; padding:0;

-font-weight:bold;

-width:94px; height:26px;

-background:url(../default/img/buttons.png) 0 -26px;

-cursor:pointer;

-padding-bottom:2px;

-float:left;

-}

-

-#insert {background:url(../default/img/buttons.png) 0 -52px}

-#cancel {background:url(../default/img/buttons.png) 0 0; float:right}

-

-/* Browse */

-a.pickcolor, a.browse {text-decoration:none}

-a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}

-.mceOldBoxModel a.browse span {width:22px; height:20px;}

-a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}

-a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}

-a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}

-.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

-a.pickcolor:hover span {background-color:#B2BBD0;}

-a.pickcolor:hover span.disabled {}

-

-/* Charmap */

-table.charmap {border:1px solid #AAA; text-align:center}

-td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}

-#charmap a {display:block; color:#000; text-decoration:none; border:0}

-#charmap a:hover {background:#CCC;color:#2B6FB6}

-#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}

-#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}

-

-/* Source */

-.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}

-.mceActionPanel {margin-top:5px;}

-

-/* Tabs classes */

-.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}

-.tabs ul {margin:0; padding:0; list-style:none;}

-.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}

-.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}

-.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}

-.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}

-.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}

-.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}

-

-/* Panels */

-.panel_wrapper div.panel {display:none;}

-.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}

-.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}

-

-/* Columns */

-.column {float:left;}

-.properties {width:100%;}

-.properties .column1 {}

-.properties .column2 {text-align:left;}

-

-/* Titles */

-h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}

-h3 {font-size:14px;}

-.title {font-size:12px; font-weight:bold; color:#2B6FB6;}

-

-/* Dialog specific */

-#link .panel_wrapper, #link div.current {height:125px;}

-#image .panel_wrapper, #image div.current {height:200px;}

-#plugintable thead {font-weight:bold; background:#DDD;}

-#plugintable, #about #plugintable td {border:1px solid #919B9C;}

-#plugintable {width:96%; margin-top:10px;}

-#pluginscontainer {height:290px; overflow:auto;}

-#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}

-#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}

-#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}

-#colorpicker #light div {overflow:hidden;}

-#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}

-#colorpicker .panel_wrapper div.current {height:175px;}

-#colorpicker #namedcolors {width:150px;}

-#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}

-#colorpicker #colornamecontainer {margin-top:5px;}

-#colorpicker #picker_panel fieldset {margin:auto;width:325px;}

 

 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png and /dev/null differ
 Binary files a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
+++ /dev/null
@@ -1,218 +1,1 @@
-/* Reset */

-.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}

-.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}

-.o2k7Skin table td {vertical-align:middle}

-

-/* Containers */

-.o2k7Skin table {background:transparent}

-.o2k7Skin iframe {display:block;}

-.o2k7Skin .mceToolbar {height:26px}

-

-/* External */

-.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}

-.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}

-.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}

-

-/* Layout */

-.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}

-.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}

-.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}

-.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}

-.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}

-.o2k7Skin td.mceToolbar{background:#E5EFFD}

-.o2k7Skin .mceStatusbar {background:#E5EFFD; display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}

-.o2k7Skin .mceStatusbar div {float:left; padding:2px}

-.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}

-.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}

-.o2k7Skin table.mceToolbar {margin-left:3px}

-.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}

-.o2k7Skin .mceToolbar td.mceFirst span {margin:0}

-.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}

-.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}

-.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}

-.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

-.o2k7Skin td.mceCenter {text-align:center;}

-.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}

-.o2k7Skin td.mceRight table {margin:0 0 0 auto;}

-

-/* Button */

-.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}

-.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}

-.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}

-.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}

-.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}

-.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-.o2k7Skin .mceButtonLabeled {width:auto}

-.o2k7Skin .mceButtonLabeled span.mceIcon {float:left}

-.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}

-.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888}

-

-/* Separator */

-.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}

-

-/* ListBox */

-.o2k7Skin .mceListBox  {padding-left: 3px}

-.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}

-.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}

-.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}

-.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}

-.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}

-.o2k7Skin .mceListBoxDisabled .mceText {color:gray}

-.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden; margin-left:3px}

-.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}

-.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}

-

-/* SplitButton */

-.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px; direction:ltr}

-.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}

-.o2k7Skin .mceSplitButton a.mceAction {width:22px}

-.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)}

-.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}

-.o2k7Skin .mceSplitButton span.mceOpen {display:none}

-.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}

-.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px}

-.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}

-

-/* ColorSplitButton */

-.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}

-.o2k7Skin .mceColorSplitMenu td {padding:2px}

-.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}

-.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}

-.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}

-.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}

-.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}

-.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden}

-.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden}

-

-/* Menu */

-.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}

-.o2k7Skin .mceNoIcons span.mceIcon {width:0;}

-.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}

-.o2k7Skin .mceMenu table {background:#FFF}

-.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}

-.o2k7Skin .mceMenu td {height:20px}

-.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}

-.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}

-.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}

-.o2k7Skin .mceMenu pre.mceText {font-family:Monospace}

-.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}

-.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}

-.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}

-.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}

-.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}

-.o2k7Skin .mceMenuItemDisabled .mceText {color:#888}

-.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}

-.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}

-.o2k7Skin .mceMenu span.mceMenuLine {display:none}

-.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}

-.o2k7Skin .mceMenuItem td, .o2k7Skin .mceMenuItem th {line-height: normal}

-

-/* Progress,Resize */

-.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}

-.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}

-

-/* Formats */

-.o2k7Skin .mce_formatPreview a {font-size:10px}

-.o2k7Skin .mce_p span.mceText {}

-.o2k7Skin .mce_address span.mceText {font-style:italic}

-.o2k7Skin .mce_pre span.mceText {font-family:monospace}

-.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}

-.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}

-.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}

-.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}

-.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}

-.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}

-

-/* Theme */

-.o2k7Skin span.mce_bold {background-position:0 0}

-.o2k7Skin span.mce_italic {background-position:-60px 0}

-.o2k7Skin span.mce_underline {background-position:-140px 0}

-.o2k7Skin span.mce_strikethrough {background-position:-120px 0}

-.o2k7Skin span.mce_undo {background-position:-160px 0}

-.o2k7Skin span.mce_redo {background-position:-100px 0}

-.o2k7Skin span.mce_cleanup {background-position:-40px 0}

-.o2k7Skin span.mce_bullist {background-position:-20px 0}

-.o2k7Skin span.mce_numlist {background-position:-80px 0}

-.o2k7Skin span.mce_justifyleft {background-position:-460px 0}

-.o2k7Skin span.mce_justifyright {background-position:-480px 0}

-.o2k7Skin span.mce_justifycenter {background-position:-420px 0}

-.o2k7Skin span.mce_justifyfull {background-position:-440px 0}

-.o2k7Skin span.mce_anchor {background-position:-200px 0}

-.o2k7Skin span.mce_indent {background-position:-400px 0}

-.o2k7Skin span.mce_outdent {background-position:-540px 0}

-.o2k7Skin span.mce_link {background-position:-500px 0}

-.o2k7Skin span.mce_unlink {background-position:-640px 0}

-.o2k7Skin span.mce_sub {background-position:-600px 0}

-.o2k7Skin span.mce_sup {background-position:-620px 0}

-.o2k7Skin span.mce_removeformat {background-position:-580px 0}

-.o2k7Skin span.mce_newdocument {background-position:-520px 0}

-.o2k7Skin span.mce_image {background-position:-380px 0}

-.o2k7Skin span.mce_help {background-position:-340px 0}

-.o2k7Skin span.mce_code {background-position:-260px 0}

-.o2k7Skin span.mce_hr {background-position:-360px 0}

-.o2k7Skin span.mce_visualaid {background-position:-660px 0}

-.o2k7Skin span.mce_charmap {background-position:-240px 0}

-.o2k7Skin span.mce_paste {background-position:-560px 0}

-.o2k7Skin span.mce_copy {background-position:-700px 0}

-.o2k7Skin span.mce_cut {background-position:-680px 0}

-.o2k7Skin span.mce_blockquote {background-position:-220px 0}

-.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}

-.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}

-.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0}

-.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0}

-

-/* Plugins */

-.o2k7Skin span.mce_advhr {background-position:-0px -20px}

-.o2k7Skin span.mce_ltr {background-position:-20px -20px}

-.o2k7Skin span.mce_rtl {background-position:-40px -20px}

-.o2k7Skin span.mce_emotions {background-position:-60px -20px}

-.o2k7Skin span.mce_fullpage {background-position:-80px -20px}

-.o2k7Skin span.mce_fullscreen {background-position:-100px -20px}

-.o2k7Skin span.mce_iespell {background-position:-120px -20px}

-.o2k7Skin span.mce_insertdate {background-position:-140px -20px}

-.o2k7Skin span.mce_inserttime {background-position:-160px -20px}

-.o2k7Skin span.mce_absolute {background-position:-180px -20px}

-.o2k7Skin span.mce_backward {background-position:-200px -20px}

-.o2k7Skin span.mce_forward {background-position:-220px -20px}

-.o2k7Skin span.mce_insert_layer {background-position:-240px -20px}

-.o2k7Skin span.mce_insertlayer {background-position:-260px -20px}

-.o2k7Skin span.mce_movebackward {background-position:-280px -20px}

-.o2k7Skin span.mce_moveforward {background-position:-300px -20px}

-.o2k7Skin span.mce_media {background-position:-320px -20px}

-.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}

-.o2k7Skin span.mce_pastetext {background-position:-360px -20px}

-.o2k7Skin span.mce_pasteword {background-position:-380px -20px}

-.o2k7Skin span.mce_selectall {background-position:-400px -20px}

-.o2k7Skin span.mce_preview {background-position:-420px -20px}

-.o2k7Skin span.mce_print {background-position:-440px -20px}

-.o2k7Skin span.mce_cancel {background-position:-460px -20px}

-.o2k7Skin span.mce_save {background-position:-480px -20px}

-.o2k7Skin span.mce_replace {background-position:-500px -20px}

-.o2k7Skin span.mce_search {background-position:-520px -20px}

-.o2k7Skin span.mce_styleprops {background-position:-560px -20px}

-.o2k7Skin span.mce_table {background-position:-580px -20px}

-.o2k7Skin span.mce_cell_props {background-position:-600px -20px}

-.o2k7Skin span.mce_delete_table {background-position:-620px -20px}

-.o2k7Skin span.mce_delete_col {background-position:-640px -20px}

-.o2k7Skin span.mce_delete_row {background-position:-660px -20px}

-.o2k7Skin span.mce_col_after {background-position:-680px -20px}

-.o2k7Skin span.mce_col_before {background-position:-700px -20px}

-.o2k7Skin span.mce_row_after {background-position:-720px -20px}

-.o2k7Skin span.mce_row_before {background-position:-740px -20px}

-.o2k7Skin span.mce_merge_cells {background-position:-760px -20px}

-.o2k7Skin span.mce_table_props {background-position:-980px -20px}

-.o2k7Skin span.mce_row_props {background-position:-780px -20px}

-.o2k7Skin span.mce_split_cells {background-position:-800px -20px}

-.o2k7Skin span.mce_template {background-position:-820px -20px}

-.o2k7Skin span.mce_visualchars {background-position:-840px -20px}

-.o2k7Skin span.mce_abbr {background-position:-860px -20px}

-.o2k7Skin span.mce_acronym {background-position:-880px -20px}

-.o2k7Skin span.mce_attribs {background-position:-900px -20px}

-.o2k7Skin span.mce_cite {background-position:-920px -20px}

-.o2k7Skin span.mce_del {background-position:-940px -20px}

-.o2k7Skin span.mce_ins {background-position:-960px -20px}

-.o2k7Skin span.mce_pagebreak {background-position:0 -40px}

-.o2k7Skin span.mce_restoredraft {background-position:-20px -40px}

-.o2k7Skin span.mce_spellchecker {background-position:-540px -20px}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
+++ /dev/null
@@ -1,8 +1,1 @@
-/* Black */

-.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)}

-.o2k7SkinBlack td.mceToolbar, .o2k7SkinBlack td.mceStatusbar, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}

-.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}

-.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}

-.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;}

-.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}

-.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1}
+

--- a/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
+++ /dev/null
@@ -1,6 +1,1 @@
-/* Silver */

-.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)}

-.o2k7SkinSilver td.mceToolbar, .o2k7SkinSilver td.mceStatusbar, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}

-.o2k7SkinSilver .mceListBox .mceText {background:#FFF}

-.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb}

 

--- a/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm
+++ /dev/null
@@ -1,26 +1,1 @@
-<html xmlns="http://www.w3.org/1999/xhtml">

-<head>

-	<title>{#advanced_dlg.code_title}</title>

-	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

-	<script type="text/javascript" src="js/source_editor.js"></script>

-</head>

-<body onresize="resizeInputs();" style="display:none; overflow:hidden;">

-	<form name="source" onsubmit="saveContent();return false;" action="#">

-		<div style="float: left" class="title"><label for="htmlSource">{#advanced_dlg.code_title}</label></div>

-

-		<div id="wrapline" style="float: right">

-			<input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>

-		</div>

-

-		<br style="clear: both" />

-

-		<textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>

-

-		<div class="mceActionPanel">

-			<input type="submit" role="button" name="insert" value="{#update}" id="insert" />

-			<input type="button" role="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />

-		</div>

-	</form>

-</body>

-</html>

 

--- a/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.contentCSS.push(d+"/skins/"+f.skin+"/content.css");c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})})});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})();
+

--- a/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js
+++ /dev/null
@@ -1,84 +1,1 @@
-/**

- * editor_template_src.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-(function() {

-	var DOM = tinymce.DOM;

-

-	// Tell it to load theme specific language pack(s)

-	tinymce.ThemeManager.requireLangPack('simple');

-

-	tinymce.create('tinymce.themes.SimpleTheme', {

-		init : function(ed, url) {

-			var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;

-

-			t.editor = ed;

-			ed.contentCSS.push(url + "/skins/" + s.skin + "/content.css");

-

-			ed.onInit.add(function() {

-				ed.onNodeChange.add(function(ed, cm) {

-					tinymce.each(states, function(c) {

-						cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));

-					});

-				});

-			});

-

-			DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");

-		},

-

-		renderUI : function(o) {

-			var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;

-

-			n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);

-			n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});

-			n = tb = DOM.add(n, 'tbody');

-

-			// Create iframe container

-			n = DOM.add(tb, 'tr');

-			n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});

-

-			// Create toolbar container

-			n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});

-

-			// Create toolbar

-			tb = t.toolbar = cf.createToolbar("tools1");

-			tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));

-			tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));

-			tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));

-			tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));

-			tb.add(cf.createSeparator());

-			tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));

-			tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));

-			tb.add(cf.createSeparator());

-			tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));

-			tb.add(cf.createSeparator());

-			tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));

-			tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));

-			tb.renderTo(n);

-

-			return {

-				iframeContainer : ic,

-				editorContainer : ed.id + '_container',

-				sizeContainer : sc,

-				deltaHeight : -20

-			};

-		},

-

-		getInfo : function() {

-			return {

-				longname : 'Simple theme',

-				author : 'Moxiecode Systems AB',

-				authorurl : 'http://tinymce.moxiecode.com',

-				version : tinymce.majorVersion + "." + tinymce.minorVersion

-			}

-		}

-	});

-

-	tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme);

-})();
+

 Binary files a/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js
+++ /dev/null
@@ -1,1 +1,1 @@
-tinyMCE.addI18n('en.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"});
+

--- a/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css
+++ /dev/null
@@ -1,26 +1,1 @@
-body, td, pre {

-	font-family: Verdana, Arial, Helvetica, sans-serif;

-	font-size: 10px;

-}

-

-body {

-	background-color: #FFFFFF;

-}

-

-.mceVisualAid {

-	border: 1px dashed #BBBBBB;

-}

-

-/* MSIE specific */

-

-* html body {

-	scrollbar-3dlight-color: #F0F0EE;

-	scrollbar-arrow-color: #676662;

-	scrollbar-base-color: #F0F0EE;

-	scrollbar-darkshadow-color: #DDDDDD;

-	scrollbar-face-color: #E0E0DD;

-	scrollbar-highlight-color: #F0F0EE;

-	scrollbar-shadow-color: #F0F0EE;

-	scrollbar-track-color: #F5F5F5;	

-}

 

--- a/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css
+++ /dev/null
@@ -1,33 +1,1 @@
-/* Reset */

-.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}

-

-/* Containers */

-.defaultSimpleSkin {position:relative}

-.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}

-.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}

-.defaultSimpleSkin .mceToolbar {height:24px;}

-

-/* Layout */

-.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}

-.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

-

-/* Button */

-.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}

-.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}

-.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}

-.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-

-/* Separator */

-.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}

-

-/* Theme */

-.defaultSimpleSkin span.mce_bold {background-position:0 0}

-.defaultSimpleSkin span.mce_italic {background-position:-60px 0}

-.defaultSimpleSkin span.mce_underline {background-position:-140px 0}

-.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}

-.defaultSimpleSkin span.mce_undo {background-position:-160px 0}

-.defaultSimpleSkin span.mce_redo {background-position:-100px 0}

-.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}

-.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}

-.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}

 

--- a/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css
+++ /dev/null
@@ -1,18 +1,1 @@
-body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

-

-body {background: #FFF;}

-.mceVisualAid {border: 1px dashed #BBB;}

-

-/* IE */

-

-* html body {

-scrollbar-3dlight-color: #F0F0EE;

-scrollbar-arrow-color: #676662;

-scrollbar-base-color: #F0F0EE;

-scrollbar-darkshadow-color: #DDDDDD;

-scrollbar-face-color: #E0E0DD;

-scrollbar-highlight-color: #F0F0EE;

-scrollbar-shadow-color: #F0F0EE;

-scrollbar-track-color: #F5F5F5;	

-}

 

 Binary files a/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png and /dev/null differ
--- a/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css
+++ /dev/null
@@ -1,36 +1,1 @@
-/* Reset */

-.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}

-

-/* Containers */

-.o2k7SimpleSkin {position:relative}

-.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}

-.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}

-.o2k7SimpleSkin .mceToolbar {height:26px;}

-

-/* Layout */

-.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }

-.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}

-.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}

-.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

-

-/* Button */

-.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}

-.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}

-.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}

-.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}

-.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

-

-/* Separator */

-.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}

-

-/* Theme */

-.o2k7SimpleSkin span.mce_bold {background-position:0 0}

-.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}

-.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}

-.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}

-.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}

-.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}

-.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}

-.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}

-.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}

 

--- a/tinymce/jscripts/tiny_mce/tiny_mce.js
+++ /dev/null
@@ -1,1 +1,1 @@
-(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"4.8",releaseDate:"2012-02-02",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=d.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(d.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){if(r=f[m].href){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==e}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==e){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];b.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];b.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(k,j){var h,g,f=arguments;for(h=1,g=f.length;h<g;h++){j=f[h];b.each(j,function(i,l){if(i!==e){k[l]=i}})}return k},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}b.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}b.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this;j={func:j,scope:i||this};if(!h.unloads){function g(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(d.detachEvent){d.detachEvent("onbeforeunload",k);d.detachEvent("onunload",g)}else{if(d.removeEventListener){d.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(d.CollectGarbage){CollectGarbage()}}}function k(){var l=document;if(l.readyState=="interactive"){function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l){l.attachEvent("onstop",f)}d.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}if(d.attachEvent){d.attachEvent("onunload",g);d.attachEvent("onbeforeunload",k)}else{if(d.addEventListener){d.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;b.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){return f?b.map(f.split(g||","),b.trim):f},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(c){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===e){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};b._init();d.tinymce=d.tinyMCE=b})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d.length>0?d:[g.scope]);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();(function(){function serialize(o,quote){var i,v,t;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&o instanceof Array){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(i in o){if(o.hasOwnProperty(i)){v+=typeof o[i]!="function"?(v.length>1?","+quote:quote)+i+quote+":"+serialize(o[i],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={DELETE:46,BACKSPACE:8,ENTER:13,TAB:9,SPACEBAR:32,UP:38,DOWN:40,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey}}})(tinymce);(function(l){var j=l.VK,k=j.BACKSPACE,h=j.DELETE;function c(n){var p=n.dom,o=n.selection;n.onKeyDown.add(function(r,v){var q,x,t,u,s;s=v.keyCode==h;if((s||v.keyCode==k)&&!j.modifierPressed(v)){v.preventDefault();q=o.getRng();x=p.getParent(q.startContainer,p.isBlock);if(s){x=p.getNext(x,p.isBlock)}if(x){t=x.firstChild;while(t&&t.nodeType==3&&t.nodeValue.length==0){t=t.nextSibling}if(t&&t.nodeName==="SPAN"){u=t.cloneNode(false)}}r.getDoc().execCommand(s?"ForwardDelete":"Delete",false,null);x=p.getParent(q.startContainer,p.isBlock);l.each(p.select("span.Apple-style-span,font.Apple-style-span",x),function(y){var z=o.getBookmark();if(u){p.replace(u.cloneNode(false),y,true)}else{p.remove(y,true)}o.moveToBookmark(z)})}})}function d(n){n.onKeyUp.add(function(o,q){var p=q.keyCode;if(p==h||p==k){if(o.dom.isEmpty(o.getBody())){o.setContent("",{format:"raw"});o.nodeChanged();return}}})}function b(n){n.dom.bind(n.getDoc(),"focusin",function(){n.selection.setRng(n.selection.getRng())})}function e(n){n.onKeyDown.add(function(o,r){if(r.keyCode===k){if(o.selection.isCollapsed()&&o.selection.getRng(true).startOffset===0){var q=o.selection.getNode();var p=q.previousSibling;if(p&&p.nodeName&&p.nodeName.toLowerCase()==="hr"){o.dom.remove(p);l.dom.Event.cancel(r)}}}})}function g(n){if(!Range.prototype.getClientRects){n.onMouseDown.add(function(p,q){if(q.target.nodeName==="HTML"){var o=p.getBody();o.blur();setTimeout(function(){o.focus()},0)}})}}function f(n){n.onClick.add(function(o,p){p=p.target;if(/^(IMG|HR)$/.test(p.nodeName)){o.selection.getSel().setBaseAndExtent(p,0,p,1)}if(p.nodeName=="A"&&o.dom.hasClass(p,"mceItemAnchor")){o.selection.select(p)}o.nodeChanged()})}function i(n){n.onKeyDown.add(function(o,p){function q(r){var s=r.selection.getNode();var t="h1,h2,h3,h4,h5,h6";return r.dom.is(s,t)||r.dom.getParent(s,t)!==null}if(p.keyCode===j.ENTER&&!j.modifierPressed(p)&&q(o)){setTimeout(function(){var r=o.selection.getNode();if(o.dom.is(r,"p")){o.dom.setAttrib(r,"style",null);o.execCommand("mceCleanup")}},0)}})}function m(n){var p,o;n.dom.bind(n.getDoc(),"selectionchange",function(){if(o){clearTimeout(o);o=0}o=window.setTimeout(function(){var q=n.selection.getRng();if(!p||!l.dom.RangeUtils.compareRanges(q,p)){n.nodeChanged();p=q}},50)})}function a(n){document.body.setAttribute("role","application")}l.create("tinymce.util.Quirks",{Quirks:function(n){if(l.isWebKit){c(n);d(n);b(n);f(n);if(l.isIDevice){m(n)}}if(l.isIE){e(n);d(n);a(n);i(n)}if(l.isGecko){e(n);g(n)}}})})(tinymce);(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;"};d={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(r){var y={},p,n,v,q,u=d.url_converter,x=d.url_converter_scope||this;function o(C,F){var E,B,A,D;E=y[C+"-top"+F];if(!E){return}B=y[C+"-right"+F];if(E!=B){return}A=y[C+"-bottom"+F];if(B!=A){return}D=y[C+"-left"+F];if(A!=D){return}y[C+F]=D;delete y[C+"-top"+F];delete y[C+"-right"+F];delete y[C+"-bottom"+F];delete y[C+"-left"+F]}function t(B){var C=y[B],A;if(!C||C.indexOf(" ")<0){return}C=C.split(" ");A=C.length;while(A--){if(C[A]!==C[0]){return false}}y[B]=C[0];return true}function z(C,B,A,D){if(!t(B)){return}if(!t(A)){return}if(!t(D)){return}y[C]=y[B]+" "+y[A]+" "+y[D];delete y[B];delete y[A];delete y[D]}function s(A){q=true;return a[A]}function i(B,A){if(q){B=B.replace(/\uFEFF[0-9]/g,function(C){return a[C]})}if(!A){B=B.replace(/\\([\'\";:])/g,"$1")}return B}if(r){r=r.replace(/\\[\"\';:\uFEFF]/g,s).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(A){return A.replace(/[;:]/g,s)});while(p=b.exec(r)){n=p[1].replace(l,"").toLowerCase();v=p[2].replace(l,"");if(n&&v.length>0){if(n==="font-weight"&&v==="700"){v="bold"}else{if(n==="color"||n==="background-color"){v=v.toLowerCase()}}v=v.replace(k,c);v=v.replace(h,function(B,A,E,D,F,C){F=F||C;if(F){F=i(F);return"'"+F.replace(/\'/g,"\\'")+"'"}A=i(A||E||D);if(u){A=u.call(x,A,"style")}return"url('"+A.replace(/\'/g,"\\'")+"')"});y[n]=q?i(v,true):v}b.lastIndex=p.index+p[0].length}o("border","");o("border","-width");o("border","-color");o("border","-style");o("padding","");o("margin","");z("border","border-width","border-style","border-color");if(y.border==="medium none"){delete y.border}}return y},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(m){var h={},j,l,g,f,c={},b,e,d=m.makeMap,k=m.each;function i(o,n){return o.split(n||",")}function a(r,q){var o,p={};function n(s){return s.replace(/[A-Z]+/g,function(t){return n(r[t])})}for(o in r){if(r.hasOwnProperty(o)){r[o]=n(r[o])}}n(q).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(v,t,s,u){s=i(s,"|");p[t]={attributes:d(s),attributesOrder:s,children:d(u,"|",{"#comment":{}})}});return p}l="h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,noscript,menu,isindex,samp,header,footer,article,section,hgroup";l=d(l,",",d(l.toUpperCase()));h=a({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]");j=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,autoplay,loop,controls");g=d("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source");f=m.extend(d("td,th,iframe,video,audio,object"),g);b=d("pre,script,style,textarea");e=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");m.html.Schema=function(r){var A=this,n={},o={},y=[],q,p;r=r||{};if(r.verify_html===false){r.valid_elements="*[*]"}if(r.valid_styles){q={};k(r.valid_styles,function(C,B){q[B]=m.explode(C)})}p=r.whitespace_elements?d(r.whitespace_elements):b;function z(B){return new RegExp("^"+B.replace(/([?+*])/g,".$1")+"$")}function t(I){var H,D,W,S,X,C,F,R,U,N,V,Z,L,G,T,B,P,E,Y,aa,M,Q,K=/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,O=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,J=/[*?+]/;if(I){I=i(I);if(n["@"]){P=n["@"].attributes;E=n["@"].attributesOrder}for(H=0,D=I.length;H<D;H++){C=K.exec(I[H]);if(C){T=C[1];N=C[2];B=C[3];U=C[4];L={};G=[];F={attributes:L,attributesOrder:G};if(T==="#"){F.paddEmpty=true}if(T==="-"){F.removeEmpty=true}if(P){for(aa in P){L[aa]=P[aa]}G.push.apply(G,E)}if(U){U=i(U,"|");for(W=0,S=U.length;W<S;W++){C=O.exec(U[W]);if(C){R={};Z=C[1];V=C[2].replace(/::/g,":");T=C[3];Q=C[4];if(Z==="!"){F.attributesRequired=F.attributesRequired||[];F.attributesRequired.push(V);R.required=true}if(Z==="-"){delete L[V];G.splice(m.inArray(G,V),1);continue}if(T){if(T==="="){F.attributesDefault=F.attributesDefault||[];F.attributesDefault.push({name:V,value:Q});R.defaultValue=Q}if(T===":"){F.attributesForced=F.attributesForced||[];F.attributesForced.push({name:V,value:Q});R.forcedValue=Q}if(T==="<"){R.validValues=d(Q,"?")}}if(J.test(V)){F.attributePatterns=F.attributePatterns||[];R.pattern=z(V);F.attributePatterns.push(R)}else{if(!L[V]){G.push(V)}L[V]=R}}}}if(!P&&N=="@"){P=L;E=G}if(B){F.outputName=N;n[B]=F}if(J.test(N)){F.pattern=z(N);y.push(F)}else{n[N]=F}}}}}function v(B){n={};y=[];t(B);k(h,function(D,C){o[C]=D.children})}function s(C){var B=/^(~)?(.+)$/;if(C){k(i(C),function(G){var E=B.exec(G),F=E[1]==="~",H=F?"span":"div",D=E[2];o[D]=o[H];c[D]=H;if(!F){l[D]={}}k(o,function(I,J){if(I[H]){I[D]=I[H]}})})}}function u(C){var B=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(C){k(i(C),function(G){var F=B.exec(G),D,E;if(F){E=F[1];if(E){D=o[F[2]]}else{D=o[F[2]]={"#comment":{}}}D=o[F[2]];k(i(F[3],"|"),function(H){if(E==="-"){delete D[H]}else{D[H]={}}})}})}}function x(B){var D=n[B],C;if(D){return D}C=y.length;while(C--){D=y[C];if(D.pattern.test(B)){return D}}}if(!r.valid_elements){k(h,function(C,B){n[B]={attributes:C.attributes,attributesOrder:C.attributesOrder};o[B]=C.children});k(i("strong/b,em/i"),function(B){B=i(B,"/");n[B[1]].outputName=B[0]});n.img.attributesDefault=[{name:"alt",value:""}];k(i("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr"),function(B){n[B].removeEmpty=true});k(i("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(B){n[B].paddEmpty=true})}else{v(r.valid_elements)}s(r.custom_elements);u(r.valid_children);t(r.extended_valid_elements);u("+ol[ul|ol],+ul[ul|ol]");if(!x("span")){t("span[!data-mce-type|*]")}if(r.invalid_elements){m.each(m.explode(r.invalid_elements),function(B){if(n[B]){delete n[B]}})}A.children=o;A.styles=q;A.getBoolAttrs=function(){return j};A.getBlockElements=function(){return l};A.getShortEndedElements=function(){return g};A.getSelfClosingElements=function(){return e};A.getNonEmptyElements=function(){return f};A.getWhiteSpaceElements=function(){return p};A.isValidChild=function(B,D){var C=o[B];return !!(C&&C[D])};A.getElementRule=x;A.getCustomElements=function(){return c};A.addValidElements=t;A.setValidElements=v;A.addCustomElements=s;A.addValidChildren=u};m.html.Schema.boolAttrMap=j;m.html.Schema.blockElementsMap=l})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(D){var n=this,g,F=0,H,A,z=[],M,P,B,q,y,r,L,G,N,u,m,k,s,Q,o,O,E,R,K,f,I,l,C,J,h,v=0,j=a.html.Entities.decode,x,p;function t(S){var U,T;U=z.length;while(U--){if(z[U].name===S){break}}if(U>=0){for(T=z.length-1;T>=U;T--){S=z[T];if(S.valid){n.end(S.name)}}z.length=U}}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/)>))","g");C=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;J={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};L=e.getShortEndedElements();I=e.getSelfClosingElements();G=e.getBoolAttrs();u=c.validate;r=c.remove_internals;x=c.fix_self_closing;p=a.isIE;o=/^:/;while(g=l.exec(D)){if(F<g.index){n.text(j(D.substr(F,g.index-F)))}if(H=g[6]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}t(H)}else{if(H=g[7]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}N=H in L;if(x&&I[H]&&z.length>0&&z[z.length-1].name===H){t(H)}if(!u||(m=e.getElementRule(H))){k=true;if(u){O=m.attributes;E=m.attributePatterns}if(Q=g[8]){y=Q.indexOf("data-mce-type")!==-1;if(y&&r){k=false}M=[];M.map={};Q.replace(C,function(T,S,X,W,V){var Y,U;S=S.toLowerCase();X=S in G?S:j(X||W||V||"");if(u&&!y&&S.indexOf("data-")!==0){Y=O[S];if(!Y&&E){U=E.length;while(U--){Y=E[U];if(Y.pattern.test(S)){break}}if(U===-1){Y=null}}if(!Y){return}if(Y.validValues&&!(X in Y.validValues)){return}}M.map[S]=X;M.push({name:S,value:X})})}else{M=[];M.map={}}if(u&&!y){R=m.attributesRequired;K=m.attributesDefault;f=m.attributesForced;if(f){P=f.length;while(P--){s=f[P];q=s.name;h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}if(K){P=K.length;while(P--){s=K[P];q=s.name;if(!(q in M.map)){h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}}if(R){P=R.length;while(P--){if(R[P] in M.map){break}}if(P===-1){k=false}}if(M.map["data-mce-bogus"]){k=false}}if(k){n.start(H,M,N)}}else{k=false}if(A=J[H]){A.lastIndex=F=g.index+g[0].length;if(g=A.exec(D)){if(k){B=D.substr(F,g.index-F)}F=g.index+g[0].length}else{B=D.substr(F);F=D.length}if(k&&B.length>0){n.text(B,true)}if(k){n.end(H)}l.lastIndex=F;continue}if(!N){if(!Q||Q.indexOf("/")!=Q.length-1){z.push({name:H,valid:k})}else{if(k){n.end(H)}}}}else{if(H=g[1]){n.comment(H)}else{if(H=g[2]){n.cdata(H)}else{if(H=g[3]){n.doctype(H)}else{if(H=g[4]){n.pi(H,g[5])}}}}}}F=g.index+g[0].length}if(F<D.length){n.text(j(D.substr(F)))}for(P=z.length-1;P>=0;P--){H=z[P];if(H.valid){n.end(H.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-")===0){return false}}}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(m){var o,p,x,v,z,n,q,l,t,u,k,s,y,r;s=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();for(o=0;o<m.length;o++){p=m[o];if(!p.parent){continue}v=[p];for(x=p.parent;x&&!h.isValidChild(x.name,p.name)&&!s[x.name];x=x.parent){v.push(x)}if(x&&v.length>1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t<v.length-1;t++){if(h.isValidChild(n.name,v[t].name)){q=f.filterNode(v[t].clone());n.append(q)}else{q=n}for(l=v[t].firstChild;l&&l!=v[t+1];){r=l.next;q.append(l);l=r}n=q}if(!z.isEmpty(k)){x.insert(z,v[0],true);x.insert(p,z)}else{x.insert(p,v[0],true)}x=v[0];if(x.isEmpty(k)||x.firstChild===x.lastChild&&x.firstChild.name==="br"){x.empty().remove()}}else{if(p.parent){if(p.name==="li"){y=p.prev;if(y&&(y.name==="ul"||y.name==="ul")){y.append(p);continue}y=p.next;if(y&&(y.name==="ul"||y.name==="ul")){y.insert(p,y.firstChild,true);continue}p.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(p.parent.name,"div")&&h.isValidChild("div",p.name)){p.wrap(f.filterNode(new a("div",1)))}else{if(p.name==="style"||p.name==="script"){p.empty().remove()}else{p.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,H,A,z,C,B,x,r,E,K,y,o,D,J=[],t,k,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;y=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();D=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;function F(){var L=H.firstChild,l,M;while(L){l=L.next;if(L.type==3||(L.type==1&&L.name!=="p"&&!o[L.name]&&!L.attr("data-mce-type"))){if(!M){M=I(q,1);H.insert(M,L);M.append(L)}else{M.append(L)}}else{M=null}L=l}}function I(l,L){var M=new a(l,L),N;if(l in e){N=i[l];if(N){N.push(M)}else{i[l]=[M]}}return M}function G(M){var N,l,L;for(N=M.prev;N&&N.type===3;){l=N.value.replace(t,"");if(l.length>0){N.value=l;N=N.prev}else{L=N.prev;N.remove();N=L}}}n=new b.html.SaxParser({validate:y,fix_self_closing:!y,cdata:function(l){A.append(I("#cdata",4)).value=l},text:function(M,l){var L;if(!s[A.name]){M=M.replace(k," ");if(A.lastChild&&o[A.lastChild.name]){M=M.replace(D,"")}}if(M.length!==0){L=I("#text",3);L.raw=!!l;A.append(L).value=M}},comment:function(l){A.append(I("#comment",8)).value=l},pi:function(l,L){A.append(I(l,7)).value=L;G(A)},doctype:function(L){var l;l=A.append(I("#doctype",10));l.value=L;G(A)},start:function(l,T,M){var R,O,N,L,P,U,S,Q;N=y?h.getElementRule(l):{};if(N){R=I(N.outputName||l,1);R.attributes=T;R.shortEnded=M;A.append(R);Q=p[A.name];if(Q&&p[R.name]&&!Q[R.name]){J.push(R)}O=d.length;while(O--){P=d[O].name;if(P in T.map){E=c[P];if(E){E.push(R)}else{c[P]=[R]}}}if(o[l]){G(R)}if(!M){A=R}}},end:function(l){var P,M,O,L,N;M=y?h.getElementRule(l):{};if(M){if(o[l]){if(!s[A.name]){for(P=A.firstChild;P&&P.type===3;){O=P.value.replace(D,"");if(O.length>0){P.value=O;P=P.next}else{L=P.next;P.remove();P=L}}for(P=A.lastChild;P&&P.type===3;){O=P.value.replace(t,"");if(O.length>0){P.value=O;P=P.prev}else{L=P.prev;P.remove();P=L}}}P=A.prev;if(P&&P.type===3){O=P.value.replace(D,"");if(O.length>0){P.value=O}else{P.remove()}}}if(M.removeEmpty||M.paddEmpty){if(A.isEmpty(u)){if(M.paddEmpty){A.empty().append(new a("#text","3")).value="\u00a0"}else{if(!A.attributes.map.name){N=A.parent;A.empty().remove();A=N;return}}}}A=A.parent}}},h);H=A=new a(m.context||g.root_name,11);n.parse(v);if(y&&J.length){if(!m.context){j(J)}else{m.invalid=true}}if(q&&H.name=="body"){F()}if(!m.invalid){for(K in i){E=e[K];z=i[K];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(C=0,B=E.length;C<B;C++){E[C](z,K,m)}}for(C=0,B=d.length;C<B;C++){E=d[C];if(E.name in c){z=c[E.name];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(x=0,r=E.callbacks.length;x<r;x++){E.callbacks[x](z,E.name,m)}}}}return H};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,u=h.getBlockElements(),k=h.getNonEmptyElements(),s,p,t;u.body=1;for(r=0;r<q;r++){o=n[r];s=o.parent;if(u[o.parent.name]&&o===s.lastChild){p=o.prev;while(p){t=p.name;if(t!=="span"||p.attr("data-mce-type")!=="bookmark"){if(t!=="br"){break}if(t==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(s.isEmpty(k)){elementRule=h.getElementRule(s.name);if(elementRule){if(elementRule.removeEmpty){s.remove()}else{if(elementRule.paddEmpty){s.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);(function(h){var f=h.each,e=h.is,d=h.isWebKit,b=h.isIE,c=h.html.Entities,a=/^([a-z0-9],?)+$/i,g=h.html.Schema.blockElementsMap,i=/^[ \t\r\n]*$/;h.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(o,m){var l=this,j,k;l.doc=o;l.win=window;l.files={};l.cssFlicker=false;l.counter=0;l.stdMode=!h.isIE||o.documentMode>=8;l.boxModel=!h.isIE||o.compatMode=="CSS1Compat"||l.stdMode;l.hasOuterHTML="outerHTML" in o.createElement("a");l.settings=m=h.extend({keep_values:false,hex_colors:1},m);l.schema=m.schema;l.styles=new h.html.Styles({url_converter:m.url_converter,url_converter_scope:m.url_converter_scope},m.schema);if(h.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(n){l.cssFlicker=true}}if(b&&m.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(p){o.createElement(p)});for(k in m.schema.getCustomElements()){o.createElement(k)}}h.addUnload(l.destroy,l)},getRoot:function(){var j=this,k=j.settings;return(k&&j.get(k.root_element))||j.doc.body},getViewPort:function(k){var l,j;k=!k?this.win:k;l=k.document;j=this.boxModel?l.documentElement:l.body;return{x:k.pageXOffset||j.scrollLeft,y:k.pageYOffset||j.scrollTop,w:k.innerWidth||j.clientWidth,h:k.innerHeight||j.clientHeight}},getRect:function(m){var l,j=this,k;m=j.get(m);l=j.getPos(m);k=j.getSize(m);return{x:l.x,y:l.y,w:k.w,h:k.h}},getSize:function(m){var k=this,j,l;m=k.get(m);j=k.getStyle(m,"width");l=k.getStyle(m,"height");if(j.indexOf("px")===-1){j=0}if(l.indexOf("px")===-1){l=0}return{w:parseInt(j)||m.offsetWidth||m.clientWidth,h:parseInt(l)||m.offsetHeight||m.clientHeight}},getParent:function(l,k,j){return this.getParents(l,k,j,false)},getParents:function(u,p,l,s){var k=this,j,m=k.settings,q=[];u=k.get(u);s=s===undefined;if(m.strict_root){l=l||k.getRoot()}if(e(p,"string")){j=p;if(p==="*"){p=function(o){return o.nodeType==1}}else{p=function(o){return k.is(o,j)}}}while(u){if(u==l||!u.nodeType||u.nodeType===9){break}if(!p||p(u)){if(s){q.push(u)}else{return u}}u=u.parentNode}return s?q:null},get:function(j){var k;if(j&&this.doc&&typeof(j)=="string"){k=j;j=this.doc.getElementById(j);if(j&&j.id!==k){return this.doc.getElementsByName(k)[1]}}return j},getNext:function(k,j){return this._findSib(k,j,"nextSibling")},getPrev:function(k,j){return this._findSib(k,j,"previousSibling")},select:function(l,k){var j=this;return h.dom.Sizzle(l,j.get(k)||j.get(j.settings.root_element)||j.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(a.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return h.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(m,q,j,l,o){var k=this;return this.run(m,function(s){var r,n;r=e(q,"string")?k.doc.createElement(q):q;k.setAttribs(r,j);if(l){if(l.nodeType){r.appendChild(l)}else{k.setHTML(r,l)}}return !o?s.appendChild(r):r})},create:function(l,j,k){return this.add(this.doc.createElement(l),l,j,k,1)},createHTML:function(r,j,p){var q="",m=this,l;q+="<"+r;for(l in j){if(j.hasOwnProperty(l)){q+=" "+l+'="'+m.encode(j[l])+'"'}}if(typeof(p)!="undefined"){return q+">"+p+"</"+r+">"}return q+" />"},remove:function(j,k){return this.run(j,function(m){var n,l=m.parentNode;if(!l){return null}if(k){while(n=m.firstChild){if(!h.isIE||n.nodeType!==3||n.nodeValue){l.insertBefore(n,m)}else{m.removeChild(n)}}}return l.removeChild(m)})},setStyle:function(m,j,k){var l=this;return l.run(m,function(p){var o,n;o=p.style;j=j.replace(/-(\D)/g,function(r,q){return q.toUpperCase()});if(l.pixelStyles.test(j)&&(h.is(k,"number")||/^[\-0-9\.]+$/.test(k))){k+="px"}switch(j){case"opacity":if(b){o.filter=k===""?"":"alpha(opacity="+(k*100)+")";if(!m.currentStyle||!m.currentStyle.hasLayout){o.display="inline-block"}}o[j]=o["-moz-opacity"]=o["-khtml-opacity"]=k||"";break;case"float":b?o.styleFloat=k:o.cssFloat=k;break;default:o[j]=k||""}if(l.settings.update_styles){l.setAttrib(p,"data-mce-style")}})},getStyle:function(m,j,l){m=this.get(m);if(!m){return}if(this.doc.defaultView&&l){j=j.replace(/[A-Z]/g,function(n){return"-"+n});try{return this.doc.defaultView.getComputedStyle(m,null).getPropertyValue(j)}catch(k){return null}}j=j.replace(/-(\D)/g,function(o,n){return n.toUpperCase()});if(j=="float"){j=b?"styleFloat":"cssFloat"}if(m.currentStyle&&l){return m.currentStyle[j]}return m.style?m.style[j]:undefined},setStyles:function(m,n){var k=this,l=k.settings,j;j=l.update_styles;l.update_styles=0;f(n,function(o,p){k.setStyle(m,p,o)});l.update_styles=j;if(l.update_styles){k.setAttrib(m,l.cssText)}},removeAllAttribs:function(j){return this.run(j,function(m){var l,k=m.attributes;for(l=k.length-1;l>=0;l--){m.removeAttributeNode(k.item(l))}})},setAttrib:function(l,m,j){var k=this;if(!l||!m){return}if(k.settings.strict){m=m.toLowerCase()}return this.run(l,function(q){var p=k.settings;var n=q.getAttribute(m);if(j!==null){switch(m){case"style":if(!e(j,"string")){f(j,function(r,s){k.setStyle(q,s,r)});return}if(p.keep_values){if(j&&!k._isRes(j)){q.setAttribute("data-mce-style",j,2)}else{q.removeAttribute("data-mce-style",2)}}q.style.cssText=j;break;case"class":q.className=j||"";break;case"src":case"href":if(p.keep_values){if(p.url_converter){j=p.url_converter.call(p.url_converter_scope||k,j,m,q)}k.setAttrib(q,"data-mce-"+m,j,2)}break;case"shape":q.setAttribute("data-mce-style",j);break}}if(e(j)&&j!==null&&j.length!==0){q.setAttribute(m,""+j,2)}else{q.removeAttribute(m,2)}if(tinyMCE.activeEditor&&n!=j){var o=tinyMCE.activeEditor;o.onSetAttrib.dispatch(o,q,m,j)}})},setAttribs:function(k,l){var j=this;return this.run(k,function(m){f(l,function(o,p){j.setAttrib(m,p,o)})})},getAttrib:function(o,p,l){var j,k=this,m;o=k.get(o);if(!o||o.nodeType!==1){return l===m?false:l}if(!e(l)){l=""}if(/^(src|href|style|coords|shape)$/.test(p)){j=o.getAttribute("data-mce-"+p);if(j){return j}}if(b&&k.props[p]){j=o[k.props[p]];j=j&&j.nodeValue?j.nodeValue:j}if(!j){j=o.getAttribute(p,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(p)){if(o[k.props[p]]===true&&j===""){return p}return j?p:""}if(o.nodeName==="FORM"&&o.getAttributeNode(p)){return o.getAttributeNode(p).nodeValue}if(p==="style"){j=j||o.style.cssText;if(j){j=k.serializeStyle(k.parseStyle(j),o.nodeName);if(k.settings.keep_values&&!k._isRes(j)){o.setAttribute("data-mce-style",j)}}}if(d&&p==="class"&&j){j=j.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(p){case"rowspan":case"colspan":if(j===1){j=""}break;case"size":if(j==="+0"||j===20||j===0){j=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(j===0){j=""}break;case"hspace":if(j===-1){j=""}break;case"maxlength":case"tabindex":if(j===32768||j===2147483647||j==="32768"){j=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(j===65535){return p}return l;case"shape":j=j.toLowerCase();break;default:if(p.indexOf("on")===0&&j){j=h._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+j)}}}return(j!==m&&j!==null&&j!=="")?""+j:l},getPos:function(s,m){var k=this,j=0,q=0,o,p=k.doc,l;s=k.get(s);m=m||p.body;if(s){if(s.getBoundingClientRect){s=s.getBoundingClientRect();o=k.boxModel?p.documentElement:p.body;j=s.left+(p.documentElement.scrollLeft||p.body.scrollLeft)-o.clientTop;q=s.top+(p.documentElement.scrollTop||p.body.scrollTop)-o.clientLeft;return{x:j,y:q}}l=s;while(l&&l!=m&&l.nodeType){j+=l.offsetLeft||0;q+=l.offsetTop||0;l=l.offsetParent}l=s.parentNode;while(l&&l!=m&&l.nodeType){j-=l.scrollLeft||0;q-=l.scrollTop||0;l=l.parentNode}}return{x:j,y:q}},parseStyle:function(j){return this.styles.parse(j)},serializeStyle:function(k,j){return this.styles.serialize(k,j)},loadCSS:function(j){var l=this,m=l.doc,k;if(!j){j=""}k=l.select("head")[0];f(j.split(","),function(n){var o;if(l.files[n]){return}l.files[n]=true;o=l.create("link",{rel:"stylesheet",href:h._addVer(n)});if(b&&m.documentMode&&m.recalc){o.onload=function(){if(m.recalc){m.recalc()}o.onload=null}}k.appendChild(o)})},addClass:function(j,k){return this.run(j,function(l){var m;if(!k){return 0}if(this.hasClass(l,k)){return l.className}m=this.removeClass(l,k);return l.className=(m!=""?(m+" "):"")+k})},removeClass:function(l,m){var j=this,k;return j.run(l,function(o){var n;if(j.hasClass(o,m)){if(!k){k=new RegExp("(^|\\s+)"+m+"(\\s+|$)","g")}n=o.className.replace(k," ");n=h.trim(n!=" "?n:"");o.className=n;if(!n){o.removeAttribute("class");o.removeAttribute("className")}return n}return o.className})},hasClass:function(k,j){k=this.get(k);if(!k||!j){return false}return(" "+k.className+" ").indexOf(" "+j+" ")!==-1},show:function(j){return this.setStyle(j,"display","block")},hide:function(j){return this.setStyle(j,"display","none")},isHidden:function(j){j=this.get(j);return !j||j.style.display=="none"||this.getStyle(j,"display")=="none"},uniqueId:function(j){return(!j?"mce_":j)+(this.counter++)},setHTML:function(l,k){var j=this;return j.run(l,function(n){if(b){while(n.firstChild){n.removeChild(n.firstChild)}try{n.innerHTML="<br />"+k;n.removeChild(n.firstChild)}catch(m){n=j.create("div");n.innerHTML="<br />"+k;f(n.childNodes,function(p,o){if(o){n.appendChild(p)}})}}else{n.innerHTML=k}return k})},getOuterHTML:function(l){var k,j=this;l=j.get(l);if(!l){return null}if(l.nodeType===1&&j.hasOuterHTML){return l.outerHTML}k=(l.ownerDocument||j.doc).createElement("body");k.appendChild(l.cloneNode(true));return k.innerHTML},setOuterHTML:function(m,k,n){var j=this;function l(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){j.insertAfter(s.cloneNode(true),p);s=s.previousSibling}j.remove(p)}return this.run(m,function(p){p=j.get(p);if(p.nodeType==1){n=n||p.ownerDocument||j.doc;if(b){try{if(b&&p.nodeType==1){p.outerHTML=k}else{l(p,k,n)}}catch(o){l(p,k,n)}}else{l(p,k,n)}}})},decode:c.decode,encode:c.encodeAllRaw,insertAfter:function(j,k){k=this.get(k);return this.run(j,function(m){var l,n;l=k.parentNode;n=k.nextSibling;if(n){l.insertBefore(m,n)}else{l.appendChild(m)}return m})},isBlock:function(k){var j=k.nodeType;if(j){return !!(j===1&&g[k.nodeName])}return !!g[k]},replace:function(p,m,j){var l=this;if(e(m,"array")){p=p.cloneNode(true)}return l.run(m,function(k){if(j){f(h.grep(k.childNodes),function(n){p.appendChild(n)})}return k.parentNode.replaceChild(p,k)})},rename:function(m,j){var l=this,k;if(m.nodeName!=j.toUpperCase()){k=l.create(j);f(l.getAttribs(m),function(n){l.setAttrib(k,n.nodeName,l.getAttrib(m,n.nodeName))});l.replace(k,m,1)}return k||m},findCommonAncestor:function(l,j){var m=l,k;while(m){k=j;while(k&&m!=k){k=k.parentNode}if(m==k){break}m=m.parentNode}if(!m&&l.ownerDocument){return l.ownerDocument.documentElement}return m},toHex:function(j){var l=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(j);function k(m){m=parseInt(m).toString(16);return m.length>1?m:"0"+m}if(l){j="#"+k(l[1])+k(l[2])+k(l[3]);return j}return j},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(r){f(r.imports,function(s){q(s)});f(r.cssRules||r.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){f(s.selectorText.split(","),function(t){t=t.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(t)||!/\.[\w\-]+$/.test(t)){return}l=t;t=h._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",t);if(p&&!(t=p(t,l))){return}if(!o[t]){j.push({"class":t});o[t]=1}})}break;case 3:q(s.styleSheet);break}})}try{f(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(m,l,k){var j=this,n;if(j.doc&&typeof(m)==="string"){m=j.get(m)}if(!m){return false}k=k||this;if(!m.nodeType&&(m.length||m.length===0)){n=[];f(m,function(p,o){if(p){if(typeof(p)=="string"){p=j.doc.getElementById(p)}n.push(l.call(k,p,o))}});return n}return l.call(k,m)},getAttribs:function(k){var j;k=this.get(k);if(!k){return[]}if(b){j=[];if(k.nodeName=="OBJECT"){return k.attributes}if(k.nodeName==="OPTION"&&this.getAttrib(k,"selected")){j.push({specified:1,nodeName:"selected"})}k.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(l){j.push({specified:1,nodeName:l})});return j}return k.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p;m=m.firstChild;if(m){j=new h.dom.TreeWalker(m);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){p=m.parentNode;if(l==="br"&&r.isBlock(p)&&p.firstChild===m&&p.lastChild===m){continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if((q===3&&!i.test(m.nodeValue))){return false}}while(m=j.next())}return true},destroy:function(k){var j=this;if(j.events){j.events.destroy()}j.win=j.doc=j.root=j.events=null;if(!k){h.removeUnload(j.destroy)}},createRng:function(){var j=this.doc;return j.createRange?j.createRange():new h.dom.Range(this)},nodeIndex:function(n,o){var j=0,l,m,k;if(n){for(l=n.nodeType,n=n.previousSibling,m=n;n;n=n.previousSibling){k=n.nodeType;if(o&&k==3){if(k==l||!n.nodeValue.length){continue}}j++;l=k}}return j},split:function(n,m,q){var s=this,j=s.createRng(),o,l,p;function k(x){var u,t=x.childNodes,v=x.nodeType;function y(B){var A=B.previousSibling&&B.previousSibling.nodeName=="SPAN";var z=B.nextSibling&&B.nextSibling.nodeName=="SPAN";return A&&z}if(v==1&&x.getAttribute("data-mce-type")=="bookmark"){return}for(u=t.length-1;u>=0;u--){k(t[u])}if(v!=9){if(v==3&&x.nodeValue.length>0){var r=h.trim(x.nodeValue).length;if(!s.isBlock(x.parentNode)||r>0||r==0&&y(x)){return}}else{if(v==1){t=x.childNodes;if(t.length==1&&t[0]&&t[0].nodeType==1&&t[0].getAttribute("data-mce-type")=="bookmark"){x.parentNode.insertBefore(t[0],x)}if(t.length||/^(br|hr|input|img)$/i.test(x.nodeName)){return}}}s.remove(x)}return x}if(n&&m){j.setStart(n.parentNode,s.nodeIndex(n));j.setEnd(m.parentNode,s.nodeIndex(m));o=j.extractContents();j=s.createRng();j.setStart(m.parentNode,s.nodeIndex(m)+1);j.setEnd(n.parentNode,s.nodeIndex(n)+1);l=j.extractContents();p=n.parentNode;p.insertBefore(k(o),n);if(q){p.replaceChild(q,m)}else{p.insertBefore(m,n)}p.insertBefore(k(l),n);s.remove(n);return q||m}},bind:function(n,j,m,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.add(n,j,m,l||this)},unbind:function(m,j,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.remove(m,j,l)},_findSib:function(m,j,k){var l=this,n=j;if(m){if(e(n,"string")){n=function(o){return l.is(o,j)}}for(m=m[k];m;m=m[k]){if(n(m)){return m}}}return null},_isRes:function(j){return/^(top|left|bottom|right|width|height)/i.test(j)||/;\s*(top|left|bottom|right|width|height)/i.test(j)}});h.DOM=new h.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(Y,t){var ab=N[h],W=N[U],aa=N[P],V=N[z],Z=t.startContainer,ad=t.startOffset,X=t.endContainer,ac=t.endOffset;if(Y===0){return G(ab,W,Z,ad)}if(Y===1){return G(aa,V,Z,ad)}if(Y===2){return G(aa,V,X,ac)}if(Y===3){return G(ab,W,X,ac)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z<Y){return -1}return 1}aa=V;while(aa&&aa.parentNode!=X){aa=aa.parentNode}if(aa){W=0;t=X.firstChild;while(t!=aa&&W<Z){W++;t=t.nextSibling}if(Z<=W){return -1}return 1}aa=X;while(aa&&aa.parentNode!=V){aa=aa.parentNode}if(aa){W=0;t=V.firstChild;while(t!=aa&&W<Y){W++;t=t.nextSibling}if(W<Y){return -1}return 1}ab=c.findCommonAncestor(X,V);ad=X;while(ad&&ad.parentNode!=ab){ad=ad.parentNode}if(!ad){ad=ab}ac=V;while(ac&&ac.parentNode!=ab){ac=ac.parentNode}if(!ac){ac=ab}if(ad==ac){return 0}t=ab.firstChild;while(t){if(t==ad){return -1}if(t==ac){return 1}t=t.nextSibling}}function B(V,Y,X){var t,W;if(V){N[h]=Y;N[U]=X}else{N[P]=Y;N[z]=X}t=N[P];while(t.parentNode){t=t.parentNode}W=N[h];while(W.parentNode){W=W.parentNode}if(W==t){if(G(N[h],N[U],N[P],N[z])>0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}k.setEndPoint(j?"EndToStart":"EndToEnd",i);if(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)>0){k=i.duplicate();k.collapse(j);o=-1;while(s==k.parentElement()){if(k.move("character",-1)==0){break}o++}}o=o||k.text.replace("\r\n"," ").length}else{k.collapse(true);k.setEndPoint(j?"StartToStart":"StartToEnd",i);o=k.text.replace("\r\n"," ").length}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var u,t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,s,q,r=d.dom.doc,m=r.body;function j(z){var u,y,t,x,v;t=h.create("a");u=z?k:s;y=z?p:q;x=n.duplicate();if(u==r||u==r.documentElement){u=m;y=0}if(u.nodeType==3){u.parentNode.insertBefore(t,u);x.moveToElementText(t);x.moveStart("character",y);h.remove(t);n.setEndPoint(z?"StartToStart":"EndToEnd",x)}else{v=u.childNodes;if(v.length){if(y>=v.length){h.insertAfter(t,v[v.length-1])}else{u.insertBefore(t,v[y])}x.moveToElementText(t)}else{t=r.createTextNode("\uFEFF");u.appendChild(t);x.moveToElementText(t.parentNode);x.collapse(c)}n.setEndPoint(z?"StartToStart":"EndToEnd",x);h.remove(t)}}k=i.startContainer;p=i.startOffset;s=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==s&&k.nodeType==1&&p==q-1){if(p==q-1){try{l=m.createControlRange();l.addElement(k.childNodes[p]);l.select();return}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}return r};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(y,e,z){var x;if(!y){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.leftMatch[v].exec(y))){var r=u[1];u.splice(1,1);if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");x=f.find[v](u,e,z);if(x!=null){y=y.replace(f.match[v],"");break}}}}if(!x){x=e.getElementsByTagName("*")}return{set:x,expr:y}};b.filter=function(C,B,F,u){var s=C,H=[],z=B,x,e,y=B&&B[0]&&b.isXML(B[0]);while(C&&B.length){for(var A in f.filter){if((x=f.leftMatch[A].exec(C))!=null&&x[2]){var r=f.filter[A],G,E,t=x[1];e=false;x.splice(1,1);if(t.substr(t.length-1)==="\\"){continue}if(z===H){H=[]}if(f.preFilter[A]){x=f.preFilter[A](x,z,F,H,u,y);if(!x){e=G=true}else{if(x===true){continue}}}if(x){for(var v=0;(E=z[v])!=null;v++){if(E){G=r(E,x,v,z);var D=u^!!G;if(F&&G!=null){if(D){e=true}else{z[v]=false}}else{if(D){H.push(E);e=true}}}}}if(G!==undefined){if(!F){z=H}C=C.replace(f.match[A],"");if(!e){return[]}break}}}if(C===s){if(e==null){b.error(C)}else{break}}s=C}return z};b.error=function(e){throw"Syntax error, unrecognized expression: "+e};var f=b.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,r){var t=typeof r==="string",v=t&&!/\W/.test(r),y=t&&!v;if(v){r=r.toLowerCase()}for(var s=0,e=x.length,u;s<e;s++){if((u=x[s])){while((u=u.previousSibling)&&u.nodeType!==1){}x[s]=y||u&&u.nodeName.toLowerCase()===r?u||false:u===r}}if(y){b.filter(r,x,true)}},">":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s<e;s++){v=x[s];if(v){var t=v.parentNode;x[s]=t.nodeName.toLowerCase()===r?t:false}}}else{for(;s<e;s++){v=x[s];if(v){x[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,x,true)}}},"":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,x,y){t=" "+t[1].replace(/\\/g,"")+" ";if(y){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(x^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v<u;v++){if(t[v]===s){return false}}return true}else{b.error("Syntax error, unrecognized expression: "+e)}}}},CHILD:function(e,t){var x=t[1],r=e;switch(x){case"only":case"first":while((r=r.previousSibling)){if(r.nodeType===1){return false}}if(x==="first"){return true}r=e;case"last":while((r=r.nextSibling)){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],A=t[3];if(s===1&&A===0){return true}var v=t[0],z=e.parentNode;if(z&&(z.sizcache!==v||!e.nodeIndex)){var u=0;for(r=z.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}z.sizcache=v}var y=e.nodeIndex-A;if(s===0){return y===0}else{return(y%s===0&&y/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s<e;s++){r.push(u[s])}}else{for(;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){if(!r.compareDocumentPosition||!e.compareDocumentPosition){if(r==e){o=true}return r.compareDocumentPosition?-1:1}var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){o=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){if(!r.sourceIndex||!e.sourceIndex){if(r==e){o=true}return r.sourceIndex?-1:1}var s=r.sourceIndex-e.sourceIndex;if(s===0){o=true}return s}}else{if(document.createRange){c=function(t,r){if(!t.ownerDocument||!r.ownerDocument){if(t==r){o=true}return t.ownerDocument?-1:1}var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){o=true}return u}}}}b.getText=function(e){var r="",t;for(var s=0;e[s];s++){t=e[s];if(t.nodeType===3||t.nodeType===4){r+=t.nodeValue}else{if(t.nodeType!==8){r+=b.getText(t.childNodes)}}}return r};(function(){var r=document.createElement("div"),s="script"+(new Date()).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName.toLowerCase()===x){u=e;break}e=e[r]}A[t]=u}}}function q(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof x!=="string"){if(e===x){u=true;break}}else{if(b.filter(x,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x<r;x++){b(e,s[x],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(function(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("tinymce.dom.EventUtils",{EventUtils:function(){this.inits=[];this.events=[]},add:function(m,p,l,j){var g,h=this,i=h.events,k;if(p instanceof Array){k=[];f(p,function(o){k.push(h.add(m,o,l,j))});return k}if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){if(h.disabled){return}n=n||window.event;if(n&&b){if(!n.target){n.target=n.srcElement}d.extend(n,h._stoppers)}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}if(c.isIE&&i.boxModel){this._fixIESelection()}c.addUnload(f.destroy,f)},setCursorLocation:function(h,i){var f=this;var g=f.dom.createRng();g.setStart(h,i);g.setEnd(h,i);f.setRng(g);f.collapse(false)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";g.forced_root_block="";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML="<br>"+(h.item?h.item(0).outerHTML:h.htmlText);l.removeChild(l.firstChild)}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(g,i){var n=this,f=n.getRng(),j,k=n.win.document,m,l;i=i||{format:"html"};i.set=true;g=i.content=g;if(!i.no_events){n.onBeforeSetContent.dispatch(n,i)}g=i.content;if(f.insertNode){g+='<span id="__caret">_</span>';if(f.startContainer==k&&f.endContainer==k){k.body.innerHTML=g}else{f.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=g}else{if(f.createContextualFragment){f.insertNode(f.createContextualFragment(g))}else{m=k.createDocumentFragment();l=k.createElement("div");m.appendChild(l);l.outerHTML=g;f.insertNode(m)}}}j=n.dom.get("__caret");f=k.createRange();f.setStartBefore(j);f.setEndBefore(j);n.setRng(f);n.dom.remove("__caret");try{n.setRng(f)}catch(h){}}else{if(f.item){k.execCommand("Delete",false,null);f=n.getRng()}if(/^\s+/.test(g)){f.pasteHTML('<span id="__mce_tmp">_</span>'+g);n.dom.remove("__mce_tmp")}else{f.pasteHTML(g)}}if(!i.no_events){n.onSetContent.dispatch(n,i)}},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(r,s){var v=this,m=v.dom,g,j,i,n,h,o,p,l="\uFEFF",u;function f(x,y){var t=0;d(m.select(x),function(A,z){if(A==y){t=z}});return t}if(r==2){function k(){var x=v.getRng(true),t=m.getRoot(),y={};function z(C,H){var B=C[H?"startContainer":"endContainer"],G=C[H?"startOffset":"endOffset"],A=[],D,F,E=0;if(B.nodeType==3){if(s){for(D=B.previousSibling;D&&D.nodeType==3;D=D.previousSibling){G+=D.nodeValue.length}}A.push(G)}else{F=B.childNodes;if(G>=F.length&&F.length){E=1;G=Math.max(0,F.length-1)}A.push(v.dom.nodeIndex(F[G],s)+E)}for(;B&&B!=t;B=B.parentNode){A.push(v.dom.nodeIndex(B,s))}return A}y.start=z(x,true);if(!v.isCollapsed()){y.end=z(x)}return y}if(v.tridentSel){return v.tridentSel.getBookmark(r)}return k()}if(r){return{rng:v.getRng()}}g=v.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();u="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();try{g.collapse();g.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_start" style="'+u+'">'+l+"</span>");if(!n){j.collapse(false);g.moveToElementText(j.parentElement());if(g.compareEndPoints("StartToEnd",j)==0){j.move("character",-1)}j.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_end" style="'+u+'">'+l+"</span>")}}catch(q){return null}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=v.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_end",style:u},l))}g.collapse(true);g.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_start",style:u},l))}v.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){y=t[0];for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(t[v]>u.length-1){return}x=u[t[v]]}if(x.nodeType===3){y=Math.min(t[0],x.nodeValue.length)}if(x.nodeType===1){y=Math.min(t[0],x.childNodes.length)}if(z){f.setStart(x,y)}else{f.setEnd(x,y)}}return true}if(r.tridentSel){return r.tridentSel.moveToBookmark(n)}if(g(true)&&g()){r.setRng(f)}}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3&&!c.isOpera){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(l.isBlock(t)&&!t.innerHTML){t.innerHTML=!a?'<br data-mce-bogus="1" />':" "}return t}k("start");k("end");if(j){f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;if(k){f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g)}return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var h=this,g=h.getRng(),i;if(g.item){i=g.item(0);g=h.win.document.body.createTextRange();g.moveToElementText(i)}g.collapse(!!f);h.setRng(g)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(l){var g=this,h,i,k,j=g.win.document;if(l&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():j.createRange())}}catch(f){}if(c.isIE&&i&&i.setStart&&j.selection.createRange().item){k=j.selection.createRange().item(0);i=j.createRange();i.setStartBefore(k);i.setEndAfter(k)}if(!i){i=j.createRange?j.createRange():j.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;try{h.removeAllRanges()}catch(f){}h.addRange(i);g.selectedRange=h.rangeCount>0?h.getRangeAt(0):null}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var h=this,g=h.getRng(),i=h.getSel(),l,k=g.startContainer,f=g.endContainer;if(!g){return h.dom.getRoot()}if(g.setStart){l=g.commonAncestorContainer;if(!g.collapsed){if(g.startContainer==g.endContainer){if(g.endOffset-g.startOffset<2){if(g.startContainer.hasChildNodes()){l=g.startContainer.childNodes[g.startOffset]}}}if(k.nodeType===3&&f.nodeType===3){function j(p,m){var o=p;while(p&&p.nodeType===3&&p.length===0){p=m?p.nextSibling:p.previousSibling}return p||o}if(k.length===g.startOffset){k=j(k.nextSibling,true)}else{k=k.parentNode}if(g.endOffset===0){f=j(f.previousSibling,false)}else{f=f.parentNode}if(k&&k===f){return k}}}if(l&&l.nodeType==3){return l.parentNode}return l}return g.item?g.item(0):g.parentElement()},getSelectedBlocks:function(o,g){var m=this,j=m.dom,l,k,h,i=[];l=j.getParent(o||m.getStart(),j.isBlock);k=j.getParent(g||m.getEnd(),j.isBlock);if(l){i.push(l)}if(l&&k&&l!=k){h=l;var f=new c.dom.TreeWalker(l,j.getRoot());while((h=f.next())&&h!=k){if(j.isBlock(h)){i.push(h)}}}if(k&&l!=k){i.push(k)}return i},normalize:function(){var g=this,f,i;if(c.isIE){return}function h(p){var k,o,n,m=g.dom,j=m.getRoot(),l;k=f[(p?"start":"end")+"Container"];o=f[(p?"start":"end")+"Offset"];if(k.nodeType===9){k=k.body;o=0}if(k===j){if(k.hasChildNodes()){k=k.childNodes[Math.min(!p&&o>0?o-1:o,k.childNodes.length-1)];o=0;if(k.hasChildNodes()){l=k;n=new c.dom.TreeWalker(k,j);do{if(l.nodeType===3){o=p?0:l.nodeValue.length-1;k=l;i=true;break}if(/^(BR|IMG)$/.test(l.nodeName)){o=m.nodeIndex(l);k=l.parentNode;if(l.nodeName=="IMG"&&!p){o++}i=true;break}}while(l=(p?n.next():n.prev()))}}}if(i){f["set"+(p?"Start":"End")](k,o)}}f=g.getRng();h(true);if(!f.collapsed){h()}if(i){g.setRng(f)}},destroy:function(g){var f=this;f.win=null;if(!g){c.removeUnload(f.destroy)}},_fixIESelection:function(){var g=this.dom,m=g.doc,h=m.body,j,n,f;m.documentElement.unselectable=true;function i(o,r){var p=h.createTextRange();try{p.moveToPoint(o,r)}catch(q){p=null}return p}function l(p){var o;if(p.button){o=i(p.x,p.y);if(o){if(o.compareEndPoints("StartToStart",n)>0){o.setEndPoint("StartToStart",n)}else{o.setEndPoint("EndToEnd",n)}o.select()}}else{k()}}function k(){var o=m.selection.createRange();if(n&&!o.item&&o.compareEndPoints("StartToEnd",o)===0){n.select()}g.unbind(m,"mouseup",k);g.unbind(m,"mousemove",l);n=j=0}g.bind(m,["mousedown","contextmenu"],function(o){if(o.target.nodeName==="HTML"){if(j){k()}f=m.documentElement;if(f.scrollHeight>f.clientHeight){return}j=1;n=i(o.x,o.y);if(n){g.bind(m,"mouseup",k);g.bind(m,"mousemove",l);g.win.focus();n.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/\s*mce(Item\w+|Selected)\s*/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(m.getInner?o.innerHTML:a.trim(i.getOuterHTML(o),m),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF|\u200B/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var p=this,m=e.root,l=e.items,n=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,k=e.excludeFromTabOrder,j,h,o,d,g;f=f||b.DOM;j=function(q){g=q.target.id};h=function(q){f.setAttrib(q.target.id,"tabindex","-1")};d=function(q){var r=f.get(g);f.setAttrib(r,"tabindex","0");r.focus()};p.focus=function(){f.get(g).focus()};p.destroy=function(){c(l,function(q){f.unbind(f.get(q.id),"focus",j);f.unbind(f.get(q.id),"blur",h)});f.unbind(f.get(m),"focus",d);f.unbind(f.get(m),"keydown",o);l=f=m=p.focus=j=h=o=d=null;p.destroy=function(){}};p.moveFocus=function(u,r){var q=-1,t=p.controls,s;if(!g){return}c(l,function(x,v){if(x.id===g){q=v;return false}});q+=u;if(q<0){q=l.length-1}else{if(q>=l.length){q=0}}s=l[q];f.setAttrib(g,"tabindex","-1");f.setAttrib(s.id,"tabindex","0");f.get(s.id).focus();if(e.actOnFocus){e.onAction(s.id)}if(r){a.cancel(r)}};o=function(y){var u=37,t=39,x=38,z=40,q=27,s=14,r=13,v=32;switch(y.keyCode){case u:if(i){p.moveFocus(-1)}break;case t:if(i){p.moveFocus(1)}break;case x:if(n){p.moveFocus(-1)}break;case z:if(n){p.moveFocus(1)}break;case q:if(e.onCancel){e.onCancel();a.cancel(y)}break;case s:case r:case v:if(e.onAction){e.onAction(g);a.cancel(y)}break}};c(l,function(s,q){var r;if(!s.id){s.id=f.uniqueId("_mce_item_")}if(k){f.bind(s.id,"blur",h);r="-1"}else{r=(q===0?"0":"-1")}f.setAttrib(s.id,"tabindex",r);f.bind(f.get(s.id),"focus",j)});if(l[0]){g=l[0].id}f.setAttrib(m,"tabindex","-1");f.bind(f.get(m),"focus",d);f.bind(f.get(m),"keydown",o)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" />'+c}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var c=this,e=c.settings,d;if(b.isIE&&c.editor){b.dom.Event.add(c.id,"mousedown",function(f){d=c.editor.selection.getBookmark()})}b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){if(b.isIE&&c.editor&&d){b.activeEditor.selection.moveToBookmark(d)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(c.id,"keyup",function(f){if(!c.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(i,h,f){var g=this;g.parent(i,h,f);g.items=[];g.onChange=new a(g);g.onPostRender=new a(g);g.onAdd=new a(g);g.onRenderMenu=new d.util.Dispatcher(this);g.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var h=this,i,j,g;if(f!=h.selectedIndex){i=c.get(h.id+"_text");g=c.get(h.id+"_voiceDesc");j=h.items[f];if(j){h.selectedValue=j.value;h.selectedIndex=f;c.setHTML(i,c.encode(j.title));c.setHTML(g,h.settings.title+" - "+j.title);c.removeClass(i,"mceTitle");c.setAttrib(h.id,"aria-valuenow",j.title)}else{c.setHTML(i,c.encode(h.settings.title));c.setHTML(g,c.encode(h.settings.title));c.addClass(i,"mceTitle");h.selectedValue=h.selectedIndex=null;c.setAttrib(h.id,"aria-valuenow",h.settings.title)}i=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<span role="listbox" aria-haspopup="true" aria-labelledby="'+f.id+'_voiceDesc" aria-describedby="'+f.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("span",{id:f.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},f.settings.title);i+=c.createHTML("a",{id:f.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";i+="</tr></tbody></table></span>";return i},showMenu:function(){var g=this,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(j){if(j.value===g.selectedValue){f.items[j.id].setSelected(1);g.oldID=j.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){c.removeClass(f.id,f.classPrefix+"Selected");if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(function(){g.hideMenu();g.focus()});f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.role="option";h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id,"keydown",function(h){if(h.keyCode==32){f.showMenu(h);b.cancel(h)}});b.add(f.id,"focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id,"keydown",function(h){if(h.keyCode==40){f.showMenu();b.cancel(h)}});f.keyPressHandler=b.add(f.id,"keypress",function(i){var h;if(i.keyCode==13){h=f.selectedValue;f.selectedValue=null;b.cancel(i);f.settings.onselect(h)}})}f._focused=1});b.add(f.id,"blur",function(){b.remove(f.id,"keydown",f.keyDownHandler);b.remove(f.id,"keypress",f.keyPressHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f;this.setAriaProperty("disabled",f)},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox","aria-labelledby":f.id+"_aria"},g);g+=c.createHTML("span",{id:f.id+"_aria",style:"display: none"},f.settings.title);return g},postRender:function(){var g=this,h,i=true;g.rendered=true;function f(k){var j=g.items[k.target.selectedIndex-1];if(j&&(j=j.value)){g.onChange.dispatch(g,j);if(g.settings.onselect){g.settings.onselect(j)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(k){var j;b.remove(g.id,"change",h);i=false;j=b.add(g.id,"blur",function(){if(i){return}i=true;b.add(g.id,"change",f);b.remove(g.id,"blur",j)});if(d.isWebKit&&(k.keyCode==37||k.keyCode==39)){return b.prevent(k)}if(k.keyCode==13||k.keyCode==32){f(k);return b.cancel(k)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");new d.ui.KeyboardNavigation({root:p.id+"_menu",items:c.select("a",p.id+"_menu"),onCancel:function(){p.hideMenu();p.focus()}});a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return a.cancel(i)});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(n){var o=n.DOM,k=n.dom.Event,f=n.extend,l=n.util.Dispatcher,i=n.each,a=n.isGecko,b=n.isIE,e=n.isWebKit,d=n.is,h=n.ThemeManager,c=n.PluginManager,p=n.inArray,m=n.grep,g=n.explode,j=n.VK;n.create("tinymce.Editor",{Editor:function(u,r){var q=this;q.id=q.editorId=u;q.execCommands={};q.queryStateCommands={};q.queryValueCommands={};q.isNotDirty=false;q.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(s){q[s]=new l(q)});q.settings=r=f({id:u,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:n.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:n.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",validate:true,entity_encoding:"named",url_converter:q.convertURL,url_converter_scope:q,ie7_compat:true},r);q.documentBaseURI=new n.util.URI(r.document_base_url||n.documentBaseURL,{base_uri:tinyMCE.baseURI});q.baseURI=n.baseURI;q.contentCSS=[];q.execCallback("setup",q)},render:function(u){var v=this,x=v.settings,y=v.id,q=n.ScriptLoader;if(!k.domLoaded){k.add(document,"init",function(){v.render()});return}tinyMCE.settings=x;if(!v.getElement()){return}if(n.isIDevice&&!n.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(v.getElement().nodeName)&&x.hidden_input&&o.getParent(y,"form")){o.insertAfter(o.create("input",{type:"hidden",name:y}),y)}if(n.WindowManager){v.windowManager=new n.WindowManager(v)}if(x.encoding=="xml"){v.onGetContent.add(function(s,t){if(t.save){t.content=o.encode(t.content)}})}if(x.add_form_submit_trigger){v.onSubmit.addToTop(function(){if(v.initialized){v.save();v.isNotDirty=1}})}if(x.add_unload_trigger){v._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(v.initialized&&!v.destroyed&&!v.isHidden()){v.save({format:"raw",no_events:true})}})}n.addUnload(v.destroy,v);if(x.submit_patch){v.onBeforeRenderUI.add(function(){var s=v.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){v.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){n.triggerSave();v.isNotDirty=1;return v.formElement._mceOldSubmit(v.formElement)}}s=null})}function r(){if(x.language&&x.language_load!==false){q.add(n.baseURL+"/langs/"+x.language+".js")}if(x.theme&&x.theme.charAt(0)!="-"&&!h.urls[x.theme]){h.load(x.theme,"themes/"+x.theme+"/editor_template"+n.suffix+".js")}i(g(x.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(A){var z={prefix:"plugins/",resource:A,suffix:"/editor_plugin"+n.suffix+".js"};var A=c.createUrl(z,A);c.load(A.resource,A)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+n.suffix+".js"})}}});q.loadQueue(function(){if(!v.removed){v.init()}})}r()},init:function(){var v,I=this,J=I.settings,F,B,E=I.getElement(),r,q,G,z,D,H,A,x=[];n.add(I);J.aria_label=J.aria_label||o.getAttrib(E,"aria-label",I.getLang("aria.rich_text_area"));if(J.theme){J.theme=J.theme.replace(/-/,"");r=h.get(J.theme);I.theme=new r();if(I.theme.init&&J.init_theme){I.theme.init(I,h.urls[J.theme]||n.documentBaseURL.replace(/\/$/,""))}}function C(K){var L=c.get(K),t=c.urls[K]||n.documentBaseURL.replace(/\/$/,""),s;if(L&&n.inArray(x,K)===-1){i(c.dependencies(K),function(u){C(u)});s=new L(I,t);I.plugins[K]=s;if(s.init){s.init(I,t);x.push(K)}}}i(g(J.plugins.replace(/\-/g,"")),C);if(J.popup_css!==false){if(J.popup_css){J.popup_css=I.documentBaseURI.toAbsolute(J.popup_css)}else{J.popup_css=I.baseURI.toAbsolute("themes/"+J.theme+"/skins/"+J.skin+"/dialog.css")}}if(J.popup_css_add){J.popup_css+=","+I.documentBaseURI.toAbsolute(J.popup_css_add)}I.controlManager=new n.ControlManager(I);if(J.custom_undo_redo){I.onBeforeExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.beforeChange()}});I.onExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.add()}})}I.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){I.nodeChanged()}});if(a){function y(s,t){if(!t||!t.initial){I.execCommand("mceRepaint")}}I.onUndo.add(y);I.onRedo.add(y);I.onSetContent.add(y)}I.onBeforeRenderUI.dispatch(I,I.controlManager);if(J.render_ui){F=J.width||E.style.width||E.offsetWidth;B=J.height||E.style.height||E.offsetHeight;I.orgDisplay=E.style.display;H=/^[0-9\.]+(|px)$/i;if(H.test(""+F)){F=Math.max(parseInt(F)+(r.deltaWidth||0),100)}if(H.test(""+B)){B=Math.max(parseInt(B)+(r.deltaHeight||0),100)}r=I.theme.renderUI({targetNode:E,width:F,height:B,deltaWidth:J.delta_width,deltaHeight:J.delta_height});I.editorContainer=r.editorContainer}if(document.domain&&location.hostname!=document.domain){n.relaxedDomain=document.domain}o.setStyles(r.sizeContainer||r.editorContainer,{width:F,height:B});if(J.content_css){n.each(g(J.content_css),function(s){I.contentCSS.push(I.documentBaseURI.toAbsolute(s))})}B=(r.iframeHeight||B)+(typeof(B)=="number"?(r.deltaHeight||0):"");if(B<100){B=100}I.iframeHTML=J.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(J.document_base_url!=n.documentBaseURL){I.iframeHTML+='<base href="'+I.documentBaseURI.getURI()+'" />'}if(J.ie7_compat){I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}I.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(A=0;A<I.contentCSS.length;A++){I.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+I.contentCSS[A]+'" />'}z=J.body_id||"tinymce";if(z.indexOf("=")!=-1){z=I.getParam("body_id","","hash");z=z[I.id]||z}D=J.body_class||"";if(D.indexOf("=")!=-1){D=I.getParam("body_class","","hash");D=D[I.id]||""}I.iframeHTML+='</head><body id="'+z+'" class="mceContentBody '+D+'" onload="window.parent.tinyMCE.get(\''+I.id+"').onLoad.dispatch();\"><br></body></html>";if(n.relaxedDomain&&(b||(n.isOpera&&parseFloat(opera.version())<11))){G='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+I.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}v=o.add(r.iframeContainer,"iframe",{id:I.id+"_ifr",src:G||'javascript:""',frameBorder:"0",allowTransparency:"true",title:J.aria_label,style:{width:"100%",height:B,display:"block"}});I.contentAreaContainer=r.iframeContainer;o.get(r.editorContainer).style.display=I.orgDisplay;o.get(I.id).style.display="none";o.setAttrib(I.id,"aria-hidden",true);if(!n.relaxedDomain||!G){I.setupIframe()}E=v=r=null},setupIframe:function(){var r=this,x=r.settings,y=o.get(r.id),z=r.getDoc(),v,q;if(!b||!n.relaxedDomain){z.open();z.write(r.iframeHTML);z.close();if(n.relaxedDomain){z.domain=n.relaxedDomain}}q=r.getBody();q.disabled=true;if(!x.readonly){q.contentEditable=true}q.disabled=false;r.schema=new n.html.Schema(x);r.dom=new n.dom.DOMUtils(r.getDoc(),{keep_values:true,url_converter:r.convertURL,url_converter_scope:r,hex_colors:x.force_hex_style_colors,class_filter:x.class_filter,update_styles:1,fix_ie_paragraphs:1,schema:r.schema});r.parser=new n.html.DomParser(x,r.schema);if(!r.settings.allow_html_in_named_anchor){r.parser.addAttributeFilter("name",function(s,t){var B=s.length,D,A,C,E;while(B--){E=s[B];if(E.name==="a"&&E.firstChild){C=E.parent;D=E.lastChild;do{A=D.prev;C.insert(D,E);D=A}while(D)}}})}r.parser.addAttributeFilter("src,href,style",function(s,t){var A=s.length,C,E=r.dom,D,B;while(A--){C=s[A];D=C.attr(t);B="data-mce-"+t;if(!C.attributes.map[B]){if(t==="style"){C.attr(B,E.serializeStyle(E.parseStyle(D),C.name))}else{C.attr(B,r.convertURL(D,t,C.name))}}}});r.parser.addNodeFilter("script",function(s,t){var A=s.length,B;while(A--){B=s[A];B.attr("type","mce-"+(B.attr("type")||"text/javascript"))}});r.parser.addNodeFilter("#cdata",function(s,t){var A=s.length,B;while(A--){B=s[A];B.type=8;B.name="#comment";B.value="[CDATA["+B.value+"]]"}});r.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,A){var B=t.length,C,s=r.schema.getNonEmptyElements();while(B--){C=t[B];if(C.isEmpty(s)){C.empty().append(new n.html.Node("br",1)).shortEnded=true}}});r.serializer=new n.dom.Serializer(x,r.dom,r.schema);r.selection=new n.dom.Selection(r.dom,r.getWin(),r.serializer);r.formatter=new n.Formatter(this);r.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"}},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"}},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"}},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"}}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(s){return true},onformat:function(A,s,t){i(t,function(C,B){r.dom.setAttrib(A,B,C)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){r.formatter.register(s,{block:s,remove:"all"})});r.formatter.register(r.settings.formats);r.undoManager=new n.UndoManager(r);r.undoManager.onAdd.add(function(t,s){if(t.hasUndo()){return r.onChange.dispatch(r,s,t)}});r.undoManager.onUndo.add(function(t,s){return r.onUndo.dispatch(r,s,t)});r.undoManager.onRedo.add(function(t,s){return r.onRedo.dispatch(r,s,t)});r.forceBlocks=new n.ForceBlocks(r,{forced_root_block:x.forced_root_block});r.editorCommands=new n.EditorCommands(r);r.serializer.onPreProcess.add(function(s,t){return r.onPreProcess.dispatch(r,t,s)});r.serializer.onPostProcess.add(function(s,t){return r.onPostProcess.dispatch(r,t,s)});r.onPreInit.dispatch(r);if(!x.gecko_spellcheck){r.getBody().spellcheck=0}if(!x.readonly){r._addEvents()}r.controlManager.onPostRender.dispatch(r,r.controlManager);r.onPostRender.dispatch(r);r.quirks=new n.util.Quirks(this);if(x.directionality){r.getBody().dir=x.directionality}if(x.nowrap){r.getBody().style.whiteSpace="nowrap"}if(x.handle_node_change_callback){r.onNodeChange.add(function(t,s,A){r.execCallback("handle_node_change_callback",r.id,A,-1,-1,true,r.selection.isCollapsed())})}if(x.save_callback){r.onSaveContent.add(function(s,A){var t=r.execCallback("save_callback",r.id,A.content,r.getBody());if(t){A.content=t}})}if(x.onchange_callback){r.onChange.add(function(t,s){r.execCallback("onchange_callback",r,s)})}if(x.protect){r.onBeforeSetContent.add(function(s,t){if(x.protect){i(x.protect,function(A){t.content=t.content.replace(A,function(B){return"<!--mce:protected "+escape(B)+"-->"})})}})}if(x.convert_newlines_to_brs){r.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(x.preformatted){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(x.verify_css_classes){r.serializer.attribValueFilter=function(C,A){var B,t;if(C=="class"){if(!r.classesRE){t=r.dom.getClasses();if(t.length>0){B="";i(t,function(s){B+=(B?"|":"")+s["class"]});r.classesRE=new RegExp("("+B+")","gi")}}return !r.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(A)||r.classesRE.test(A)?A:""}return A}}if(x.cleanup_callback){r.onBeforeSetContent.add(function(s,t){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)});r.onPreProcess.add(function(s,t){if(t.set){r.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){r.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});r.onPostProcess.add(function(s,t){if(t.set){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=r.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(x.save_callback){r.onGetContent.add(function(s,t){if(t.save){t.content=r.execCallback("save_callback",r.id,t.content,r.getBody())}})}if(x.handle_event_callback){r.onEvent.add(function(s,t,A){if(r.execCallback("handle_event_callback",t,s,A)===false){k.cancel(t)}})}r.onSetContent.add(function(){r.addVisual(r.getBody())});if(x.padd_empty_editor){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function u(s,t){i(s.dom.select("a"),function(B){var A=B.parentNode;if(s.dom.isBlock(A)&&A.lastChild===B){s.dom.add(A,"br",{"data-mce-bogus":1})}})}r.onExecCommand.add(function(s,t){if(t==="CreateLink"){u(s)}});r.onSetContent.add(r.selection.onSetContent.add(u))}r.load({initial:true,format:"html"});r.startContent=r.getContent({format:"raw"});r.undoManager.add();r.initialized=true;r.onInit.dispatch(r);r.execCallback("setupcontent_callback",r.id,r.getBody(),r.getDoc());r.execCallback("init_instance_callback",r);r.focus(true);r.nodeChanged({initial:1});i(r.contentCSS,function(s){r.dom.loadCSS(s)});if(x.auto_focus){setTimeout(function(){var s=n.get(x.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getBody().focus();s.getWin().focus()},100)}y=null},focus:function(v){var z,r=this,u=r.selection,y=r.settings.content_editable,s,q,x=r.getDoc();if(!v){s=u.getRng();if(s.item){q=s.item(0)}r._refreshContentEditable();if(!y){r.getWin().focus()}if(n.isGecko){r.getBody().focus()}if(q&&q.ownerDocument==x){s=x.body.createControlRange();s.addElement(q);s.select()}}if(n.activeEditor!=r){if((z=n.activeEditor)!=null){z.onDeactivate.dispatch(z,r)}r.onActivate.dispatch(r,z)}n._setActive(r)},execCallback:function(v){var q=this,u=q.settings[v],r;if(!u){return}if(q.callbackLookup&&(r=q.callbackLookup[v])){u=r.func;r=r.scope}if(d(u,"string")){r=u.replace(/\.\w+$/,"");r=r?n.resolve(r):0;u=n.resolve(u);q.callbackLookup=q.callbackLookup||{};q.callbackLookup[v]={func:u,scope:r}}return u.apply(r||q,Array.prototype.slice.call(arguments,1))},translate:function(q){var t=this.settings.language||"en",r=n.i18n;if(!q){return""}return r[t+"."+q]||q.replace(/{\#([^}]+)\}/g,function(u,s){return r[t+"."+s]||"{#"+s+"}"})},getLang:function(r,q){return n.i18n[(this.settings.language||"en")+"."+r]||(d(q)?q:"{#"+r+"}")},getParam:function(x,s,q){var t=n.trim,r=d(this.settings[x])?this.settings[x]:s,u;if(q==="hash"){u={};if(d(r,"string")){i(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(y){y=y.split("=");if(y.length>1){u[t(y[0])]=t(y[1])}else{u[t(y[0])]=t(y)}})}else{u=r}return u}return r},nodeChanged:function(u){var q=this,r=q.selection,v=r.getStart()||q.getBody();if(q.initialized){u=u||{};v=b&&v.ownerDocument!=q.getDoc()?q.getBody():v;u.parents=[];q.dom.getParent(v,function(s){if(s.nodeName=="BODY"){return true}u.parents.push(s)});q.onNodeChange.dispatch(q,u?u.controlManager||q.controlManager:q.controlManager,v,r.isCollapsed(),u)}},addButton:function(u,r){var q=this;q.buttons=q.buttons||{};q.buttons[u]=r},addCommand:function(q,s,r){this.execCommands[q]={func:s,scope:r||this}},addQueryStateHandler:function(q,s,r){this.queryStateCommands[q]={func:s,scope:r||this}},addQueryValueHandler:function(q,s,r){this.queryValueCommands[q]={func:s,scope:r||this}},addShortcut:function(s,v,q,u){var r=this,x;if(!r.settings.custom_shortcuts){return false}r.shortcuts=r.shortcuts||{};if(d(q,"string")){x=q;q=function(){r.execCommand(x,false,null)}}if(d(q,"object")){x=q;q=function(){r.execCommand(x[0],x[1],x[2])}}i(g(s),function(t){var y={func:q,scope:u||this,desc:v,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(z){switch(z){case"alt":case"ctrl":case"shift":y[z]=true;break;default:y.charCode=z.charCodeAt(0);y.keyCode=z.toUpperCase().charCodeAt(0)}});r.shortcuts[(y.ctrl?"ctrl":"")+","+(y.alt?"alt":"")+","+(y.shift?"shift":"")+","+y.keyCode]=y});return true},execCommand:function(y,x,A,q){var u=this,v=0,z,r;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(y)&&(!q||!q.skip_focus)){u.focus()}z={};u.onBeforeExecCommand.dispatch(u,y,x,A,z);if(z.terminate){return false}if(u.execCallback("execcommand_callback",u.id,u.selection.getNode(),y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(z=u.execCommands[y]){r=z.func.call(z.scope,x,A);if(r!==true){u.onExecCommand.dispatch(u,y,x,A,q);return r}}i(u.plugins,function(s){if(s.execCommand&&s.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);v=1;return false}});if(v){return true}if(u.theme&&u.theme.execCommand&&u.theme.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(u.editorCommands.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}u.getDoc().execCommand(y,x,A);u.onExecCommand.dispatch(u,y,x,A,q)},queryCommandState:function(v){var r=this,x,u;if(r._isHidden()){return}if(x=r.queryStateCommands[v]){u=x.func.call(x.scope);if(u!==true){return u}}x=r.editorCommands.queryCommandState(v);if(x!==-1){return x}try{return this.getDoc().queryCommandState(v)}catch(q){}},queryCommandValue:function(x){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryValueCommands[x]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandValue(x);if(d(v)){return v}try{return this.getDoc().queryCommandValue(x)}catch(q){}},show:function(){var q=this;o.show(q.getContainer());o.hide(q.id);q.load()},hide:function(){var q=this,r=q.getDoc();if(b&&r){r.execCommand("SelectAll")}q.save();o.hide(q.getContainer());o.setStyle(q.id,"display",q.orgDisplay)},isHidden:function(){return !o.isHidden(this.id)},setProgressState:function(q,r,s){this.onSetProgressState.dispatch(this,q,r,s);return q},load:function(u){var q=this,s=q.getElement(),r;if(s){u=u||{};u.load=true;r=q.setContent(d(s.value)?s.value:s.innerHTML,u);u.element=s;if(!u.no_events){q.onLoadContent.dispatch(q,u)}u.element=s=null;return r}},save:function(v){var q=this,u=q.getElement(),r,s;if(!u||!q.initialized){return}v=v||{};v.save=true;if(!v.no_events){q.undoManager.typing=false;q.undoManager.add()}v.element=u;r=v.content=q.getContent(v);if(!v.no_events){q.onSaveContent.dispatch(q,v)}r=v.content;if(!/TEXTAREA|INPUT/i.test(u.nodeName)){u.innerHTML=r;if(s=o.getParent(q.id,"form")){i(s.elements,function(t){if(t.name==q.id){t.value=r;return false}})}}else{u.value=r}v.element=u=null;return r},setContent:function(v,t){var s=this,r,q=s.getBody(),u;t=t||{};t.format=t.format||"html";t.set=true;t.content=v;if(!t.no_events){s.onBeforeSetContent.dispatch(s,t)}v=t.content;if(!n.isIE&&(v.length===0||/^\s+$/.test(v))){u=s.settings.forced_root_block;if(u){v="<"+u+'><br data-mce-bogus="1"></'+u+">"}else{v='<br data-mce-bogus="1">'}q.innerHTML=v;s.selection.select(q,true);s.selection.collapse(true);return}if(t.format!=="raw"){v=new n.html.Serializer({},s.schema).serialize(s.parser.parse(v))}t.content=n.trim(v);s.dom.setHTML(q,t.content);if(!t.no_events){s.onSetContent.dispatch(s,t)}s.selection.normalize();return t.content},getContent:function(r){var q=this,s;r=r||{};r.format=r.format||"html";r.get=true;if(!r.no_events){q.onBeforeGetContent.dispatch(q,r)}if(r.format=="raw"){s=q.getBody().innerHTML}else{s=q.serializer.serialize(q.getBody(),r)}r.content=n.trim(s);if(!r.no_events){q.onGetContent.dispatch(q,r)}return r.content},isDirty:function(){var q=this;return n.trim(q.startContent)!=n.trim(q.getContent({format:"raw",no_events:1}))&&!q.isNotDirty},getContainer:function(){var q=this;if(!q.container){q.container=o.get(q.editorContainer||q.id+"_parent")}return q.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return o.get(this.settings.content_element||this.id)},getWin:function(){var q=this,r;if(!q.contentWindow){r=o.get(q.id+"_ifr");if(r){q.contentWindow=r.contentWindow}}return q.contentWindow},getDoc:function(){var r=this,q;if(!r.contentDocument){q=r.getWin();if(q){r.contentDocument=q.document}}return r.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(q,y,x){var r=this,v=r.settings;if(v.urlconverter_callback){return r.execCallback("urlconverter_callback",q,x,true,y)}if(!v.convert_urls||(x&&x.nodeName=="LINK")||q.indexOf("file:")===0){return q}if(v.relative_urls){return r.documentBaseURI.toRelative(q)}q=r.documentBaseURI.toAbsolute(q,v.remove_script_host);return q},addVisual:function(u){var q=this,r=q.settings;u=u||q.getBody();if(!d(q.hasVisual)){q.hasVisual=r.visual}i(q.dom.select("table,a",u),function(t){var s;switch(t.nodeName){case"TABLE":s=q.dom.getAttrib(t,"border");if(!s||s=="0"){if(q.hasVisual){q.dom.addClass(t,r.visual_table_class)}else{q.dom.removeClass(t,r.visual_table_class)}}return;case"A":s=q.dom.getAttrib(t,"name");if(s){if(q.hasVisual){q.dom.addClass(t,"mceItemAnchor")}else{q.dom.removeClass(t,"mceItemAnchor")}}return}});q.onVisualAid.dispatch(q,u,q.hasVisual)},remove:function(){var q=this,r=q.getContainer();q.removed=1;q.hide();q.execCallback("remove_instance_callback",q);q.onRemove.dispatch(q);q.onExecCommand.listeners=[];n.remove(q);o.remove(r)},destroy:function(r){var q=this;if(q.destroyed){return}if(!r){n.removeUnload(q.destroy);tinyMCE.onBeforeUnload.remove(q._beforeUnload);if(q.theme&&q.theme.destroy){q.theme.destroy()}q.controlManager.destroy();q.selection.destroy();q.dom.destroy();if(!q.settings.content_editable){k.clear(q.getWin());k.clear(q.getDoc())}k.clear(q.getBody());k.clear(q.formElement)}if(q.formElement){q.formElement.submit=q.formElement._mceOldSubmit;q.formElement._mceOldSubmit=null}q.contentAreaContainer=q.formElement=q.container=q.settings.content_element=q.bodyElement=q.contentDocument=q.contentWindow=null;if(q.selection){q.selection=q.selection.win=q.selection.dom=q.selection.dom.doc=null}q.destroyed=1},_addEvents:function(){var C=this,u,D=C.settings,r=C.dom,y={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function q(t,E){var s=t.type;if(C.removed){return}if(C.onEvent.dispatch(C,t,E)!==false){C[y[t.fakeType||t.type]].dispatch(C,t,E)}}i(y,function(t,s){switch(s){case"contextmenu":r.bind(C.getDoc(),s,q);break;case"paste":r.bind(C.getBody(),s,function(E){q(E)});break;case"submit":case"reset":r.bind(C.getElement().form||o.getParent(C.id,"form"),s,q);break;default:r.bind(D.content_editable?C.getBody():C.getDoc(),s,q)}});r.bind(D.content_editable?C.getBody():(a?C.getDoc():C.getWin()),"focus",function(s){C.focus(true)});if(n.isGecko){r.bind(C.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("data-mce-src"))){t.src=C.documentBaseURI.toAbsolute(s)}})}if(a){function v(){var F=this,H=F.getDoc(),G=F.settings;if(a&&!G.readonly){F._refreshContentEditable();try{H.execCommand("styleWithCSS",0,false)}catch(E){if(!F._isHidden()){try{H.execCommand("useCSS",0,true)}catch(E){}}}if(!G.table_inline_editing){try{H.execCommand("enableInlineTableEditing",false,false)}catch(E){}}if(!G.object_resizing){try{H.execCommand("enableObjectResizing",false,false)}catch(E){}}}}C.onBeforeExecCommand.add(v);C.onMouseDown.add(v)}C.onMouseUp.add(C.nodeChanged);C.onKeyUp.add(function(s,t){var E=t.keyCode;if((E>=33&&E<=36)||(E>=37&&E<=40)||E==13||E==45||E==46||E==8||(n.isMac&&(E==91||E==93))||t.ctrlKey){C.nodeChanged()}});C.onKeyDown.add(function(t,E){if(E.keyCode!=j.BACKSPACE){return}var s=t.selection.getRng();if(!s.collapsed){return}var G=s.startContainer;var F=s.startOffset;while(G&&G.nodeType&&G.nodeType!=1&&G.parentNode){G=G.parentNode}if(G&&G.parentNode&&G.parentNode.tagName==="BLOCKQUOTE"&&G.parentNode.firstChild==G&&F==0){t.formatter.toggle("blockquote",null,G.parentNode);s.setStart(G,0);s.setEnd(G,0);t.selection.setRng(s);t.selection.collapse(false)}});C.onReset.add(function(){C.setContent(C.startContent,{format:"raw"})});if(D.custom_shortcuts){if(D.custom_undo_redo_keyboard_shortcuts){C.addShortcut("ctrl+z",C.getLang("undo_desc"),"Undo");C.addShortcut("ctrl+y",C.getLang("redo_desc"),"Redo")}C.addShortcut("ctrl+b",C.getLang("bold_desc"),"Bold");C.addShortcut("ctrl+i",C.getLang("italic_desc"),"Italic");C.addShortcut("ctrl+u",C.getLang("underline_desc"),"Underline");for(u=1;u<=6;u++){C.addShortcut("ctrl+"+u,"",["FormatBlock",false,"h"+u])}C.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);C.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);C.addShortcut("ctrl+9","",["FormatBlock",false,"address"]);function x(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(C.shortcuts,function(E){if(n.isMac&&E.ctrl!=t.metaKey){return}else{if(!n.isMac&&E.ctrl!=t.ctrlKey){return}}if(E.alt!=t.altKey){return}if(E.shift!=t.shiftKey){return}if(t.keyCode==E.keyCode||(t.charCode&&t.charCode==E.charCode)){s=E;return false}});return s}C.onKeyUp.add(function(s,t){var E=x(t);if(E){return k.cancel(t)}});C.onKeyPress.add(function(s,t){var E=x(t);if(E){return k.cancel(t)}});C.onKeyDown.add(function(s,t){var E=x(t);if(E){E.func.call(E.scope);return k.cancel(t)}})}if(n.isIE){r.bind(C.getDoc(),"controlselect",function(E){var t=C.resizeInfo,s;E=E.target;if(E.nodeName!=="IMG"){return}if(t){r.unbind(t.node,t.ev,t.cb)}if(!r.hasClass(E,"mceItemNoResize")){ev="resizeend";s=r.bind(E,ev,function(G){var F;G=G.target;if(F=r.getStyle(G,"width")){r.setAttrib(G,"width",F.replace(/[^0-9%]+/g,""));r.setStyle(G,"width","")}if(F=r.getStyle(G,"height")){r.setAttrib(G,"height",F.replace(/[^0-9%]+/g,""));r.setStyle(G,"height","")}})}else{ev="resizestart";s=r.bind(E,"resizestart",k.cancel,k)}t=C.resizeInfo={node:E,ev:ev,cb:s}})}if(n.isOpera){C.onClick.add(function(s,t){k.prevent(t)})}if(D.custom_undo_redo){function z(){C.undoManager.typing=false;C.undoManager.add()}r.bind(C.getDoc(),"focusout",function(s){if(!C.removed&&C.undoManager.typing){z()}});C.dom.bind(C.dom.getRoot(),"dragend",function(s){z()});C.onKeyUp.add(function(s,E){var t=E.keyCode;if((t>=33&&t<=36)||(t>=37&&t<=40)||t==13||t==45||E.ctrlKey){z()}});C.onKeyDown.add(function(s,F){var E=F.keyCode,t;if(E==8){t=C.getDoc().selection;if(t&&t.createRange&&t.createRange().item){C.undoManager.beforeChange();s.dom.remove(t.createRange().item(0));z();return k.cancel(F)}}if((E>=33&&E<=36)||(E>=37&&E<=40)||E==13||E==45){if(n.isIE&&E==13){C.undoManager.beforeChange()}if(C.undoManager.typing){z()}return}if((E<16||E>20)&&E!=224&&E!=91&&!C.undoManager.typing){C.undoManager.beforeChange();C.undoManager.typing=true;C.undoManager.add()}});C.onMouseDown.add(function(){if(C.undoManager.typing){z()}})}if(n.isGecko){function B(){var s=C.dom.getAttribs(C.selection.getStart().cloneNode(false));return function(){var t=C.selection.getStart();if(t!==C.getBody()){C.dom.setAttrib(t,"style",null);i(s,function(E){t.setAttributeNode(E.cloneNode(true))})}}}function A(){var t=C.selection;return !t.isCollapsed()&&t.getStart()!=t.getEnd()}C.onKeyPress.add(function(s,E){var t;if((E.keyCode==8||E.keyCode==46)&&A()){t=B();C.getDoc().execCommand("delete",false,null);t();return k.cancel(E)}});C.dom.bind(C.getDoc(),"cut",function(t){var s;if(A()){s=B();C.onKeyUp.addToTop(k.cancel,k);setTimeout(function(){s();C.onKeyUp.remove(k.cancel,k)},0)}})}},_refreshContentEditable:function(){var r=this,q,s;if(r._isHidden()){q=r.getBody();s=q.parentNode;s.removeChild(q);s.appendChild(q);q.focus()}},_isHidden:function(){var q;if(!a){return 0}q=this.selection.getSel();return(!q||!q.rangeCount||q.rangeCount==0)}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return b}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return b}function u(v,x){x=x||"exec";d(v,function(z,y){d(y.toLowerCase().split(","),function(A){j[x][A]=z})})}c.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===e){x=b}if(v===e){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:e)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);d("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=c.explode(k.font_size_style_values);v=c.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return b}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new c.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=n.selection.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=c.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){d(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();v.setStart(x,0);v.setEnd(x,x.childNodes.length);n.selection.setRng(v)}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[p.getNode()]:p.getSelectedBlocks();var y=c.map(v,function(A){return !!q.matchNode(A,x)});return c.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(v){return m.getParent(p.getNode(),v=="insertunorderedlist"?"UL":"OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");if(k.custom_undo_redo){u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(f){var d,e=0,h=[],c;function g(){return b.trim(f.getContent({format:"raw",no_events:1}))}return d={typing:false,onAdd:new a(d),onUndo:new a(d),onRedo:new a(d),beforeChange:function(){c=f.selection.getBookmark(2,true)},add:function(m){var j,k=f.settings,l;m=m||{};m.content=g();l=h[e];if(l&&l.content==m.content){return null}if(h[e]){h[e].beforeBookmark=c}if(k.custom_undo_redo_levels){if(h.length>k.custom_undo_redo_levels){for(j=0;j<h.length-1;j++){h[j]=h[j+1]}h.length--;e=h.length}}m.bookmark=f.selection.getBookmark(2,true);if(e<h.length-1){h.length=e+1}h.push(m);e=h.length-1;d.onAdd.dispatch(d,m);f.isNotDirty=0;return m},undo:function(){var k,j;if(d.typing){d.add();d.typing=false}if(e>0){k=h[--e];f.setContent(k.content,{format:"raw"});f.selection.moveToBookmark(k.beforeBookmark);d.onUndo.dispatch(d,k)}return k},redo:function(){var i;if(e<h.length-1){i=h[++e];f.setContent(i.content,{format:"raw"});f.selection.moveToBookmark(i.bookmark);d.onRedo.dispatch(d,i)}return i},clear:function(){h=[];e=0;d.typing=false},hasUndo:function(){return e>0||this.typing},hasRedo:function(){return e<h.length-1&&!this.typing}}}})(tinymce);(function(l){var j=l.dom.Event,c=l.isIE,a=l.isGecko,b=l.isOpera,i=l.each,h=l.extend,d=true,g=false;function k(o){var p,n,m;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(o.nodeName)){if(p){n=o.cloneNode(false);n.appendChild(p);p=n}else{p=m=o.cloneNode(false)}p.removeAttribute("id")}}while(o=o.parentNode);if(p){return{wrapper:p,inner:m}}}function f(n,o){var m=o.ownerDocument.createRange();m.setStart(n.endContainer,n.endOffset);m.setEndAfter(o);return m.cloneContents().textContent.length==0}function e(o,q,m){var n,p;if(q.isEmpty(m)){n=q.getParent(m,"ul,ol");if(!q.getParent(n.parentNode,"ul,ol")){q.split(n,m);p=q.create("p",0,'<br data-mce-bogus="1" />');q.replace(p,m);o.select(p,1)}return g}return d}l.create("tinymce.ForceBlocks",{ForceBlocks:function(m){var n=this,o=m.settings,p;n.editor=m;n.dom=m.dom;p=(o.forced_root_block||"p").toLowerCase();o.element=p.toUpperCase();m.onPreInit.add(n.setup,n)},setup:function(){var n=this,m=n.editor,p=m.settings,u=m.dom,o=m.selection,q=m.schema.getBlockElements();if(p.forced_root_block){function v(){var y=o.getStart(),t=m.getBody(),s,z,D,F,E,x,A,B=-16777215;if(!y||y.nodeType!==1){return}while(y!=t){if(q[y.nodeName]){return}y=y.parentNode}s=o.getRng();if(s.setStart){z=s.startContainer;D=s.startOffset;F=s.endContainer;E=s.endOffset}else{if(s.item){s=m.getDoc().body.createTextRange();s.moveToElementText(s.item(0))}tmpRng=s.duplicate();tmpRng.collapse(true);D=tmpRng.move("character",B)*-1;if(!tmpRng.collapsed){tmpRng=s.duplicate();tmpRng.collapse(false);E=(tmpRng.move("character",B)*-1)-D}}for(y=t.firstChild;y;y){if(y.nodeType===3||(y.nodeType==1&&!q[y.nodeName])){if(!x){x=u.create(p.forced_root_block);y.parentNode.insertBefore(x,y)}A=y;y=y.nextSibling;x.appendChild(A)}else{x=null;y=y.nextSibling}}if(s.setStart){s.setStart(z,D);s.setEnd(F,E);o.setRng(s)}else{try{s=m.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(true);s.moveStart("character",D);if(E>0){s.moveEnd("character",E)}s.select()}catch(C){}}m.nodeChanged()}m.onKeyUp.add(v);m.onClick.add(v)}if(p.force_br_newlines){if(c){m.onKeyPress.add(function(s,t){var x;if(t.keyCode==13&&o.getNode().nodeName!="LI"){o.setContent('<br id="__" /> ',{format:"raw"});x=u.get("__");x.removeAttribute("id");o.select(x);o.collapse();return j.cancel(t)}})}}if(p.force_p_newlines){if(!c){m.onKeyPress.add(function(s,t){if(t.keyCode==13&&!t.shiftKey&&!n.insertPara(t)){j.cancel(t)}})}else{l.addUnload(function(){n._previousFormats=0});m.onKeyPress.add(function(s,t){n._previousFormats=0;if(t.keyCode==13&&!t.shiftKey&&s.selection.isCollapsed()&&p.keep_styles){n._previousFormats=k(s.selection.getStart())}});m.onKeyUp.add(function(t,y){if(y.keyCode==13&&!y.shiftKey){var x=t.selection.getStart(),s=n._previousFormats;if(!x.hasChildNodes()&&s){x=u.getParent(x,u.isBlock);if(x&&x.nodeName!="LI"){x.innerHTML="";if(n._previousFormats){x.appendChild(s.wrapper);s.inner.innerHTML="\uFEFF"}else{x.innerHTML="\uFEFF"}o.select(x,1);o.collapse(true);t.getDoc().execCommand("Delete",false,null);n._previousFormats=0}}}})}if(a){m.onKeyDown.add(function(s,t){if((t.keyCode==8||t.keyCode==46)&&!t.shiftKey){n.backspaceDelete(t,t.keyCode==8)}})}}if(l.isWebKit){function r(t){var s=o.getRng(),x,A=u.create("div",null," "),z,y=u.getViewPort(t.getWin()).h;s.insertNode(x=u.create("br"));s.setStartAfter(x);s.setEndAfter(x);o.setRng(s);if(o.getSel().focusNode==x.previousSibling){o.select(u.insertAfter(u.doc.createTextNode("\u00a0"),x));o.collapse(d)}u.insertAfter(A,x);z=u.getPos(A).y;u.remove(A);if(z>y){t.getWin().scrollTo(0,z)}}m.onKeyPress.add(function(s,t){if(t.keyCode==13&&(t.shiftKey||(p.force_br_newlines&&!u.getParent(o.getNode(),"h1,h2,h3,h4,h5,h6,ol,ul")))){r(s);j.cancel(t)}})}if(c){if(p.element!="P"){m.onKeyPress.add(function(s,t){n.lastElm=o.getNode().nodeName});m.onKeyUp.add(function(t,x){var z,y=o.getNode(),s=t.getBody();if(s.childNodes.length===1&&y.nodeName=="P"){y=u.rename(y,p.element);o.select(y);o.collapse();t.nodeChanged()}else{if(x.keyCode==13&&!x.shiftKey&&n.lastElm!="P"){z=u.getParent(y,"p");if(z){u.rename(z,p.element);t.nodeChanged()}}}})}}},getParentBlock:function(o){var m=this.dom;return m.getParent(o,m.isBlock)},insertPara:function(Q){var E=this,v=E.editor,M=v.dom,R=v.getDoc(),V=v.settings,F=v.selection.getSel(),G=F.getRangeAt(0),U=R.body;var J,K,H,O,N,q,o,u,z,m,C,T,p,x,I,L=M.getViewPort(v.getWin()),B,D,A;v.undoManager.beforeChange();J=R.createRange();J.setStart(F.anchorNode,F.anchorOffset);J.collapse(d);K=R.createRange();K.setStart(F.focusNode,F.focusOffset);K.collapse(d);H=J.compareBoundaryPoints(J.START_TO_END,K)<0;O=H?F.anchorNode:F.focusNode;N=H?F.anchorOffset:F.focusOffset;q=H?F.focusNode:F.anchorNode;o=H?F.focusOffset:F.anchorOffset;if(O===q&&/^(TD|TH)$/.test(O.nodeName)){if(O.firstChild.nodeName=="BR"){M.remove(O.firstChild)}if(O.childNodes.length==0){v.dom.add(O,V.element,null,"<br />");T=v.dom.add(O,V.element,null,"<br />")}else{I=O.innerHTML;O.innerHTML="";v.dom.add(O,V.element,null,I);T=v.dom.add(O,V.element,null,"<br />")}G=R.createRange();G.selectNodeContents(T);G.collapse(1);v.selection.setRng(G);return g}if(O==U&&q==U&&U.firstChild&&v.dom.isBlock(U.firstChild)){O=q=O.firstChild;N=o=0;J=R.createRange();J.setStart(O,0);K=R.createRange();K.setStart(q,0)}if(!R.body.hasChildNodes()){R.body.appendChild(M.create("br"))}O=O.nodeName=="HTML"?R.body:O;O=O.nodeName=="BODY"?O.firstChild:O;q=q.nodeName=="HTML"?R.body:q;q=q.nodeName=="BODY"?q.firstChild:q;u=E.getParentBlock(O);z=E.getParentBlock(q);m=u?u.nodeName:V.element;if(I=E.dom.getParent(u,"li,pre")){if(I.nodeName=="LI"){return e(v.selection,E.dom,I)}return d}if(u&&(u.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;u=null}if(z&&(z.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;z=null}if(/(TD|TABLE|TH|CAPTION)/.test(m)||(u&&m=="DIV"&&/left|right/gi.test(M.getStyle(u,"float",1)))){m=V.element;u=z=null}C=(u&&u.nodeName==m)?u.cloneNode(0):v.dom.create(m);T=(z&&z.nodeName==m)?z.cloneNode(0):v.dom.create(m);T.removeAttribute("id");if(/^(H[1-6])$/.test(m)&&f(G,u)){T=v.dom.create(V.element)}I=p=O;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}p=I}while((I=I.previousSibling?I.previousSibling:I.parentNode));I=x=q;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}x=I}while((I=I.nextSibling?I.nextSibling:I.parentNode));if(p.nodeName==m){J.setStart(p,0)}else{J.setStartBefore(p)}J.setEnd(O,N);C.appendChild(J.cloneContents()||R.createTextNode(""));try{K.setEndAfter(x)}catch(P){}K.setStart(q,o);T.appendChild(K.cloneContents()||R.createTextNode(""));G=R.createRange();if(!p.previousSibling&&p.parentNode.nodeName==m){G.setStartBefore(p.parentNode)}else{if(J.startContainer.nodeName==m&&J.startOffset==0){G.setStartBefore(J.startContainer)}else{G.setStart(J.startContainer,J.startOffset)}}if(!x.nextSibling&&x.parentNode.nodeName==m){G.setEndAfter(x.parentNode)}else{G.setEnd(K.endContainer,K.endOffset)}G.deleteContents();if(b){v.getWin().scrollTo(0,L.y)}if(C.firstChild&&C.firstChild.nodeName==m){C.innerHTML=C.firstChild.innerHTML}if(T.firstChild&&T.firstChild.nodeName==m){T.innerHTML=T.firstChild.innerHTML}function S(y,s){var r=[],X,W,t;y.innerHTML="";if(V.keep_styles){W=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(W.nodeName)){X=W.cloneNode(g);M.setAttrib(X,"id","");r.push(X)}}while(W=W.parentNode)}if(r.length>0){for(t=r.length-1,X=y;t>=0;t--){X=X.appendChild(r[t])}r[0].innerHTML=b?"\u00a0":"<br />";return r[0]}else{y.innerHTML=b?"\u00a0":"<br />"}}if(M.isEmpty(C)){S(C,O)}if(M.isEmpty(T)){A=S(T,q)}if(b&&parseFloat(opera.version())<9.5){G.insertNode(C);G.insertNode(T)}else{G.insertNode(T);G.insertNode(C)}T.normalize();C.normalize();v.selection.select(T,true);v.selection.collapse(true);B=v.dom.getPos(T).y;if(B<L.y||B+25>L.y+L.h){v.getWin().scrollTo(0,B<L.y?B:B-L.h+25)}v.undoManager.add();return g},backspaceDelete:function(u,B){var C=this,s=C.editor,y=s.getBody(),q=s.dom,p,v=s.selection,o=v.getRng(),x=o.startContainer,p,z,A,m;if(!B&&o.collapsed&&x.nodeType==1&&o.startOffset==x.childNodes.length){m=new l.dom.TreeWalker(x.lastChild,x);for(p=x.lastChild;p;p=m.prev()){if(p.nodeType==3){o.setStart(p,p.nodeValue.length);o.collapse(true);v.setRng(o);return}}}if(x&&s.dom.isBlock(x)&&!/^(TD|TH)$/.test(x.nodeName)&&B){if(x.childNodes.length==0||(x.childNodes.length==1&&x.firstChild.nodeName=="BR")){p=x;while((p=p.previousSibling)&&!s.dom.isBlock(p)){}if(p){if(x!=y.firstChild){z=s.dom.doc.createTreeWalker(p,NodeFilter.SHOW_TEXT,null,g);while(A=z.nextNode()){p=A}o=s.getDoc().createRange();o.setStart(p,p.nodeValue?p.nodeValue.length:0);o.setEnd(p,p.nodeValue?p.nodeValue.length:0);v.setRng(o);s.dom.remove(x)}return j.cancel(u)}}}}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(V){var M={},P=a.each,c=V.dom,q=V.selection,t=a.dom.TreeWalker,K=new a.dom.RangeUtils(c),d=V.schema.isValidChild,F=c.isBlock,l=V.settings.forced_root_block,s=c.nodeIndex,E="\uFEFF",e=/^(src|href|style)$/,S=false,B=true,p;function z(W){return W instanceof Array}function m(X,W){return c.getParents(X,W,c.getRoot())}function b(W){return W.nodeType===1&&(W.face==="mceinline"||W.style.fontFamily==="mceinline")}function R(W){return W?M[W]:M}function k(W,X){if(W){if(typeof(W)!=="string"){P(W,function(Z,Y){k(Y,Z)})}else{X=X.length?X:[X];P(X,function(Y){if(Y.deep===p){Y.deep=!Y.selector}if(Y.split===p){Y.split=!Y.selector||Y.inline}if(Y.remove===p&&Y.selector&&!Y.inline){Y.remove="none"}if(Y.selector&&Y.inline){Y.mixed=true;Y.block_expand=true}if(typeof(Y.classes)==="string"){Y.classes=Y.classes.split(/\s+/)}});M[W]=X}}}var i=function(X){var W;V.dom.getParent(X,function(Y){W=V.dom.getStyle(Y,"text-decoration");return W&&W!=="none"});return W};var I=function(W){var X;if(W.nodeType===1&&W.parentNode&&W.parentNode.nodeType===1){X=i(W.parentNode);if(V.dom.getStyle(W,"color")&&X){V.dom.setStyle(W,"text-decoration",X)}else{if(V.dom.getStyle(W,"textdecoration")===X){V.dom.setStyle(W,"text-decoration",null)}}}};function T(Z,ag,ab){var ac=R(Z),ah=ac[0],af,X,ae,ad=q.isCollapsed();function W(al,ak){ak=ak||ah;if(al){if(ak.onformat){ak.onformat(al,ak,ag,ab)}P(ak.styles,function(an,am){c.setStyle(al,am,r(an,ag))});P(ak.attributes,function(an,am){c.setAttrib(al,am,r(an,ag))});P(ak.classes,function(am){am=r(am,ag);if(!c.hasClass(al,am)){c.addClass(al,am)}})}}function aa(){function am(at,aq){var ar=new t(aq);for(ab=ar.current();ab;ab=ar.prev()){if(ab.childNodes.length>1||ab==at){return ab}}}var al=V.selection.getRng();var ap=al.startContainer;var ak=al.endContainer;if(ap!=ak&&al.endOffset==0){var ao=am(ap,ak);var an=ao.nodeType==3?ao.length:ao.childNodes.length;al.setEnd(ao,an)}return al}function Y(an,at,aq,ap,al){var ak=[],am=-1,ar,av=-1,ao=-1,au;P(an.childNodes,function(ax,aw){if(ax.nodeName==="UL"||ax.nodeName==="OL"){am=aw;ar=ax;return false}});P(an.childNodes,function(ax,aw){if(ax.nodeName==="SPAN"&&c.getAttrib(ax,"data-mce-type")=="bookmark"){if(ax.id==at.id+"_start"){av=aw}else{if(ax.id==at.id+"_end"){ao=aw}}}});if(am<=0||(av<am&&ao>am)){P(a.grep(an.childNodes),al);return 0}else{au=aq.cloneNode(S);P(a.grep(an.childNodes),function(ax,aw){if((av<am&&aw<am)||(av>am&&aw>am)){ak.push(ax);ax.parentNode.removeChild(ax)}});if(av<am){an.insertBefore(au,ar)}else{if(av>am){an.insertBefore(au,ar.nextSibling)}}ap.push(au);P(ak,function(aw){au.appendChild(aw)});return au}}function ai(al,an,ap){var ak=[],ao,am;ao=ah.inline||ah.block;am=c.create(ao);W(am);K.walk(al,function(aq){var ar;function at(au){var ax=au.nodeName.toLowerCase(),aw=au.parentNode.nodeName.toLowerCase(),av;if(g(ax,"br")){ar=0;if(ah.block){c.remove(au)}return}if(ah.wrapper&&x(au,Z,ag)){ar=0;return}if(ah.block&&!ah.wrapper&&G(ax)){au=c.rename(au,ao);W(au);ak.push(au);ar=0;return}if(ah.selector){P(ac,function(ay){if("collapsed" in ay&&ay.collapsed!==ad){return}if(c.is(au,ay.selector)&&!b(au)){W(au,ay);av=true}});if(!ah.inline||av){ar=0;return}}if(d(ao,ax)&&d(aw,ao)&&!(!ap&&au.nodeType===3&&au.nodeValue.length===1&&au.nodeValue.charCodeAt(0)===65279)&&au.id!=="_mce_caret"){if(!ar){ar=am.cloneNode(S);au.parentNode.insertBefore(ar,au);ak.push(ar)}ar.appendChild(au)}else{if(ax=="li"&&an){ar=Y(au,an,am,ak,at)}else{ar=0;P(a.grep(au.childNodes),at);ar=0}}}P(aq,at)});if(ah.wrap_links===false){P(ak,function(aq){function ar(aw){var av,au,at;if(aw.nodeName==="A"){au=am.cloneNode(S);ak.push(au);at=a.grep(aw.childNodes);for(av=0;av<at.length;av++){au.appendChild(at[av])}aw.appendChild(au)}P(a.grep(aw.childNodes),ar)}ar(aq)})}P(ak,function(at){var aq;function au(aw){var av=0;P(aw.childNodes,function(ax){if(!f(ax)&&!H(ax)){av++}});return av}function ar(av){var ax,aw;P(av.childNodes,function(ay){if(ay.nodeType==1&&!H(ay)&&!b(ay)){ax=ay;return S}});if(ax&&h(ax,ah)){aw=ax.cloneNode(S);W(aw);c.replace(aw,av,B);c.remove(ax,1)}return aw||av}aq=au(at);if((ak.length>1||!F(at))&&aq===0){c.remove(at,1);return}if(ah.inline||ah.wrapper){if(!ah.exact&&aq===1){at=ar(at)}P(ac,function(av){P(c.select(av.inline,at),function(ax){var aw;if(av.wrap_links===false){aw=ax.parentNode;do{if(aw.nodeName==="A"){return}}while(aw=aw.parentNode)}U(av,ag,ax,av.exact?ax:null)})});if(x(at.parentNode,Z,ag)){c.remove(at,1);at=0;return B}if(ah.merge_with_parents){c.getParent(at.parentNode,function(av){if(x(av,Z,ag)){c.remove(at,1);at=0;return B}})}if(at&&ah.merge_siblings!==false){at=u(C(at),at);at=u(at,C(at,B))}}})}if(ah){if(ab){if(ab.nodeType){X=c.createRng();X.setStartBefore(ab);X.setEndAfter(ab);ai(o(X,ac),null,true)}else{ai(ab,null,true)}}else{if(!ad||!ah.inline||c.select("td.mceSelected,th.mceSelected").length){var aj=V.selection.getNode();V.selection.setRng(aa());af=q.getBookmark();ai(o(q.getRng(B),ac),af);if(ah.styles&&(ah.styles.color||ah.styles.textDecoration)){a.walk(aj,I,"childNodes");I(aj)}q.moveToBookmark(af);N(q.getRng(B));V.nodeChanged()}else{Q("apply",Z,ag)}}}}function A(Y,ag,aa){var ab=R(Y),ai=ab[0],af,ae,X;function Z(an){var am,al,ak;am=a.grep(an.childNodes);for(al=0,ak=ab.length;al<ak;al++){if(U(ab[al],ag,an,an)){break}}if(ai.deep){for(al=0,ak=am.length;al<ak;al++){Z(am[al])}}}function ac(ak){var al;P(m(ak.parentNode).reverse(),function(am){var an;if(!al&&am.id!="_start"&&am.id!="_end"){an=x(am,Y,ag);if(an&&an.split!==false){al=am}}});return al}function W(an,ak,ap,at){var au,ar,aq,am,ao,al;if(an){al=an.parentNode;for(au=ak.parentNode;au&&au!=al;au=au.parentNode){ar=au.cloneNode(S);for(ao=0;ao<ab.length;ao++){if(U(ab[ao],ag,ar,ar)){ar=0;break}}if(ar){if(aq){ar.appendChild(aq)}if(!am){am=ar}aq=ar}}if(at&&(!ai.mixed||!F(an))){ak=c.split(an,ak)}if(aq){ap.parentNode.insertBefore(aq,ap);am.appendChild(ap)}}return ak}function ah(ak){return W(ac(ak),ak,ak,true)}function ad(am){var al=c.get(am?"_start":"_end"),ak=al[am?"firstChild":"lastChild"];if(H(ak)){ak=ak[am?"firstChild":"lastChild"]}c.remove(al,true);return ak}function aj(ak){var al,am;ak=o(ak,ab,B);if(ai.split){al=J(ak,B);am=J(ak);if(al!=am){al=O(al,"span",{id:"_start","data-mce-type":"bookmark"});am=O(am,"span",{id:"_end","data-mce-type":"bookmark"});ah(al);ah(am);al=ad(B);am=ad()}else{al=am=ah(al)}ak.startContainer=al.parentNode;ak.startOffset=s(al);ak.endContainer=am.parentNode;ak.endOffset=s(am)+1}K.walk(ak,function(an){P(an,function(ao){Z(ao);if(ao.nodeType===1&&V.dom.getStyle(ao,"text-decoration")==="underline"&&ao.parentNode&&i(ao.parentNode)==="underline"){U({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,ao)}})})}if(aa){if(aa.nodeType){X=c.createRng();X.setStartBefore(aa);X.setEndAfter(aa);aj(X)}else{aj(aa)}return}if(!q.isCollapsed()||!ai.inline||c.select("td.mceSelected,th.mceSelected").length){af=q.getBookmark();aj(q.getRng(B));q.moveToBookmark(af);if(ai.inline&&j(Y,ag,q.getStart())){N(q.getRng(true))}V.nodeChanged()}else{Q("remove",Y,ag)}if(a.isWebKit){V.execCommand("mceCleanup")}}function D(X,Z,Y){var W=R(X);if(j(X,Z,Y)&&(!("toggle" in W[0])||W[0]["toggle"])){A(X,Z,Y)}else{T(X,Z,Y)}}function x(X,W,ac,aa){var Y=R(W),ad,ab,Z;function ae(ai,ak,al){var ah,aj,af=ak[al],ag;if(ak.onmatch){return ak.onmatch(ai,ak,al)}if(af){if(af.length===p){for(ah in af){if(af.hasOwnProperty(ah)){if(al==="attributes"){aj=c.getAttrib(ai,ah)}else{aj=L(ai,ah)}if(aa&&!aj&&!ak.exact){return}if((!aa||ak.exact)&&!g(aj,r(af[ah],ac))){return}}}}else{for(ag=0;ag<af.length;ag++){if(al==="attributes"?c.getAttrib(ai,af[ag]):L(ai,af[ag])){return ak}}}}return ak}if(Y&&X){for(ab=0;ab<Y.length;ab++){ad=Y[ab];if(h(X,ad)&&ae(X,ad,"attributes")&&ae(X,ad,"styles")){if(Z=ad.classes){for(ab=0;ab<Z.length;ab++){if(!c.hasClass(X,Z[ab])){return}}}return ad}}}}function j(Y,aa,Z){var X;function W(ab){ab=c.getParent(ab,function(ac){return !!x(ac,Y,aa,true)});return x(ab,Y,aa)}if(Z){return W(Z)}Z=q.getNode();if(W(Z)){return B}X=q.getStart();if(X!=Z){if(W(X)){return B}}return S}function v(ad,ac){var aa,ab=[],Z={},Y,X,W;aa=q.getStart();c.getParent(aa,function(ag){var af,ae;for(af=0;af<ad.length;af++){ae=ad[af];if(!Z[ae]&&x(ag,ae,ac)){Z[ae]=true;ab.push(ae)}}});return ab}function y(aa){var ac=R(aa),Z,Y,ab,X,W;if(ac){Z=q.getStart();Y=m(Z);for(X=ac.length-1;X>=0;X--){W=ac[X].selector;if(!W){return B}for(ab=Y.length-1;ab>=0;ab--){if(c.is(Y[ab],W)){return B}}}}return S}a.extend(this,{get:R,register:k,apply:T,remove:A,toggle:D,match:j,matchAll:v,matchNode:x,canApply:y});function h(W,X){if(g(W,X.inline)){return B}if(g(W,X.block)){return B}if(X.selector){return c.is(W,X.selector)}}function g(X,W){X=X||"";W=W||"";X=""+(X.nodeName||X);W=""+(W.nodeName||W);return X.toLowerCase()==W.toLowerCase()}function L(X,W){var Y=c.getStyle(X,W);if(W=="color"||W=="backgroundColor"){Y=c.toHex(Y)}if(W=="fontWeight"&&Y==700){Y="bold"}return""+Y}function r(W,X){if(typeof(W)!="string"){W=W(X)}else{if(X){W=W.replace(/%(\w+)/g,function(Z,Y){return X[Y]||Z})}}return W}function f(W){return W&&W.nodeType===3&&/^([\t \r\n]+|)$/.test(W.nodeValue)}function O(Y,X,W){var Z=c.create(X,W);Y.parentNode.insertBefore(Z,Y);Z.appendChild(Y);return Z}function o(W,ai,Z){var Y=W.startContainer,ad=W.startOffset,al=W.endContainer,af=W.endOffset,ak,ah,ac,ag;function aj(ar){var am,ap,aq,ao,an;am=ap=ar?Y:al;an=ar?"previousSibling":"nextSibling";root=c.getRoot();if(am.nodeType==3&&!f(am)){if(ar?ad>0:af<am.nodeValue.length){return am}}for(;;){if(ap==root||(!ai[0].block_expand&&F(ap))){return ap}for(ao=ap[an];ao;ao=ao[an]){if(!H(ao)&&!f(ao)){return ap}}ap=ap.parentNode}return am}function ab(am,an){if(an===p){an=am.nodeType===3?am.length:am.childNodes.length}while(am&&am.hasChildNodes()){am=am.childNodes[an];if(am){an=am.nodeType===3?am.length:am.childNodes.length}}return{node:am,offset:an}}if(Y.nodeType==1&&Y.hasChildNodes()){ah=Y.childNodes.length-1;Y=Y.childNodes[ad>ah?ah:ad];if(Y.nodeType==3){ad=0}}if(al.nodeType==1&&al.hasChildNodes()){ah=al.childNodes.length-1;al=al.childNodes[af>ah?ah:af-1];if(al.nodeType==3){af=al.nodeValue.length}}if(H(Y.parentNode)||H(Y)){Y=H(Y)?Y:Y.parentNode;Y=Y.nextSibling||Y;if(Y.nodeType==3){ad=0}}if(H(al.parentNode)||H(al)){al=H(al)?al:al.parentNode;al=al.previousSibling||al;if(al.nodeType==3){af=al.length}}if(ai[0].inline){if(W.collapsed){function ae(an,ar,au){var aq,ao,at,am;function ap(aw,ay){var az,av,ax=aw.nodeValue;if(typeof(ay)=="undefined"){ay=au?ax.length:0}if(au){az=ax.lastIndexOf(" ",ay);av=ax.lastIndexOf("\u00a0",ay);az=az>av?az:av;if(az!==-1&&!Z){az++}}else{az=ax.indexOf(" ",ay);av=ax.indexOf("\u00a0",ay);az=az!==-1&&(av===-1||az<av)?az:av}return az}if(an.nodeType===3){at=ap(an,ar);if(at!==-1){return{container:an,offset:at}}am=an}aq=new t(an,c.getParent(an,F)||V.getBody());while(ao=aq[au?"prev":"next"]()){if(ao.nodeType===3){am=ao;at=ap(ao);if(at!==-1){return{container:ao,offset:at}}}else{if(F(ao)){break}}}if(am){if(au){ar=0}else{ar=am.length}return{container:am,offset:ar}}}ag=ae(Y,ad,true);if(ag){Y=ag.container;ad=ag.offset}ag=ae(al,af);if(ag){al=ag.container;af=ag.offset}}ac=ab(al,af);if(ac.node){while(ac.node&&ac.offset===0&&ac.node.previousSibling){ac=ab(ac.node.previousSibling)}if(ac.node&&ac.offset>0&&ac.node.nodeType===3&&ac.node.nodeValue.charAt(ac.offset-1)===" "){if(ac.offset>1){al=ac.node;al.splitText(ac.offset-1)}else{if(ac.node.previousSibling){}}}}}if(ai[0].inline||ai[0].block_expand){if(!ai[0].inline||(Y.nodeType!=3||ad===0)){Y=aj(true)}if(!ai[0].inline||(al.nodeType!=3||af===al.nodeValue.length)){al=aj()}}if(ai[0].selector&&ai[0].expand!==S&&!ai[0].inline){function aa(an,am){var ao,ap,ar,aq;if(an.nodeType==3&&an.nodeValue.length==0&&an[am]){an=an[am]}ao=m(an);for(ap=0;ap<ao.length;ap++){for(ar=0;ar<ai.length;ar++){aq=ai[ar];if("collapsed" in aq&&aq.collapsed!==W.collapsed){continue}if(c.is(ao[ap],aq.selector)){return ao[ap]}}}return an}Y=aa(Y,"previousSibling");al=aa(al,"nextSibling")}if(ai[0].block||ai[0].selector){function X(an,am,ap){var ao;if(!ai[0].wrapper){ao=c.getParent(an,ai[0].block)}if(!ao){ao=c.getParent(an.nodeType==3?an.parentNode:an,F)}if(ao&&ai[0].wrapper){ao=m(ao,"ul,ol").reverse()[0]||ao}if(!ao){ao=an;while(ao[am]&&!F(ao[am])){ao=ao[am];if(g(ao,"br")){break}}}return ao||an}Y=X(Y,"previousSibling");al=X(al,"nextSibling");if(ai[0].block){if(!F(Y)){Y=aj(true)}if(!F(al)){al=aj()}}}if(Y.nodeType==1){ad=s(Y);Y=Y.parentNode}if(al.nodeType==1){af=s(al)+1;al=al.parentNode}return{startContainer:Y,startOffset:ad,endContainer:al,endOffset:af}}function U(ac,ab,Z,W){var Y,X,aa;if(!h(Z,ac)){return S}if(ac.remove!="all"){P(ac.styles,function(ae,ad){ae=r(ae,ab);if(typeof(ad)==="number"){ad=ae;W=0}if(!W||g(L(W,ad),ae)){c.setStyle(Z,ad,"")}aa=1});if(aa&&c.getAttrib(Z,"style")==""){Z.removeAttribute("style");Z.removeAttribute("data-mce-style")}P(ac.attributes,function(af,ad){var ae;af=r(af,ab);if(typeof(ad)==="number"){ad=af;W=0}if(!W||g(c.getAttrib(W,ad),af)){if(ad=="class"){af=c.getAttrib(Z,ad);if(af){ae="";P(af.split(/\s+/),function(ag){if(/mce\w+/.test(ag)){ae+=(ae?" ":"")+ag}});if(ae){c.setAttrib(Z,ad,ae);return}}}if(ad=="class"){Z.removeAttribute("className")}if(e.test(ad)){Z.removeAttribute("data-mce-"+ad)}Z.removeAttribute(ad)}});P(ac.classes,function(ad){ad=r(ad,ab);if(!W||c.hasClass(W,ad)){c.removeClass(Z,ad)}});X=c.getAttribs(Z);for(Y=0;Y<X.length;Y++){if(X[Y].nodeName.indexOf("_")!==0){return S}}}if(ac.remove!="none"){n(Z,ac);return B}}function n(Y,Z){var W=Y.parentNode,X;if(Z.block){if(!l){function aa(ac,ab,ad){ac=C(ac,ab,ad);return !ac||(ac.nodeName=="BR"||F(ac))}if(F(Y)&&!F(W)){if(!aa(Y,S)&&!aa(Y.firstChild,B,1)){Y.insertBefore(c.create("br"),Y.firstChild)}if(!aa(Y,B)&&!aa(Y.lastChild,S,1)){Y.appendChild(c.create("br"))}}}else{if(W==c.getRoot()){if(!Z.list_block||!g(Y,Z.list_block)){P(a.grep(Y.childNodes),function(ab){if(d(l,ab.nodeName.toLowerCase())){if(!X){X=O(ab,l)}else{X.appendChild(ab)}}else{X=0}})}}}}if(Z.selector&&Z.inline&&!g(Z.inline,Y)){return}c.remove(Y,1)}function C(X,W,Y){if(X){W=W?"nextSibling":"previousSibling";for(X=Y?X:X[W];X;X=X[W]){if(X.nodeType==1||!f(X)){return X}}}}function H(W){return W&&W.nodeType==1&&W.getAttribute("data-mce-type")=="bookmark"}function u(aa,Z){var W,Y,X;function ac(af,ae){if(af.nodeName!=ae.nodeName){return S}function ad(ah){var ai={};P(c.getAttribs(ah),function(aj){var ak=aj.nodeName.toLowerCase();if(ak.indexOf("_")!==0&&ak!=="style"){ai[ak]=c.getAttrib(ah,ak)}});return ai}function ag(ak,aj){var ai,ah;for(ah in ak){if(ak.hasOwnProperty(ah)){ai=aj[ah];if(ai===p){return S}if(ak[ah]!=ai){return S}delete aj[ah]}}for(ah in aj){if(aj.hasOwnProperty(ah)){return S}}return B}if(!ag(ad(af),ad(ae))){return S}if(!ag(c.parseStyle(c.getAttrib(af,"style")),c.parseStyle(c.getAttrib(ae,"style")))){return S}return B}if(aa&&Z){function ab(ae,ad){for(Y=ae;Y;Y=Y[ad]){if(Y.nodeType==3&&Y.nodeValue.length!==0){return ae}if(Y.nodeType==1&&!H(Y)){return Y}}return ae}aa=ab(aa,"previousSibling");Z=ab(Z,"nextSibling");if(ac(aa,Z)){for(Y=aa.nextSibling;Y&&Y!=Z;){X=Y;Y=Y.nextSibling;aa.appendChild(X)}c.remove(Z);P(a.grep(Z.childNodes),function(ad){aa.appendChild(ad)});return aa}}return Z}function G(W){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(W)}function J(X,ab){var W,aa,Y,Z;W=X[ab?"startContainer":"endContainer"];aa=X[ab?"startOffset":"endOffset"];if(W.nodeType==1){Y=W.childNodes.length-1;if(!ab&&aa){aa--}W=W.childNodes[aa>Y?Y:aa]}if(W.nodeType===3&&ab&&aa>=W.nodeValue.length){W=new t(W,V.getBody()).next()||W}if(W.nodeType===3&&!ab&&aa==0){W=new t(W,V.getBody()).prev()||W}return W}function Q(af,W,ad){var ai,ag="_mce_caret",X=V.settings.caret_debug;ai=a.isGecko?"\u200B":E;function Y(ak){var aj=c.create("span",{id:ag,"data-mce-bogus":true,style:X?"color:red":""});if(ak){aj.appendChild(V.getDoc().createTextNode(ai))}return aj}function ae(ak,aj){while(ak){if((ak.nodeType===3&&ak.nodeValue!==ai)||ak.childNodes.length>1){return false}if(aj&&ak.nodeType===1){aj.push(ak)}ak=ak.firstChild}return true}function ab(aj){while(aj){if(aj.id===ag){return aj}aj=aj.parentNode}}function aa(aj){var ak;if(aj){ak=new t(aj,aj);for(aj=ak.current();aj;aj=ak.next()){if(aj.nodeType===3){return aj}}}}function Z(al,ak){var am,aj;if(!al){al=ab(q.getStart());if(!al){while(al=c.get(ag)){Z(al,false)}}}else{aj=q.getRng(true);if(ae(al)){if(ak!==false){aj.setStartBefore(al);aj.setEndBefore(al)}c.remove(al)}else{am=aa(al);if(am.nodeValue.charAt(0)===E){am=am.deleteData(0,1)}c.remove(al,1)}q.setRng(aj)}}function ac(){var al,aj,ap,ao,am,ak,an;al=q.getRng(true);ao=al.startOffset;ak=al.startContainer;an=ak.nodeValue;aj=ab(q.getStart());if(aj){ap=aa(aj)}if(an&&ao>0&&ao<an.length&&/\w/.test(an.charAt(ao))&&/\w/.test(an.charAt(ao-1))){am=q.getBookmark();al.collapse(true);al=o(al,R(W));al=K.split(al);T(W,ad,al);q.moveToBookmark(am)}else{if(!aj||ap.nodeValue!==ai){aj=Y(true);ap=aj.firstChild;al.insertNode(aj);ao=1;T(W,ad,aj)}else{T(W,ad,aj)}q.setCursorLocation(ap,ao)}}function ah(){var aj=q.getRng(true),ak,am,ap,ao,al,at,ar=[],an,aq;ak=aj.startContainer;am=aj.startOffset;al=ak;if(ak.nodeType==3){if(am!=ak.nodeValue.length||ak.nodeValue===ai){ao=true}al=al.parentNode}while(al){if(x(al,W,ad)){at=al;break}if(al.nextSibling){ao=true}ar.push(al);al=al.parentNode}if(!at){return}if(ao){ap=q.getBookmark();aj.collapse(true);aj=o(aj,R(W),true);aj=K.split(aj);A(W,ad,aj);q.moveToBookmark(ap)}else{aq=Y();al=aq;for(an=ar.length-1;an>=0;an--){al.appendChild(ar[an].cloneNode(false));al=al.firstChild}al.appendChild(c.doc.createTextNode(ai));al=al.firstChild;c.insertAfter(aq,at);q.setCursorLocation(al,1)}}if(!self._hasCaretEvents){V.onBeforeGetContent.addToTop(function(){var aj=[],ak;if(ae(ab(q.getStart()),aj)){ak=aj.length;while(ak--){c.setAttrib(aj[ak],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(aj){V[aj].addToTop(function(){Z()})});V.onKeyDown.addToTop(function(aj,al){var ak=al.keyCode;if(ak==8||ak==37||ak==39){Z(ab(q.getStart()))}});self._hasCaretEvents=true}if(af=="apply"){ac()}else{ah()}}function N(X){var W=X.startContainer,ac=X.startOffset,ab,aa,Y,Z;if(W.nodeType==3&&ac>=W.nodeValue.length-1){W=W.parentNode;ac=s(W)+1}if(W.nodeType==1){Y=W.childNodes;W=Y[Math.min(ac,Y.length-1)];ab=new t(W);if(ac>Y.length-1){ab.next()}for(aa=ab.current();aa;aa=ab.next()){if(aa.nodeType==3&&!f(aa)){Z=c.create("a",null,E);aa.parentNode.insertBefore(Z,aa);X.setStart(aa,0);q.setRng(X);c.remove(Z);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_legacy_values);function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});
+

--- a/tinymce/jscripts/tiny_mce/tiny_mce_popup.js
+++ /dev/null
@@ -1,5 +1,1 @@
 
-// Uncomment and change this document.domain value if you are loading the script cross subdomains
-// document.domain = 'moxiecode.com';
-
-var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}if(!b.editor.getParam("browser_preferred_colors",false)||!b.isWindow){b.dom.addClass(document.body,"forceColors")}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait();

--- a/tinymce/jscripts/tiny_mce/tiny_mce_src.js
+++ /dev/null
@@ -1,16803 +1,1 @@
-(function(win) {

-	var whiteSpaceRe = /^\s*|\s*$/g,

-		undefined, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';

-

-	var tinymce = {

-		majorVersion : '3',

-

-		minorVersion : '4.8',

-

-		releaseDate : '2012-02-02',

-

-		_init : function() {

-			var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;

-

-			t.isOpera = win.opera && opera.buildNumber;

-

-			t.isWebKit = /WebKit/.test(ua);

-

-			t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);

-

-			t.isIE6 = t.isIE && /MSIE [56]/.test(ua);

-

-			t.isIE7 = t.isIE && /MSIE [7]/.test(ua);

-

-			t.isIE8 = t.isIE && /MSIE [8]/.test(ua);

-

-			t.isIE9 = t.isIE && /MSIE [9]/.test(ua);

-

-			t.isGecko = !t.isWebKit && /Gecko/.test(ua);

-

-			t.isMac = ua.indexOf('Mac') != -1;

-

-			t.isAir = /adobeair/i.test(ua);

-

-			t.isIDevice = /(iPad|iPhone)/.test(ua);

-			

-			t.isIOS5 = t.isIDevice && ua.match(/AppleWebKit\/(\d*)/)[1]>=534;

-

-			// TinyMCE .NET webcontrol might be setting the values for TinyMCE

-			if (win.tinyMCEPreInit) {

-				t.suffix = tinyMCEPreInit.suffix;

-				t.baseURL = tinyMCEPreInit.base;

-				t.query = tinyMCEPreInit.query;

-				return;

-			}

-

-			// Get suffix and base

-			t.suffix = '';

-

-			// If base element found, add that infront of baseURL

-			nl = d.getElementsByTagName('base');

-			for (i=0; i<nl.length; i++) {

-				if (v = nl[i].href) {

-					// Host only value like http://site.com or http://site.com:8008

-					if (/^https?:\/\/[^\/]+$/.test(v))

-						v += '/';

-

-					base = v ? v.match(/.*\//)[0] : ''; // Get only directory

-				}

-			}

-

-			function getBase(n) {

-				if (n.src && /tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(n.src)) {

-					if (/_(src|dev)\.js/g.test(n.src))

-						t.suffix = '_src';

-

-					if ((p = n.src.indexOf('?')) != -1)

-						t.query = n.src.substring(p + 1);

-

-					t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));

-

-					// If path to script is relative and a base href was found add that one infront

-					// the src property will always be an absolute one on non IE browsers and IE 8

-					// so this logic will basically only be executed on older IE versions

-					if (base && t.baseURL.indexOf('://') == -1 && t.baseURL.indexOf('/') !== 0)

-						t.baseURL = base + t.baseURL;

-

-					return t.baseURL;

-				}

-

-				return null;

-			};

-

-			// Check document

-			nl = d.getElementsByTagName('script');

-			for (i=0; i<nl.length; i++) {

-				if (getBase(nl[i]))

-					return;

-			}

-

-			// Check head

-			n = d.getElementsByTagName('head')[0];

-			if (n) {

-				nl = n.getElementsByTagName('script');

-				for (i=0; i<nl.length; i++) {

-					if (getBase(nl[i]))

-						return;

-				}

-			}

-

-			return;

-		},

-

-		is : function(o, t) {

-			if (!t)

-				return o !== undefined;

-

-			if (t == 'array' && (o.hasOwnProperty && o instanceof Array))

-				return true;

-

-			return typeof(o) == t;

-		},

-

-		makeMap : function(items, delim, map) {

-			var i;

-

-			items = items || [];

-			delim = delim || ',';

-

-			if (typeof(items) == "string")

-				items = items.split(delim);

-

-			map = map || {};

-

-			i = items.length;

-			while (i--)

-				map[items[i]] = {};

-

-			return map;

-		},

-

-		each : function(o, cb, s) {

-			var n, l;

-

-			if (!o)

-				return 0;

-

-			s = s || o;

-

-			if (o.length !== undefined) {

-				// Indexed arrays, needed for Safari

-				for (n=0, l = o.length; n < l; n++) {

-					if (cb.call(s, o[n], n, o) === false)

-						return 0;

-				}

-			} else {

-				// Hashtables

-				for (n in o) {

-					if (o.hasOwnProperty(n)) {

-						if (cb.call(s, o[n], n, o) === false)

-							return 0;

-					}

-				}

-			}

-

-			return 1;

-		},

-

-

-		map : function(a, f) {

-			var o = [];

-

-			tinymce.each(a, function(v) {

-				o.push(f(v));

-			});

-

-			return o;

-		},

-

-		grep : function(a, f) {

-			var o = [];

-

-			tinymce.each(a, function(v) {

-				if (!f || f(v))

-					o.push(v);

-			});

-

-			return o;

-		},

-

-		inArray : function(a, v) {

-			var i, l;

-

-			if (a) {

-				for (i = 0, l = a.length; i < l; i++) {

-					if (a[i] === v)

-						return i;

-				}

-			}

-

-			return -1;

-		},

-

-		extend : function(o, e) {

-			var i, l, a = arguments;

-

-			for (i = 1, l = a.length; i < l; i++) {

-				e = a[i];

-

-				tinymce.each(e, function(v, n) {

-					if (v !== undefined)

-						o[n] = v;

-				});

-			}

-

-			return o;

-		},

-

-

-		trim : function(s) {

-			return (s ? '' + s : '').replace(whiteSpaceRe, '');

-		},

-

-		create : function(s, p, root) {

-			var t = this, sp, ns, cn, scn, c, de = 0;

-

-			// Parse : <prefix> <class>:<super class>

-			s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);

-			cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name

-

-			// Create namespace for new class

-			ns = t.createNS(s[3].replace(/\.\w+$/, ''), root);

-

-			// Class already exists

-			if (ns[cn])

-				return;

-

-			// Make pure static class

-			if (s[2] == 'static') {

-				ns[cn] = p;

-

-				if (this.onCreate)

-					this.onCreate(s[2], s[3], ns[cn]);

-

-				return;

-			}

-

-			// Create default constructor

-			if (!p[cn]) {

-				p[cn] = function() {};

-				de = 1;

-			}

-

-			// Add constructor and methods

-			ns[cn] = p[cn];

-			t.extend(ns[cn].prototype, p);

-

-			// Extend

-			if (s[5]) {

-				sp = t.resolve(s[5]).prototype;

-				scn = s[5].match(/\.(\w+)$/i)[1]; // Class name

-

-				// Extend constructor

-				c = ns[cn];

-				if (de) {

-					// Add passthrough constructor

-					ns[cn] = function() {

-						return sp[scn].apply(this, arguments);

-					};

-				} else {

-					// Add inherit constructor

-					ns[cn] = function() {

-						this.parent = sp[scn];

-						return c.apply(this, arguments);

-					};

-				}

-				ns[cn].prototype[cn] = ns[cn];

-

-				// Add super methods

-				t.each(sp, function(f, n) {

-					ns[cn].prototype[n] = sp[n];

-				});

-

-				// Add overridden methods

-				t.each(p, function(f, n) {

-					// Extend methods if needed

-					if (sp[n]) {

-						ns[cn].prototype[n] = function() {

-							this.parent = sp[n];

-							return f.apply(this, arguments);

-						};

-					} else {

-						if (n != cn)

-							ns[cn].prototype[n] = f;

-					}

-				});

-			}

-

-			// Add static methods

-			t.each(p['static'], function(f, n) {

-				ns[cn][n] = f;

-			});

-

-			if (this.onCreate)

-				this.onCreate(s[2], s[3], ns[cn].prototype);

-		},

-

-		walk : function(o, f, n, s) {

-			s = s || this;

-

-			if (o) {

-				if (n)

-					o = o[n];

-

-				tinymce.each(o, function(o, i) {

-					if (f.call(s, o, i, n) === false)

-						return false;

-

-					tinymce.walk(o, f, n, s);

-				});

-			}

-		},

-

-		createNS : function(n, o) {

-			var i, v;

-

-			o = o || win;

-

-			n = n.split('.');

-			for (i=0; i<n.length; i++) {

-				v = n[i];

-

-				if (!o[v])

-					o[v] = {};

-

-				o = o[v];

-			}

-

-			return o;

-		},

-

-		resolve : function(n, o) {

-			var i, l;

-

-			o = o || win;

-

-			n = n.split('.');

-			for (i = 0, l = n.length; i < l; i++) {

-				o = o[n[i]];

-

-				if (!o)

-					break;

-			}

-

-			return o;

-		},

-

-		addUnload : function(f, s) {

-			var t = this;

-

-			f = {func : f, scope : s || this};

-

-			if (!t.unloads) {

-				function unload() {

-					var li = t.unloads, o, n;

-

-					if (li) {

-						// Call unload handlers

-						for (n in li) {

-							o = li[n];

-

-							if (o && o.func)

-								o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy

-						}

-

-						// Detach unload function

-						if (win.detachEvent) {

-							win.detachEvent('onbeforeunload', fakeUnload);

-							win.detachEvent('onunload', unload);

-						} else if (win.removeEventListener)

-							win.removeEventListener('unload', unload, false);

-

-						// Destroy references

-						t.unloads = o = li = w = unload = 0;

-

-						// Run garbarge collector on IE

-						if (win.CollectGarbage)

-							CollectGarbage();

-					}

-				};

-

-				function fakeUnload() {

-					var d = document;

-

-					// Is there things still loading, then do some magic

-					if (d.readyState == 'interactive') {

-						function stop() {

-							// Prevent memory leak

-							d.detachEvent('onstop', stop);

-

-							// Call unload handler

-							if (unload)

-								unload();

-

-							d = 0;

-						};

-

-						// Fire unload when the currently loading page is stopped

-						if (d)

-							d.attachEvent('onstop', stop);

-

-						// Remove onstop listener after a while to prevent the unload function

-						// to execute if the user presses cancel in an onbeforeunload

-						// confirm dialog and then presses the browser stop button

-						win.setTimeout(function() {

-							if (d)

-								d.detachEvent('onstop', stop);

-						}, 0);

-					}

-				};

-

-				// Attach unload handler

-				if (win.attachEvent) {

-					win.attachEvent('onunload', unload);

-					win.attachEvent('onbeforeunload', fakeUnload);

-				} else if (win.addEventListener)

-					win.addEventListener('unload', unload, false);

-

-				// Setup initial unload handler array

-				t.unloads = [f];

-			} else

-				t.unloads.push(f);

-

-			return f;

-		},

-

-		removeUnload : function(f) {

-			var u = this.unloads, r = null;

-

-			tinymce.each(u, function(o, i) {

-				if (o && o.func == f) {

-					u.splice(i, 1);

-					r = f;

-					return false;

-				}

-			});

-

-			return r;

-		},

-

-		explode : function(s, d) {

-			return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;

-		},

-

-		_addVer : function(u) {

-			var v;

-

-			if (!this.query)

-				return u;

-

-			v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;

-

-			if (u.indexOf('#') == -1)

-				return u + v;

-

-			return u.replace('#', v + '#');

-		},

-

-		// Fix function for IE 9 where regexps isn't working correctly

-		// Todo: remove me once MS fixes the bug

-		_replace : function(find, replace, str) {

-			// On IE9 we have to fake $x replacement

-			if (isRegExpBroken) {

-				return str.replace(find, function() {

-					var val = replace, args = arguments, i;

-

-					for (i = 0; i < args.length - 2; i++) {

-						if (args[i] === undefined) {

-							val = val.replace(new RegExp('\\$' + i, 'g'), '');

-						} else {

-							val = val.replace(new RegExp('\\$' + i, 'g'), args[i]);

-						}

-					}

-

-					return val;

-				});

-			}

-

-			return str.replace(find, replace);

-		}

-

-		};

-

-	// Initialize the API

-	tinymce._init();

-

-	// Expose tinymce namespace to the global namespace (window)

-	win.tinymce = win.tinyMCE = tinymce;

-

-	// Describe the different namespaces

-

-	})(window);

-

-

-

-tinymce.create('tinymce.util.Dispatcher', {

-	scope : null,

-	listeners : null,

-

-	Dispatcher : function(s) {

-		this.scope = s || this;

-		this.listeners = [];

-	},

-

-	add : function(cb, s) {

-		this.listeners.push({cb : cb, scope : s || this.scope});

-

-		return cb;

-	},

-

-	addToTop : function(cb, s) {

-		this.listeners.unshift({cb : cb, scope : s || this.scope});

-

-		return cb;

-	},

-

-	remove : function(cb) {

-		var l = this.listeners, o = null;

-

-		tinymce.each(l, function(c, i) {

-			if (cb == c.cb) {

-				o = cb;

-				l.splice(i, 1);

-				return false;

-			}

-		});

-

-		return o;

-	},

-

-	dispatch : function() {

-		var s, a = arguments, i, li = this.listeners, c;

-

-		// Needs to be a real loop since the listener count might change while looping

-		// And this is also more efficient

-		for (i = 0; i<li.length; i++) {

-			c = li[i];

-			s = c.cb.apply(c.scope, a.length > 0 ? a : [c.scope]);

-

-			if (s === false)

-				break;

-		}

-

-		return s;

-	}

-

-	});

-

-(function() {

-	var each = tinymce.each;

-

-	tinymce.create('tinymce.util.URI', {

-		URI : function(u, s) {

-			var t = this, o, a, b, base_url;

-

-			// Trim whitespace

-			u = tinymce.trim(u);

-

-			// Default settings

-			s = t.settings = s || {};

-

-			// Strange app protocol that isn't http/https or local anchor

-			// For example: mailto,skype,tel etc.

-			if (/^([\w\-]+):([^\/]{2})/i.test(u) || /^\s*#/.test(u)) {

-				t.source = u;

-				return;

-			}

-

-			// Absolute path with no host, fake host and protocol

-			if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)

-				u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;

-

-			// Relative path http:// or protocol relative //path

-			if (!/^[\w-]*:?\/\//.test(u)) {

-				base_url = s.base_uri ? s.base_uri.path : new tinymce.util.URI(location.href).directory;

-				u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u);

-			}

-

-			// Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)

-			u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something

-			u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);

-			each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) {

-				var s = u[i];

-

-				// Zope 3 workaround, they use @@something

-				if (s)

-					s = s.replace(/\(mce_at\)/g, '@@');

-

-				t[v] = s;

-			});

-

-			if (b = s.base_uri) {

-				if (!t.protocol)

-					t.protocol = b.protocol;

-

-				if (!t.userInfo)

-					t.userInfo = b.userInfo;

-

-				if (!t.port && t.host == 'mce_host')

-					t.port = b.port;

-

-				if (!t.host || t.host == 'mce_host')

-					t.host = b.host;

-

-				t.source = '';

-			}

-

-			//t.path = t.path || '/';

-		},

-

-		setPath : function(p) {

-			var t = this;

-

-			p = /^(.*?)\/?(\w+)?$/.exec(p);

-

-			// Update path parts

-			t.path = p[0];

-			t.directory = p[1];

-			t.file = p[2];

-

-			// Rebuild source

-			t.source = '';

-			t.getURI();

-		},

-

-		toRelative : function(u) {

-			var t = this, o;

-

-			if (u === "./")

-				return u;

-

-			u = new tinymce.util.URI(u, {base_uri : t});

-

-			// Not on same domain/port or protocol

-			if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)

-				return u.getURI();

-

-			o = t.toRelPath(t.path, u.path);

-

-			// Add query

-			if (u.query)

-				o += '?' + u.query;

-

-			// Add anchor

-			if (u.anchor)

-				o += '#' + u.anchor;

-

-			return o;

-		},

-	

-		toAbsolute : function(u, nh) {

-			var u = new tinymce.util.URI(u, {base_uri : this});

-

-			return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0);

-		},

-

-		toRelPath : function(base, path) {

-			var items, bp = 0, out = '', i, l;

-

-			// Split the paths

-			base = base.substring(0, base.lastIndexOf('/'));

-			base = base.split('/');

-			items = path.split('/');

-

-			if (base.length >= items.length) {

-				for (i = 0, l = base.length; i < l; i++) {

-					if (i >= items.length || base[i] != items[i]) {

-						bp = i + 1;

-						break;

-					}

-				}

-			}

-

-			if (base.length < items.length) {

-				for (i = 0, l = items.length; i < l; i++) {

-					if (i >= base.length || base[i] != items[i]) {

-						bp = i + 1;

-						break;

-					}

-				}

-			}

-

-			if (bp == 1)

-				return path;

-

-			for (i = 0, l = base.length - (bp - 1); i < l; i++)

-				out += "../";

-

-			for (i = bp - 1, l = items.length; i < l; i++) {

-				if (i != bp - 1)

-					out += "/" + items[i];

-				else

-					out += items[i];

-			}

-

-			return out;

-		},

-

-		toAbsPath : function(base, path) {

-			var i, nb = 0, o = [], tr, outPath;

-

-			// Split paths

-			tr = /\/$/.test(path) ? '/' : '';

-			base = base.split('/');

-			path = path.split('/');

-

-			// Remove empty chunks

-			each(base, function(k) {

-				if (k)

-					o.push(k);

-			});

-

-			base = o;

-

-			// Merge relURLParts chunks

-			for (i = path.length - 1, o = []; i >= 0; i--) {

-				// Ignore empty or .

-				if (path[i].length == 0 || path[i] == ".")

-					continue;

-

-				// Is parent

-				if (path[i] == '..') {

-					nb++;

-					continue;

-				}

-

-				// Move up

-				if (nb > 0) {

-					nb--;

-					continue;

-				}

-

-				o.push(path[i]);

-			}

-

-			i = base.length - nb;

-

-			// If /a/b/c or /

-			if (i <= 0)

-				outPath = o.reverse().join('/');

-			else

-				outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');

-

-			// Add front / if it's needed

-			if (outPath.indexOf('/') !== 0)

-				outPath = '/' + outPath;

-

-			// Add traling / if it's needed

-			if (tr && outPath.lastIndexOf('/') !== outPath.length - 1)

-				outPath += tr;

-

-			return outPath;

-		},

-

-		getURI : function(nh) {

-			var s, t = this;

-

-			// Rebuild source

-			if (!t.source || nh) {

-				s = '';

-

-				if (!nh) {

-					if (t.protocol)

-						s += t.protocol + '://';

-

-					if (t.userInfo)

-						s += t.userInfo + '@';

-

-					if (t.host)

-						s += t.host;

-

-					if (t.port)

-						s += ':' + t.port;

-				}

-

-				if (t.path)

-					s += t.path;

-

-				if (t.query)

-					s += '?' + t.query;

-

-				if (t.anchor)

-					s += '#' + t.anchor;

-

-				t.source = s;

-			}

-

-			return t.source;

-		}

-	});

-})();

-

-(function() {

-	var each = tinymce.each;

-

-	tinymce.create('static tinymce.util.Cookie', {

-		getHash : function(n) {

-			var v = this.get(n), h;

-

-			if (v) {

-				each(v.split('&'), function(v) {

-					v = v.split('=');

-					h = h || {};

-					h[unescape(v[0])] = unescape(v[1]);

-				});

-			}

-

-			return h;

-		},

-

-		setHash : function(n, v, e, p, d, s) {

-			var o = '';

-

-			each(v, function(v, k) {

-				o += (!o ? '' : '&') + escape(k) + '=' + escape(v);

-			});

-

-			this.set(n, o, e, p, d, s);

-		},

-

-		get : function(n) {

-			var c = document.cookie, e, p = n + "=", b;

-

-			// Strict mode

-			if (!c)

-				return;

-

-			b = c.indexOf("; " + p);

-

-			if (b == -1) {

-				b = c.indexOf(p);

-

-				if (b != 0)

-					return null;

-			} else

-				b += 2;

-

-			e = c.indexOf(";", b);

-

-			if (e == -1)

-				e = c.length;

-

-			return unescape(c.substring(b + p.length, e));

-		},

-

-		set : function(n, v, e, p, d, s) {

-			document.cookie = n + "=" + escape(v) +

-				((e) ? "; expires=" + e.toGMTString() : "") +

-				((p) ? "; path=" + escape(p) : "") +

-				((d) ? "; domain=" + d : "") +

-				((s) ? "; secure" : "");

-		},

-

-		remove : function(n, p) {

-			var d = new Date();

-

-			d.setTime(d.getTime() - 1000);

-

-			this.set(n, '', d, p, d);

-		}

-	});

-})();

-

-(function() {

-	function serialize(o, quote) {

-		var i, v, t;

-

-		quote = quote || '"';

-

-		if (o == null)

-			return 'null';

-

-		t = typeof o;

-

-		if (t == 'string') {

-			v = '\bb\tt\nn\ff\rr\""\'\'\\\\';

-

-			return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) {

-				// Make sure single quotes never get encoded inside double quotes for JSON compatibility

-				if (quote === '"' && a === "'")

-					return a;

-

-				i = v.indexOf(b);

-

-				if (i + 1)

-					return '\\' + v.charAt(i + 1);

-

-				a = b.charCodeAt().toString(16);

-

-				return '\\u' + '0000'.substring(a.length) + a;

-			}) + quote;

-		}

-

-		if (t == 'object') {

-			if (o.hasOwnProperty && o instanceof Array) {

-					for (i=0, v = '['; i<o.length; i++)

-						v += (i > 0 ? ',' : '') + serialize(o[i], quote);

-

-					return v + ']';

-				}

-

-				v = '{';

-

-				for (i in o) {

-					if (o.hasOwnProperty(i)) {

-						v += typeof o[i] != 'function' ? (v.length > 1 ? ',' + quote : quote) + i + quote +':' + serialize(o[i], quote) : '';

-					}

-				}

-

-				return v + '}';

-		}

-

-		return '' + o;

-	};

-

-	tinymce.util.JSON = {

-		serialize: serialize,

-

-		parse: function(s) {

-			try {

-				return eval('(' + s + ')');

-			} catch (ex) {

-				// Ignore

-			}

-		}

-

-		};

-})();

-

-tinymce.create('static tinymce.util.XHR', {

-	send : function(o) {

-		var x, t, w = window, c = 0;

-

-		// Default settings

-		o.scope = o.scope || this;

-		o.success_scope = o.success_scope || o.scope;

-		o.error_scope = o.error_scope || o.scope;

-		o.async = o.async === false ? false : true;

-		o.data = o.data || '';

-

-		function get(s) {

-			x = 0;

-

-			try {

-				x = new ActiveXObject(s);

-			} catch (ex) {

-			}

-

-			return x;

-		};

-

-		x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP');

-

-		if (x) {

-			if (x.overrideMimeType)

-				x.overrideMimeType(o.content_type);

-

-			x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async);

-

-			if (o.content_type)

-				x.setRequestHeader('Content-Type', o.content_type);

-

-			x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

-

-			x.send(o.data);

-

-			function ready() {

-				if (!o.async || x.readyState == 4 || c++ > 10000) {

-					if (o.success && c < 10000 && x.status == 200)

-						o.success.call(o.success_scope, '' + x.responseText, x, o);

-					else if (o.error)

-						o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);

-

-					x = null;

-				} else

-					w.setTimeout(ready, 10);

-			};

-

-			// Syncronous request

-			if (!o.async)

-				return ready();

-

-			// Wait for response, onReadyStateChange can not be used since it leaks memory in IE

-			t = w.setTimeout(ready, 10);

-		}

-	}

-});

-

-(function() {

-	var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;

-

-	tinymce.create('tinymce.util.JSONRequest', {

-		JSONRequest : function(s) {

-			this.settings = extend({

-			}, s);

-			this.count = 0;

-		},

-

-		send : function(o) {

-			var ecb = o.error, scb = o.success;

-

-			o = extend(this.settings, o);

-

-			o.success = function(c, x) {

-				c = JSON.parse(c);

-

-				if (typeof(c) == 'undefined') {

-					c = {

-						error : 'JSON Parse error.'

-					};

-				}

-

-				if (c.error)

-					ecb.call(o.error_scope || o.scope, c.error, x);

-				else

-					scb.call(o.success_scope || o.scope, c.result);

-			};

-

-			o.error = function(ty, x) {

-				if (ecb)

-					ecb.call(o.error_scope || o.scope, ty, x);

-			};

-

-			o.data = JSON.serialize({

-				id : o.id || 'c' + (this.count++),

-				method : o.method,

-				params : o.params

-			});

-

-			// JSON content type for Ruby on rails. Bug: #1883287

-			o.content_type = 'application/json';

-

-			XHR.send(o);

-		},

-

-		'static' : {

-			sendRPC : function(o) {

-				return new tinymce.util.JSONRequest().send(o);

-			}

-		}

-	});

-}());

-(function(tinymce){

-	tinymce.VK = {

-		DELETE: 46,

-		BACKSPACE: 8,

-		ENTER: 13,

-		TAB: 9,

-        SPACEBAR: 32,

-		UP: 38,

-		DOWN: 40,

-		modifierPressed: function (e) {

-			return e.shiftKey || e.ctrlKey || e.altKey;

-		}

-	}

-})(tinymce);

-

-(function(tinymce) {

-	var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE;

-

-	function cleanupStylesWhenDeleting(ed) {

-		var dom = ed.dom, selection = ed.selection;

-

-		ed.onKeyDown.add(function(ed, e) {

-			var rng, blockElm, node, clonedSpan, isDelete;

-

-			isDelete = e.keyCode == DELETE;

-			if ((isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) {

-				e.preventDefault();

-				rng = selection.getRng();

-

-				// Find root block

-				blockElm = dom.getParent(rng.startContainer, dom.isBlock);

-

-				// On delete clone the root span of the next block element

-				if (isDelete)

-					blockElm = dom.getNext(blockElm, dom.isBlock);

-

-				// Locate root span element and clone it since it would otherwise get merged by the "apple-style-span" on delete/backspace

-				if (blockElm) {

-					node = blockElm.firstChild;

-

-					// Ignore empty text nodes

-					while (node && node.nodeType == 3 && node.nodeValue.length == 0)

-						node = node.nextSibling;

-

-					if (node && node.nodeName === 'SPAN') {

-						clonedSpan = node.cloneNode(false);

-					}

-				}

-

-				// Do the backspace/delete actiopn

-				ed.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);

-

-				// Find all odd apple-style-spans

-				blockElm = dom.getParent(rng.startContainer, dom.isBlock);

-				tinymce.each(dom.select('span.Apple-style-span,font.Apple-style-span', blockElm), function(span) {

-					var bm = selection.getBookmark();

-

-					if (clonedSpan) {

-						dom.replace(clonedSpan.cloneNode(false), span, true);

-					} else {

-						dom.remove(span, true);

-					}

-

-					// Restore the selection

-					selection.moveToBookmark(bm);

-				});

-			}

-		});

-	};

-

-	function emptyEditorWhenDeleting(ed) {

-		ed.onKeyUp.add(function(ed, e) {

-			var keyCode = e.keyCode;

-

-			if (keyCode == DELETE || keyCode == BACKSPACE) {

-				if (ed.dom.isEmpty(ed.getBody())) {

-					ed.setContent('', {format : 'raw'});

-					ed.nodeChanged();

-					return;

-				}

-			}

-		});

-	};

-

-	function inputMethodFocus(ed) {

-		ed.dom.bind(ed.getDoc(), 'focusin', function() {

-			ed.selection.setRng(ed.selection.getRng());

-		});

-	};

-

-	function removeHrOnBackspace(ed) {

-		ed.onKeyDown.add(function(ed, e) {

-			if (e.keyCode === BACKSPACE) {

-				if (ed.selection.isCollapsed() && ed.selection.getRng(true).startOffset === 0) {

-					var node = ed.selection.getNode();

-					var previousSibling = node.previousSibling;

-					if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") {

-						ed.dom.remove(previousSibling);

-						tinymce.dom.Event.cancel(e);

-					}

-				}

-			}

-		})

-	}

-

-	function focusBody(ed) {

-		// Fix for a focus bug in FF 3.x where the body element

-		// wouldn't get proper focus if the user clicked on the HTML element

-		if (!Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4

-			ed.onMouseDown.add(function(ed, e) {

-				if (e.target.nodeName === "HTML") {

-					var body = ed.getBody();

-

-					// Blur the body it's focused but not correctly focused

-					body.blur();

-

-					// Refocus the body after a little while

-					setTimeout(function() {

-						body.focus();

-					}, 0);

-				}

-			});

-		}

-	};

-

-	function selectControlElements(ed) {

-		ed.onClick.add(function(ed, e) {

-			e = e.target;

-

-			// Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250

-			// WebKit can't even do simple things like selecting an image

-			// Needs tobe the setBaseAndExtend or it will fail to select floated images

-			if (/^(IMG|HR)$/.test(e.nodeName))

-				ed.selection.getSel().setBaseAndExtent(e, 0, e, 1);

-

-			if (e.nodeName == 'A' && ed.dom.hasClass(e, 'mceItemAnchor'))

-				ed.selection.select(e);

-

-			ed.nodeChanged();

-		});

-	};

-

-	function removeStylesOnPTagsInheritedFromHeadingTag(ed) {

-		ed.onKeyDown.add(function(ed, event) {

-			function checkInHeadingTag(ed) {

-				var currentNode = ed.selection.getNode();

-				var headingTags = 'h1,h2,h3,h4,h5,h6';

-				return ed.dom.is(currentNode, headingTags) || ed.dom.getParent(currentNode, headingTags) !== null;

-			}

-

-			if (event.keyCode === VK.ENTER && !VK.modifierPressed(event) && checkInHeadingTag(ed)) {

-				setTimeout(function() {

-					var currentNode = ed.selection.getNode();

-					if (ed.dom.is(currentNode, 'p')) {

-						ed.dom.setAttrib(currentNode, 'style', null);

-						// While tiny's content is correct after this method call, the content shown is not representative of it and needs to be 'repainted'

-						ed.execCommand('mceCleanup');

-					}

-				}, 0);

-			}

-		});

-	}

-	function selectionChangeNodeChanged(ed) {

-		var lastRng, selectionTimer;

-

-		ed.dom.bind(ed.getDoc(), 'selectionchange', function() {

-			if (selectionTimer) {

-				clearTimeout(selectionTimer);

-				selectionTimer = 0;

-			}

-

-			selectionTimer = window.setTimeout(function() {

-				var rng = ed.selection.getRng();

-

-				// Compare the ranges to see if it was a real change or not

-				if (!lastRng || !tinymce.dom.RangeUtils.compareRanges(rng, lastRng)) {

-					ed.nodeChanged();

-					lastRng = rng;

-				}

-			}, 50);

-		});

-	}

-

-	function ensureBodyHasRoleApplication(ed) {

-		document.body.setAttribute("role", "application");

-	}

-	

-	tinymce.create('tinymce.util.Quirks', {

-		Quirks: function(ed) {

-			// WebKit

-			if (tinymce.isWebKit) {

-				cleanupStylesWhenDeleting(ed);

-				emptyEditorWhenDeleting(ed);

-				inputMethodFocus(ed);

-				selectControlElements(ed);

-

-				// iOS

-				if (tinymce.isIDevice) {

-					selectionChangeNodeChanged(ed);

-				}

-			}

-

-			// IE

-			if (tinymce.isIE) {

-				removeHrOnBackspace(ed);

-				emptyEditorWhenDeleting(ed);

-				ensureBodyHasRoleApplication(ed);

-				removeStylesOnPTagsInheritedFromHeadingTag(ed)

-			}

-

-			// Gecko

-			if (tinymce.isGecko) {

-				removeHrOnBackspace(ed);

-				focusBody(ed);

-			}

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var namedEntities, baseEntities, reverseEntities,

-		attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,

-		textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,

-		rawCharsRegExp = /[<>&\"\']/g,

-		entityRegExp = /&(#x|#)?([\w]+);/g,

-		asciiMap = {

-				128 : "\u20AC", 130 : "\u201A", 131 : "\u0192", 132 : "\u201E", 133 : "\u2026", 134 : "\u2020",

-				135 : "\u2021", 136 : "\u02C6", 137 : "\u2030", 138 : "\u0160", 139 : "\u2039", 140 : "\u0152",

-				142 : "\u017D", 145 : "\u2018", 146 : "\u2019", 147 : "\u201C", 148 : "\u201D", 149 : "\u2022",

-				150 : "\u2013", 151 : "\u2014", 152 : "\u02DC", 153 : "\u2122", 154 : "\u0161", 155 : "\u203A",

-				156 : "\u0153", 158 : "\u017E", 159 : "\u0178"

-		};

-

-	// Raw entities

-	baseEntities = {

-		'\"' : '&quot;', // Needs to be escaped since the YUI compressor would otherwise break the code

-		"'" : '&#39;',

-		'<' : '&lt;',

-		'>' : '&gt;',

-		'&' : '&amp;'

-	};

-

-	// Reverse lookup table for raw entities

-	reverseEntities = {

-		'&lt;' : '<',

-		'&gt;' : '>',

-		'&amp;' : '&',

-		'&quot;' : '"',

-		'&apos;' : "'"

-	};

-

-	// Decodes text by using the browser

-	function nativeDecode(text) {

-		var elm;

-

-		elm = document.createElement("div");

-		elm.innerHTML = text;

-

-		return elm.textContent || elm.innerText || text;

-	};

-

-	// Build a two way lookup table for the entities

-	function buildEntitiesLookup(items, radix) {

-		var i, chr, entity, lookup = {};

-

-		if (items) {

-			items = items.split(',');

-			radix = radix || 10;

-

-			// Build entities lookup table

-			for (i = 0; i < items.length; i += 2) {

-				chr = String.fromCharCode(parseInt(items[i], radix));

-

-				// Only add non base entities

-				if (!baseEntities[chr]) {

-					entity = '&' + items[i + 1] + ';';

-					lookup[chr] = entity;

-					lookup[entity] = chr;

-				}

-			}

-

-			return lookup;

-		}

-	};

-

-	// Unpack entities lookup where the numbers are in radix 32 to reduce the size

-	namedEntities = buildEntitiesLookup(

-		'50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' +

-		'5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' +

-		'5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' +

-		'5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' +

-		'68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' +

-		'6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' +

-		'6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' +

-		'75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' +

-		'7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' +

-		'7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' +

-		'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' +

-		'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' +

-		't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' +

-		'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' +

-		'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' +

-		'81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' +

-		'8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' +

-		'8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' +

-		'8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' +

-		'8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' +

-		'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' +

-		'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' +

-		'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' +

-		'80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' +

-		'811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro'

-	, 32);

-

-	tinymce.html = tinymce.html || {};

-

-	tinymce.html.Entities = {

-		encodeRaw : function(text, attr) {

-			return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

-				return baseEntities[chr] || chr;

-			});

-		},

-

-		encodeAllRaw : function(text) {

-			return ('' + text).replace(rawCharsRegExp, function(chr) {

-				return baseEntities[chr] || chr;

-			});

-		},

-

-		encodeNumeric : function(text, attr) {

-			return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

-				// Multi byte sequence convert it to a single entity

-				if (chr.length > 1)

-					return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';';

-

-				return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';

-			});

-		},

-

-		encodeNamed : function(text, attr, entities) {

-			entities = entities || namedEntities;

-

-			return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

-				return baseEntities[chr] || entities[chr] || chr;

-			});

-		},

-

-		getEncodeFunc : function(name, entities) {

-			var Entities = tinymce.html.Entities;

-

-			entities = buildEntitiesLookup(entities) || namedEntities;

-

-			function encodeNamedAndNumeric(text, attr) {

-				return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

-					return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr;

-				});

-			};

-

-			function encodeCustomNamed(text, attr) {

-				return Entities.encodeNamed(text, attr, entities);

-			};

-

-			// Replace + with , to be compatible with previous TinyMCE versions

-			name = tinymce.makeMap(name.replace(/\+/g, ','));

-

-			// Named and numeric encoder

-			if (name.named && name.numeric)

-				return encodeNamedAndNumeric;

-

-			// Named encoder

-			if (name.named) {

-				// Custom names

-				if (entities)

-					return encodeCustomNamed;

-

-				return Entities.encodeNamed;

-			}

-

-			// Numeric

-			if (name.numeric)

-				return Entities.encodeNumeric;

-

-			// Raw encoder

-			return Entities.encodeRaw;

-		},

-

-		decode : function(text) {

-			return text.replace(entityRegExp, function(all, numeric, value) {

-				if (numeric) {

-					value = parseInt(value, numeric.length === 2 ? 16 : 10);

-

-					// Support upper UTF

-					if (value > 0xFFFF) {

-						value -= 0x10000;

-

-						return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF));

-					} else

-						return asciiMap[value] || String.fromCharCode(value);

-				}

-

-				return reverseEntities[all] || namedEntities[all] || nativeDecode(all);

-			});

-		}

-	};

-})(tinymce);

-

-tinymce.html.Styles = function(settings, schema) {

-	var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,

-		urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,

-		styleRegExp = /\s*([^:]+):\s*([^;]+);?/g,

-		trimRightRegExp = /\s+$/,

-		urlColorRegExp = /rgb/,

-		undef, i, encodingLookup = {}, encodingItems;

-

-	settings = settings || {};

-

-	encodingItems = '\\" \\\' \\; \\: ; : \uFEFF'.split(' ');

-	for (i = 0; i < encodingItems.length; i++) {

-		encodingLookup[encodingItems[i]] = '\uFEFF' + i;

-		encodingLookup['\uFEFF' + i] = encodingItems[i];

-	}

-

-	function toHex(match, r, g, b) {

-		function hex(val) {

-			val = parseInt(val).toString(16);

-

-			return val.length > 1 ? val : '0' + val; // 0 -> 00

-		};

-

-		return '#' + hex(r) + hex(g) + hex(b);

-	};

-

-	return {

-		toHex : function(color) {

-			return color.replace(rgbRegExp, toHex);

-		},

-

-		parse : function(css) {

-			var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope || this;

-

-			function compress(prefix, suffix) {

-				var top, right, bottom, left;

-

-				// Get values and check it it needs compressing

-				top = styles[prefix + '-top' + suffix];

-				if (!top)

-					return;

-

-				right = styles[prefix + '-right' + suffix];

-				if (top != right)

-					return;

-

-				bottom = styles[prefix + '-bottom' + suffix];

-				if (right != bottom)

-					return;

-

-				left = styles[prefix + '-left' + suffix];

-				if (bottom != left)

-					return;

-

-				// Compress

-				styles[prefix + suffix] = left;

-				delete styles[prefix + '-top' + suffix];

-				delete styles[prefix + '-right' + suffix];

-				delete styles[prefix + '-bottom' + suffix];

-				delete styles[prefix + '-left' + suffix];

-			};

-

-			function canCompress(key) {

-				var value = styles[key], i;

-

-				if (!value || value.indexOf(' ') < 0)

-					return;

-

-				value = value.split(' ');

-				i = value.length;

-				while (i--) {

-					if (value[i] !== value[0])

-						return false;

-				}

-

-				styles[key] = value[0];

-

-				return true;

-			};

-

-			function compress2(target, a, b, c) {

-				if (!canCompress(a))

-					return;

-

-				if (!canCompress(b))

-					return;

-

-				if (!canCompress(c))

-					return;

-

-				// Compress

-				styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];

-				delete styles[a];

-				delete styles[b];

-				delete styles[c];

-			};

-

-			// Encodes the specified string by replacing all \" \' ; : with _<num>

-			function encode(str) {

-				isEncoded = true;

-

-				return encodingLookup[str];

-			};

-

-			// Decodes the specified string by replacing all _<num> with it's original value \" \' etc

-			// It will also decode the \" \' if keep_slashes is set to fale or omitted

-			function decode(str, keep_slashes) {

-				if (isEncoded) {

-					str = str.replace(/\uFEFF[0-9]/g, function(str) {

-						return encodingLookup[str];

-					});

-				}

-

-				if (!keep_slashes)

-					str = str.replace(/\\([\'\";:])/g, "$1");

-

-				return str;

-			}

-

-			if (css) {

-				// Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing

-				css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) {

-					return str.replace(/[;:]/g, encode);

-				});

-

-				// Parse styles

-				while (matches = styleRegExp.exec(css)) {

-					name = matches[1].replace(trimRightRegExp, '').toLowerCase();

-					value = matches[2].replace(trimRightRegExp, '');

-

-					if (name && value.length > 0) {

-						// Opera will produce 700 instead of bold in their style values

-						if (name === 'font-weight' && value === '700')

-							value = 'bold';

-						else if (name === 'color' || name === 'background-color') // Lowercase colors like RED

-							value = value.toLowerCase();		

-

-						// Convert RGB colors to HEX

-						value = value.replace(rgbRegExp, toHex);

-

-						// Convert URLs and force them into url('value') format

-						value = value.replace(urlOrStrRegExp, function(match, url, url2, url3, str, str2) {

-							str = str || str2;

-

-							if (str) {

-								str = decode(str);

-

-								// Force strings into single quote format

-								return "'" + str.replace(/\'/g, "\\'") + "'";

-							}

-

-							url = decode(url || url2 || url3);

-

-							// Convert the URL to relative/absolute depending on config

-							if (urlConverter)

-								url = urlConverter.call(urlConverterScope, url, 'style');

-

-							// Output new URL format

-							return "url('" + url.replace(/\'/g, "\\'") + "')";

-						});

-

-						styles[name] = isEncoded ? decode(value, true) : value;

-					}

-

-					styleRegExp.lastIndex = matches.index + matches[0].length;

-				}

-

-				// Compress the styles to reduce it's size for example IE will expand styles

-				compress("border", "");

-				compress("border", "-width");

-				compress("border", "-color");

-				compress("border", "-style");

-				compress("padding", "");

-				compress("margin", "");

-				compress2('border', 'border-width', 'border-style', 'border-color');

-

-				// Remove pointless border, IE produces these

-				if (styles.border === 'medium none')

-					delete styles.border;

-			}

-

-			return styles;

-		},

-

-		serialize : function(styles, element_name) {

-			var css = '', name, value;

-

-			function serializeStyles(name) {

-				var styleList, i, l, value;

-

-				styleList = schema.styles[name];

-				if (styleList) {

-					for (i = 0, l = styleList.length; i < l; i++) {

-						name = styleList[i];

-						value = styles[name];

-

-						if (value !== undef && value.length > 0)

-							css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';

-					}

-				}

-			};

-

-			// Serialize styles according to schema

-			if (element_name && schema && schema.styles) {

-				// Serialize global styles and element specific styles

-				serializeStyles('*');

-				serializeStyles(element_name);

-			} else {

-				// Output the styles in the order they are inside the object

-				for (name in styles) {

-					value = styles[name];

-

-					if (value !== undef && value.length > 0)

-						css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';

-				}

-			}

-

-			return css;

-		}

-	};

-};

-

-(function(tinymce) {

-	var transitional = {}, boolAttrMap, blockElementsMap, shortEndedElementsMap, nonEmptyElementsMap, customElementsMap = {},

-		defaultWhiteSpaceElementsMap, selfClosingElementsMap, makeMap = tinymce.makeMap, each = tinymce.each;

-

-	function split(str, delim) {

-		return str.split(delim || ',');

-	};

-

-	function unpack(lookup, data) {

-		var key, elements = {};

-

-		function replace(value) {

-			return value.replace(/[A-Z]+/g, function(key) {

-				return replace(lookup[key]);

-			});

-		};

-

-		// Unpack lookup

-		for (key in lookup) {

-			if (lookup.hasOwnProperty(key))

-				lookup[key] = replace(lookup[key]);

-		}

-

-		// Unpack and parse data into object map

-		replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function(str, name, attributes, children) {

-			attributes = split(attributes, '|');

-

-			elements[name] = {

-				attributes : makeMap(attributes),

-				attributesOrder : attributes,

-				children : makeMap(children, '|', {'#comment' : {}})

-			}

-		});

-

-		return elements;

-	};

-

-	// Build a lookup table for block elements both lowercase and uppercase

-	blockElementsMap = 'h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,' + 

-						'th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,' + 

-						'noscript,menu,isindex,samp,header,footer,article,section,hgroup';

-	blockElementsMap = makeMap(blockElementsMap, ',', makeMap(blockElementsMap.toUpperCase()));

-

-	// This is the XHTML 1.0 transitional elements with it's attributes and children packed to reduce it's size

-	transitional = unpack({

-		Z : 'H|K|N|O|P',

-		Y : 'X|form|R|Q',

-		ZG : 'E|span|width|align|char|charoff|valign',

-		X : 'p|T|div|U|W|isindex|fieldset|table',

-		ZF : 'E|align|char|charoff|valign',

-		W : 'pre|hr|blockquote|address|center|noframes',

-		ZE : 'abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height',

-		ZD : '[E][S]',

-		U : 'ul|ol|dl|menu|dir',

-		ZC : 'p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q',

-		T : 'h1|h2|h3|h4|h5|h6',

-		ZB : 'X|S|Q',

-		S : 'R|P',

-		ZA : 'a|G|J|M|O|P',

-		R : 'a|H|K|N|O',

-		Q : 'noscript|P',

-		P : 'ins|del|script',

-		O : 'input|select|textarea|label|button',

-		N : 'M|L',

-		M : 'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym',

-		L : 'sub|sup',

-		K : 'J|I',

-		J : 'tt|i|b|u|s|strike',

-		I : 'big|small|font|basefont',

-		H : 'G|F',

-		G : 'br|span|bdo',

-		F : 'object|applet|img|map|iframe',

-		E : 'A|B|C',

-		D : 'accesskey|tabindex|onfocus|onblur',

-		C : 'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup',

-		B : 'lang|xml:lang|dir',

-		A : 'id|class|style|title'

-	}, 'script[id|charset|type|language|src|defer|xml:space][]' + 

-		'style[B|id|type|media|title|xml:space][]' + 

-		'object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]' + 

-		'param[id|name|value|valuetype|type][]' + 

-		'p[E|align][#|S]' + 

-		'a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]' + 

-		'br[A|clear][]' + 

-		'span[E][#|S]' + 

-		'bdo[A|C|B][#|S]' + 

-		'applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]' + 

-		'h1[E|align][#|S]' + 

-		'img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]' + 

-		'map[B|C|A|name][X|form|Q|area]' + 

-		'h2[E|align][#|S]' + 

-		'iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]' + 

-		'h3[E|align][#|S]' + 

-		'tt[E][#|S]' + 

-		'i[E][#|S]' + 

-		'b[E][#|S]' + 

-		'u[E][#|S]' + 

-		's[E][#|S]' + 

-		'strike[E][#|S]' + 

-		'big[E][#|S]' + 

-		'small[E][#|S]' + 

-		'font[A|B|size|color|face][#|S]' + 

-		'basefont[id|size|color|face][]' + 

-		'em[E][#|S]' + 

-		'strong[E][#|S]' + 

-		'dfn[E][#|S]' + 

-		'code[E][#|S]' + 

-		'q[E|cite][#|S]' + 

-		'samp[E][#|S]' + 

-		'kbd[E][#|S]' + 

-		'var[E][#|S]' + 

-		'cite[E][#|S]' + 

-		'abbr[E][#|S]' + 

-		'acronym[E][#|S]' + 

-		'sub[E][#|S]' + 

-		'sup[E][#|S]' + 

-		'input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]' + 

-		'select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]' + 

-		'optgroup[E|disabled|label][option]' + 

-		'option[E|selected|disabled|label|value][]' + 

-		'textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]' + 

-		'label[E|for|accesskey|onfocus|onblur][#|S]' + 

-		'button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]' + 

-		'h4[E|align][#|S]' + 

-		'ins[E|cite|datetime][#|Y]' + 

-		'h5[E|align][#|S]' + 

-		'del[E|cite|datetime][#|Y]' + 

-		'h6[E|align][#|S]' + 

-		'div[E|align][#|Y]' + 

-		'ul[E|type|compact][li]' + 

-		'li[E|type|value][#|Y]' + 

-		'ol[E|type|compact|start][li]' + 

-		'dl[E|compact][dt|dd]' + 

-		'dt[E][#|S]' + 

-		'dd[E][#|Y]' + 

-		'menu[E|compact][li]' + 

-		'dir[E|compact][li]' + 

-		'pre[E|width|xml:space][#|ZA]' + 

-		'hr[E|align|noshade|size|width][]' + 

-		'blockquote[E|cite][#|Y]' + 

-		'address[E][#|S|p]' + 

-		'center[E][#|Y]' + 

-		'noframes[E][#|Y]' + 

-		'isindex[A|B|prompt][]' + 

-		'fieldset[E][#|legend|Y]' + 

-		'legend[E|accesskey|align][#|S]' + 

-		'table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]' + 

-		'caption[E|align][#|S]' + 

-		'col[ZG][]' + 

-		'colgroup[ZG][col]' + 

-		'thead[ZF][tr]' + 

-		'tr[ZF|bgcolor][th|td]' + 

-		'th[E|ZE][#|Y]' + 

-		'form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]' + 

-		'noscript[E][#|Y]' + 

-		'td[E|ZE][#|Y]' + 

-		'tfoot[ZF][tr]' + 

-		'tbody[ZF][tr]' + 

-		'area[E|D|shape|coords|href|nohref|alt|target][]' + 

-		'base[id|href|target][]' + 

-		'body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]'

-	);

-

-	boolAttrMap = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,autoplay,loop,controls');

-	shortEndedElementsMap = makeMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source');

-	nonEmptyElementsMap = tinymce.extend(makeMap('td,th,iframe,video,audio,object'), shortEndedElementsMap);

-	defaultWhiteSpaceElementsMap = makeMap('pre,script,style,textarea');

-	selfClosingElementsMap = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');

-

-	tinymce.html.Schema = function(settings) {

-		var self = this, elements = {}, children = {}, patternElements = [], validStyles, whiteSpaceElementsMap;

-

-		settings = settings || {};

-

-		// Allow all elements and attributes if verify_html is set to false

-		if (settings.verify_html === false)

-			settings.valid_elements = '*[*]';

-

-		// Build styles list

-		if (settings.valid_styles) {

-			validStyles = {};

-

-			// Convert styles into a rule list

-			each(settings.valid_styles, function(value, key) {

-				validStyles[key] = tinymce.explode(value);

-			});

-		}

-

-		whiteSpaceElementsMap = settings.whitespace_elements ? makeMap(settings.whitespace_elements) : defaultWhiteSpaceElementsMap;

-

-		// Converts a wildcard expression string to a regexp for example *a will become /.*a/.

-		function patternToRegExp(str) {

-			return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');

-		};

-

-		// Parses the specified valid_elements string and adds to the current rules

-		// This function is a bit hard to read since it's heavily optimized for speed

-		function addValidElements(valid_elements) {

-			var ei, el, ai, al, yl, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder,

-				prefix, outputName, globalAttributes, globalAttributesOrder, transElement, key, childKey, value,

-				elementRuleRegExp = /^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,

-				attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,

-				hasPatternsRegExp = /[*?+]/;

-

-			if (valid_elements) {

-				// Split valid elements into an array with rules

-				valid_elements = split(valid_elements);

-

-				if (elements['@']) {

-					globalAttributes = elements['@'].attributes;

-					globalAttributesOrder = elements['@'].attributesOrder;

-				}

-

-				// Loop all rules

-				for (ei = 0, el = valid_elements.length; ei < el; ei++) {

-					// Parse element rule

-					matches = elementRuleRegExp.exec(valid_elements[ei]);

-					if (matches) {

-						// Setup local names for matches

-						prefix = matches[1];

-						elementName = matches[2];

-						outputName = matches[3];

-						attrData = matches[4];

-

-						// Create new attributes and attributesOrder

-						attributes = {};

-						attributesOrder = [];

-

-						// Create the new element

-						element = {

-							attributes : attributes,

-							attributesOrder : attributesOrder

-						};

-

-						// Padd empty elements prefix

-						if (prefix === '#')

-							element.paddEmpty = true;

-

-						// Remove empty elements prefix

-						if (prefix === '-')

-							element.removeEmpty = true;

-

-						// Copy attributes from global rule into current rule

-						if (globalAttributes) {

-							for (key in globalAttributes)

-								attributes[key] = globalAttributes[key];

-

-							attributesOrder.push.apply(attributesOrder, globalAttributesOrder);

-						}

-

-						// Attributes defined

-						if (attrData) {

-							attrData = split(attrData, '|');

-							for (ai = 0, al = attrData.length; ai < al; ai++) {

-								matches = attrRuleRegExp.exec(attrData[ai]);

-								if (matches) {

-									attr = {};

-									attrType = matches[1];

-									attrName = matches[2].replace(/::/g, ':');

-									prefix = matches[3];

-									value = matches[4];

-

-									// Required

-									if (attrType === '!') {

-										element.attributesRequired = element.attributesRequired || [];

-										element.attributesRequired.push(attrName);

-										attr.required = true;

-									}

-

-									// Denied from global

-									if (attrType === '-') {

-										delete attributes[attrName];

-										attributesOrder.splice(tinymce.inArray(attributesOrder, attrName), 1);

-										continue;

-									}

-

-									// Default value

-									if (prefix) {

-										// Default value

-										if (prefix === '=') {

-											element.attributesDefault = element.attributesDefault || [];

-											element.attributesDefault.push({name: attrName, value: value});

-											attr.defaultValue = value;

-										}

-

-										// Forced value

-										if (prefix === ':') {

-											element.attributesForced = element.attributesForced || [];

-											element.attributesForced.push({name: attrName, value: value});

-											attr.forcedValue = value;

-										}

-

-										// Required values

-										if (prefix === '<')

-											attr.validValues = makeMap(value, '?');

-									}

-

-									// Check for attribute patterns

-									if (hasPatternsRegExp.test(attrName)) {

-										element.attributePatterns = element.attributePatterns || [];

-										attr.pattern = patternToRegExp(attrName);

-										element.attributePatterns.push(attr);

-									} else {

-										// Add attribute to order list if it doesn't already exist

-										if (!attributes[attrName])

-											attributesOrder.push(attrName);

-

-										attributes[attrName] = attr;

-									}

-								}

-							}

-						}

-

-						// Global rule, store away these for later usage

-						if (!globalAttributes && elementName == '@') {

-							globalAttributes = attributes;

-							globalAttributesOrder = attributesOrder;

-						}

-

-						// Handle substitute elements such as b/strong

-						if (outputName) {

-							element.outputName = elementName;

-							elements[outputName] = element;

-						}

-

-						// Add pattern or exact element

-						if (hasPatternsRegExp.test(elementName)) {

-							element.pattern = patternToRegExp(elementName);

-							patternElements.push(element);

-						} else

-							elements[elementName] = element;

-					}

-				}

-			}

-		};

-

-		function setValidElements(valid_elements) {

-			elements = {};

-			patternElements = [];

-

-			addValidElements(valid_elements);

-

-			each(transitional, function(element, name) {

-				children[name] = element.children;

-			});

-		};

-

-		// Adds custom non HTML elements to the schema

-		function addCustomElements(custom_elements) {

-			var customElementRegExp = /^(~)?(.+)$/;

-

-			if (custom_elements) {

-				each(split(custom_elements), function(rule) {

-					var matches = customElementRegExp.exec(rule),

-						inline = matches[1] === '~',

-						cloneName = inline ? 'span' : 'div',

-						name = matches[2];

-

-					children[name] = children[cloneName];

-					customElementsMap[name] = cloneName;

-

-					// If it's not marked as inline then add it to valid block elements

-					if (!inline)

-						blockElementsMap[name] = {};

-

-					// Add custom elements at span/div positions

-					each(children, function(element, child) {

-						if (element[cloneName])

-							element[name] = element[cloneName];

-					});

-				});

-			}

-		};

-

-		// Adds valid children to the schema object

-		function addValidChildren(valid_children) {

-			var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;

-

-			if (valid_children) {

-				each(split(valid_children), function(rule) {

-					var matches = childRuleRegExp.exec(rule), parent, prefix;

-

-					if (matches) {

-						prefix = matches[1];

-

-						// Add/remove items from default

-						if (prefix)

-							parent = children[matches[2]];

-						else

-							parent = children[matches[2]] = {'#comment' : {}};

-

-						parent = children[matches[2]];

-

-						each(split(matches[3], '|'), function(child) {

-							if (prefix === '-')

-								delete parent[child];

-							else

-								parent[child] = {};

-						});

-					}

-				});

-			}

-		};

-

-		function getElementRule(name) {

-			var element = elements[name], i;

-

-			// Exact match found

-			if (element)

-				return element;

-

-			// No exact match then try the patterns

-			i = patternElements.length;

-			while (i--) {

-				element = patternElements[i];

-

-				if (element.pattern.test(name))

-					return element;

-			}

-		};

-

-		if (!settings.valid_elements) {

-			// No valid elements defined then clone the elements from the transitional spec

-			each(transitional, function(element, name) {

-				elements[name] = {

-					attributes : element.attributes,

-					attributesOrder : element.attributesOrder

-				};

-

-				children[name] = element.children;

-			});

-

-			// Switch these

-			each(split('strong/b,em/i'), function(item) {

-				item = split(item, '/');

-				elements[item[1]].outputName = item[0];

-			});

-

-			// Add default alt attribute for images

-			elements.img.attributesDefault = [{name: 'alt', value: ''}];

-

-			// Remove these if they are empty by default

-			each(split('ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr'), function(name) {

-				elements[name].removeEmpty = true;

-			});

-

-			// Padd these by default

-			each(split('p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption'), function(name) {

-				elements[name].paddEmpty = true;

-			});

-		} else

-			setValidElements(settings.valid_elements);

-

-		addCustomElements(settings.custom_elements);

-		addValidChildren(settings.valid_children);

-		addValidElements(settings.extended_valid_elements);

-

-		// Todo: Remove this when we fix list handling to be valid

-		addValidChildren('+ol[ul|ol],+ul[ul|ol]');

-

-		// If the user didn't allow span only allow internal spans

-		if (!getElementRule('span'))

-			addValidElements('span[!data-mce-type|*]');

-

-		// Delete invalid elements

-		if (settings.invalid_elements) {

-			tinymce.each(tinymce.explode(settings.invalid_elements), function(item) {

-				if (elements[item])

-					delete elements[item];

-			});

-		}

-

-		self.children = children;

-

-		self.styles = validStyles;

-

-		self.getBoolAttrs = function() {

-			return boolAttrMap;

-		};

-

-		self.getBlockElements = function() {

-			return blockElementsMap;

-		};

-

-		self.getShortEndedElements = function() {

-			return shortEndedElementsMap;

-		};

-

-		self.getSelfClosingElements = function() {

-			return selfClosingElementsMap;

-		};

-

-		self.getNonEmptyElements = function() {

-			return nonEmptyElementsMap;

-		};

-

-		self.getWhiteSpaceElements = function() {

-			return whiteSpaceElementsMap;

-		};

-

-		self.isValidChild = function(name, child) {

-			var parent = children[name];

-

-			return !!(parent && parent[child]);

-		};

-

-		self.getElementRule = getElementRule;

-

-		self.getCustomElements = function() {

-			return customElementsMap;

-		};

-

-		self.addValidElements = addValidElements;

-

-		self.setValidElements = setValidElements;

-

-		self.addCustomElements = addCustomElements;

-

-		self.addValidChildren = addValidChildren;

-	};

-

-	// Expose boolMap and blockElementMap as static properties for usage in DOMUtils

-	tinymce.html.Schema.boolAttrMap = boolAttrMap;

-	tinymce.html.Schema.blockElementsMap = blockElementsMap;

-})(tinymce);

-

-(function(tinymce) {

-	tinymce.html.SaxParser = function(settings, schema) {

-		var self = this, noop = function() {};

-

-		settings = settings || {};

-		self.schema = schema = schema || new tinymce.html.Schema();

-

-		if (settings.fix_self_closing !== false)

-			settings.fix_self_closing = true;

-

-		// Add handler functions from settings and setup default handlers

-		tinymce.each('comment cdata text start end pi doctype'.split(' '), function(name) {

-			if (name)

-				self[name] = settings[name] || noop;

-		});

-

-		self.parse = function(html) {

-			var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name, isInternalElement, removeInternalElements,

-				shortEndedElements, fillAttrsMap, isShortEnded, validate, elementRule, isValidElement, attr, attribsValue, invalidPrefixRegExp,

-				validAttributesMap, validAttributePatterns, attributesRequired, attributesDefault, attributesForced, selfClosing,

-				tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0, decode = tinymce.html.Entities.decode, fixSelfClosing, isIE;

-

-			function processEndTag(name) {

-				var pos, i;

-

-				// Find position of parent of the same type

-				pos = stack.length;

-				while (pos--) {

-					if (stack[pos].name === name)

-						break;						

-				}

-

-				// Found parent

-				if (pos >= 0) {

-					// Close all the open elements

-					for (i = stack.length - 1; i >= pos; i--) {

-						name = stack[i];

-

-						if (name.valid)

-							self.end(name.name);

-					}

-

-					// Remove the open elements from the stack

-					stack.length = pos;

-				}

-			};

-

-			// Precompile RegExps and map objects

-			tokenRegExp = new RegExp('<(?:' +

-				'(?:!--([\\w\\W]*?)-->)|' + // Comment

-				'(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA

-				'(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE

-				'(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI

-				'(?:\\/([^>]+)>)|' + // End element

-				'(?:([^\\s\\/<>]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/)>)' + // Start element

-			')', 'g');

-

-			attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;

-			specialElements = {

-				'script' : /<\/script[^>]*>/gi,

-				'style' : /<\/style[^>]*>/gi,

-				'noscript' : /<\/noscript[^>]*>/gi

-			};

-

-			// Setup lookup tables for empty elements and boolean attributes

-			shortEndedElements = schema.getShortEndedElements();

-			selfClosing = schema.getSelfClosingElements();

-			fillAttrsMap = schema.getBoolAttrs();

-			validate = settings.validate;

-			removeInternalElements = settings.remove_internals;

-			fixSelfClosing = settings.fix_self_closing;

-			isIE = tinymce.isIE;

-			invalidPrefixRegExp = /^:/;

-

-			while (matches = tokenRegExp.exec(html)) {

-				// Text

-				if (index < matches.index)

-					self.text(decode(html.substr(index, matches.index - index)));

-

-				if (value = matches[6]) { // End element

-					value = value.toLowerCase();

-

-					// IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements

-					if (isIE && invalidPrefixRegExp.test(value))

-						value = value.substr(1);

-

-					processEndTag(value);

-				} else if (value = matches[7]) { // Start element

-					value = value.toLowerCase();

-

-					// IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements

-					if (isIE && invalidPrefixRegExp.test(value))

-						value = value.substr(1);

-

-					isShortEnded = value in shortEndedElements;

-

-					// Is self closing tag for example an <li> after an open <li>

-					if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value)

-						processEndTag(value);

-

-					// Validate element

-					if (!validate || (elementRule = schema.getElementRule(value))) {

-						isValidElement = true;

-

-						// Grab attributes map and patters when validation is enabled

-						if (validate) {

-							validAttributesMap = elementRule.attributes;

-							validAttributePatterns = elementRule.attributePatterns;

-						}

-

-						// Parse attributes

-						if (attribsValue = matches[8]) {

-							isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; // Check if the element is an internal element

-

-							// If the element has internal attributes then remove it if we are told to do so

-							if (isInternalElement && removeInternalElements)

-								isValidElement = false;

-

-							attrList = [];

-							attrList.map = {};

-

-							attribsValue.replace(attrRegExp, function(match, name, value, val2, val3) {

-								var attrRule, i;

-

-								name = name.toLowerCase();

-								value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute

-

-								// Validate name and value

-								if (validate && !isInternalElement && name.indexOf('data-') !== 0) {

-									attrRule = validAttributesMap[name];

-

-									// Find rule by pattern matching

-									if (!attrRule && validAttributePatterns) {

-										i = validAttributePatterns.length;

-										while (i--) {

-											attrRule = validAttributePatterns[i];

-											if (attrRule.pattern.test(name))

-												break;

-										}

-

-										// No rule matched

-										if (i === -1)

-											attrRule = null;

-									}

-

-									// No attribute rule found

-									if (!attrRule)

-										return;

-

-									// Validate value

-									if (attrRule.validValues && !(value in attrRule.validValues))

-										return;

-								}

-

-								// Add attribute to list and map

-								attrList.map[name] = value;

-								attrList.push({

-									name: name,

-									value: value

-								});

-							});

-						} else {

-							attrList = [];

-							attrList.map = {};

-						}

-

-						// Process attributes if validation is enabled

-						if (validate && !isInternalElement) {

-							attributesRequired = elementRule.attributesRequired;

-							attributesDefault = elementRule.attributesDefault;

-							attributesForced = elementRule.attributesForced;

-

-							// Handle forced attributes

-							if (attributesForced) {

-								i = attributesForced.length;

-								while (i--) {

-									attr = attributesForced[i];

-									name = attr.name;

-									attrValue = attr.value;

-

-									if (attrValue === '{$uid}')

-										attrValue = 'mce_' + idCount++;

-

-									attrList.map[name] = attrValue;

-									attrList.push({name: name, value: attrValue});

-								}

-							}

-

-							// Handle default attributes

-							if (attributesDefault) {

-								i = attributesDefault.length;

-								while (i--) {

-									attr = attributesDefault[i];

-									name = attr.name;

-

-									if (!(name in attrList.map)) {

-										attrValue = attr.value;

-

-										if (attrValue === '{$uid}')

-											attrValue = 'mce_' + idCount++;

-

-										attrList.map[name] = attrValue;

-										attrList.push({name: name, value: attrValue});

-									}

-								}

-							}

-

-							// Handle required attributes

-							if (attributesRequired) {

-								i = attributesRequired.length;

-								while (i--) {

-									if (attributesRequired[i] in attrList.map)

-										break;

-								}

-

-								// None of the required attributes where found

-								if (i === -1)

-									isValidElement = false;

-							}

-

-							// Invalidate element if it's marked as bogus

-							if (attrList.map['data-mce-bogus'])

-								isValidElement = false;

-						}

-

-						if (isValidElement)

-							self.start(value, attrList, isShortEnded);

-					} else

-						isValidElement = false;

-

-					// Treat script, noscript and style a bit different since they may include code that looks like elements

-					if (endRegExp = specialElements[value]) {

-						endRegExp.lastIndex = index = matches.index + matches[0].length;

-

-						if (matches = endRegExp.exec(html)) {

-							if (isValidElement)

-								text = html.substr(index, matches.index - index);

-

-							index = matches.index + matches[0].length;

-						} else {

-							text = html.substr(index);

-							index = html.length;

-						}

-

-						if (isValidElement && text.length > 0)

-							self.text(text, true);

-

-						if (isValidElement)

-							self.end(value);

-

-						tokenRegExp.lastIndex = index;

-						continue;

-					}

-

-					// Push value on to stack

-					if (!isShortEnded) {

-						if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1)

-							stack.push({name: value, valid: isValidElement});

-						else if (isValidElement)

-							self.end(value);

-					}

-				} else if (value = matches[1]) { // Comment

-					self.comment(value);

-				} else if (value = matches[2]) { // CDATA

-					self.cdata(value);

-				} else if (value = matches[3]) { // DOCTYPE

-					self.doctype(value);

-				} else if (value = matches[4]) { // PI

-					self.pi(value, matches[5]);

-				}

-

-				index = matches.index + matches[0].length;

-			}

-

-			// Text

-			if (index < html.length)

-				self.text(decode(html.substr(index)));

-

-			// Close any open elements

-			for (i = stack.length - 1; i >= 0; i--) {

-				value = stack[i];

-

-				if (value.valid)

-					self.end(value.name);

-			}

-		};

-	}

-})(tinymce);

-

-(function(tinymce) {

-	var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = {

-		'#text' : 3,

-		'#comment' : 8,

-		'#cdata' : 4,

-		'#pi' : 7,

-		'#doctype' : 10,

-		'#document-fragment' : 11

-	};

-

-	// Walks the tree left/right

-	function walk(node, root_node, prev) {

-		var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next';

-

-		// Walk into nodes if it has a start

-		if (node[startName])

-			return node[startName];

-

-		// Return the sibling if it has one

-		if (node !== root_node) {

-			sibling = node[siblingName];

-

-			if (sibling)

-				return sibling;

-

-			// Walk up the parents to look for siblings

-			for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) {

-				sibling = parent[siblingName];

-

-				if (sibling)

-					return sibling;

-			}

-		}

-	};

-

-	function Node(name, type) {

-		this.name = name;

-		this.type = type;

-

-		if (type === 1) {

-			this.attributes = [];

-			this.attributes.map = {};

-		}

-	}

-

-	tinymce.extend(Node.prototype, {

-		replace : function(node) {

-			var self = this;

-

-			if (node.parent)

-				node.remove();

-

-			self.insert(node, self);

-			self.remove();

-

-			return self;

-		},

-

-		attr : function(name, value) {

-			var self = this, attrs, i, undef;

-

-			if (typeof name !== "string") {

-				for (i in name)

-					self.attr(i, name[i]);

-

-				return self;

-			}

-

-			if (attrs = self.attributes) {

-				if (value !== undef) {

-					// Remove attribute

-					if (value === null) {

-						if (name in attrs.map) {

-							delete attrs.map[name];

-

-							i = attrs.length;

-							while (i--) {

-								if (attrs[i].name === name) {

-									attrs = attrs.splice(i, 1);

-									return self;

-								}

-							}

-						}

-

-						return self;

-					}

-

-					// Set attribute

-					if (name in attrs.map) {

-						// Set attribute

-						i = attrs.length;

-						while (i--) {

-							if (attrs[i].name === name) {

-								attrs[i].value = value;

-								break;

-							}

-						}

-					} else

-						attrs.push({name: name, value: value});

-

-					attrs.map[name] = value;

-

-					return self;

-				} else {

-					return attrs.map[name];

-				}

-			}

-		},

-

-		clone : function() {

-			var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs;

-

-			// Clone element attributes

-			if (selfAttrs = self.attributes) {

-				cloneAttrs = [];

-				cloneAttrs.map = {};

-

-				for (i = 0, l = selfAttrs.length; i < l; i++) {

-					selfAttr = selfAttrs[i];

-

-					// Clone everything except id

-					if (selfAttr.name !== 'id') {

-						cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value};

-						cloneAttrs.map[selfAttr.name] = selfAttr.value;

-					}

-				}

-

-				clone.attributes = cloneAttrs;

-			}

-

-			clone.value = self.value;

-			clone.shortEnded = self.shortEnded;

-

-			return clone;

-		},

-

-		wrap : function(wrapper) {

-			var self = this;

-

-			self.parent.insert(wrapper, self);

-			wrapper.append(self);

-

-			return self;

-		},

-

-		unwrap : function() {

-			var self = this, node, next;

-

-			for (node = self.firstChild; node; ) {

-				next = node.next;

-				self.insert(node, self, true);

-				node = next;

-			}

-

-			self.remove();

-		},

-

-		remove : function() {

-			var self = this, parent = self.parent, next = self.next, prev = self.prev;

-

-			if (parent) {

-				if (parent.firstChild === self) {

-					parent.firstChild = next;

-

-					if (next)

-						next.prev = null;

-				} else {

-					prev.next = next;

-				}

-

-				if (parent.lastChild === self) {

-					parent.lastChild = prev;

-

-					if (prev)

-						prev.next = null;

-				} else {

-					next.prev = prev;

-				}

-

-				self.parent = self.next = self.prev = null;

-			}

-

-			return self;

-		},

-

-		append : function(node) {

-			var self = this, last;

-

-			if (node.parent)

-				node.remove();

-

-			last = self.lastChild;

-			if (last) {

-				last.next = node;

-				node.prev = last;

-				self.lastChild = node;

-			} else

-				self.lastChild = self.firstChild = node;

-

-			node.parent = self;

-

-			return node;

-		},

-

-		insert : function(node, ref_node, before) {

-			var parent;

-

-			if (node.parent)

-				node.remove();

-

-			parent = ref_node.parent || this;

-

-			if (before) {

-				if (ref_node === parent.firstChild)

-					parent.firstChild = node;

-				else

-					ref_node.prev.next = node;

-

-				node.prev = ref_node.prev;

-				node.next = ref_node;

-				ref_node.prev = node;

-			} else {

-				if (ref_node === parent.lastChild)

-					parent.lastChild = node;

-				else

-					ref_node.next.prev = node;

-

-				node.next = ref_node.next;

-				node.prev = ref_node;

-				ref_node.next = node;

-			}

-

-			node.parent = parent;

-

-			return node;

-		},

-

-		getAll : function(name) {

-			var self = this, node, collection = [];

-

-			for (node = self.firstChild; node; node = walk(node, self)) {

-				if (node.name === name)

-					collection.push(node);

-			}

-

-			return collection;

-		},

-

-		empty : function() {

-			var self = this, nodes, i, node;

-

-			// Remove all children

-			if (self.firstChild) {

-				nodes = [];

-

-				// Collect the children

-				for (node = self.firstChild; node; node = walk(node, self))

-					nodes.push(node);

-

-				// Remove the children

-				i = nodes.length;

-				while (i--) {

-					node = nodes[i];

-					node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;

-				}

-			}

-

-			self.firstChild = self.lastChild = null;

-

-			return self;

-		},

-

-		isEmpty : function(elements) {

-			var self = this, node = self.firstChild, i, name;

-

-			if (node) {

-				do {

-					if (node.type === 1) {

-						// Ignore bogus elements

-						if (node.attributes.map['data-mce-bogus'])

-							continue;

-

-						// Keep empty elements like <img />

-						if (elements[node.name])

-							return false;

-

-						// Keep elements with data attributes or name attribute like <a name="1"></a>

-						i = node.attributes.length;

-						while (i--) {

-							name = node.attributes[i].name;

-							if (name === "name" || name.indexOf('data-') === 0)

-								return false;

-						}

-					}

-

-					// Keep non whitespace text nodes

-					if ((node.type === 3 && !whiteSpaceRegExp.test(node.value)))

-						return false;

-				} while (node = walk(node, self));

-			}

-

-			return true;

-		},

-

-		walk : function(prev) {

-			return walk(this, null, prev);

-		}

-	});

-

-	tinymce.extend(Node, {

-		create : function(name, attrs) {

-			var node, attrName;

-

-			// Create node

-			node = new Node(name, typeLookup[name] || 1);

-

-			// Add attributes if needed

-			if (attrs) {

-				for (attrName in attrs)

-					node.attr(attrName, attrs[attrName]);

-			}

-

-			return node;

-		}

-	});

-

-	tinymce.html.Node = Node;

-})(tinymce);

-

-(function(tinymce) {

-	var Node = tinymce.html.Node;

-

-	tinymce.html.DomParser = function(settings, schema) {

-		var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {};

-

-		settings = settings || {};

-		settings.validate = "validate" in settings ? settings.validate : true;

-		settings.root_name = settings.root_name || 'body';

-		self.schema = schema = schema || new tinymce.html.Schema();

-

-		function fixInvalidChildren(nodes) {

-			var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i,

-				childClone, nonEmptyElements, nonSplitableElements, sibling, nextNode;

-

-			nonSplitableElements = tinymce.makeMap('tr,td,th,tbody,thead,tfoot,table');

-			nonEmptyElements = schema.getNonEmptyElements();

-

-			for (ni = 0; ni < nodes.length; ni++) {

-				node = nodes[ni];

-

-				// Already removed

-				if (!node.parent)

-					continue;

-

-				// Get list of all parent nodes until we find a valid parent to stick the child into

-				parents = [node];

-				for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent)

-					parents.push(parent);

-

-				// Found a suitable parent

-				if (parent && parents.length > 1) {

-					// Reverse the array since it makes looping easier

-					parents.reverse();

-

-					// Clone the related parent and insert that after the moved node

-					newParent = currentNode = self.filterNode(parents[0].clone());

-

-					// Start cloning and moving children on the left side of the target node

-					for (i = 0; i < parents.length - 1; i++) {

-						if (schema.isValidChild(currentNode.name, parents[i].name)) {

-							tempNode = self.filterNode(parents[i].clone());

-							currentNode.append(tempNode);

-						} else

-							tempNode = currentNode;

-

-						for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) {

-							nextNode = childNode.next;

-							tempNode.append(childNode);

-							childNode = nextNode;

-						}

-

-						currentNode = tempNode;

-					}

-

-					if (!newParent.isEmpty(nonEmptyElements)) {

-						parent.insert(newParent, parents[0], true);

-						parent.insert(node, newParent);

-					} else {

-						parent.insert(node, parents[0], true);

-					}

-

-					// Check if the element is empty by looking through it's contents and special treatment for <p><br /></p>

-					parent = parents[0];

-					if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') {

-						parent.empty().remove();

-					}

-				} else if (node.parent) {

-					// If it's an LI try to find a UL/OL for it or wrap it

-					if (node.name === 'li') {

-						sibling = node.prev;

-						if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {

-							sibling.append(node);

-							continue;

-						}

-

-						sibling = node.next;

-						if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {

-							sibling.insert(node, sibling.firstChild, true);

-							continue;

-						}

-

-						node.wrap(self.filterNode(new Node('ul', 1)));

-						continue;

-					}

-

-					// Try wrapping the element in a DIV

-					if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {

-						node.wrap(self.filterNode(new Node('div', 1)));

-					} else {

-						// We failed wrapping it, then remove or unwrap it

-						if (node.name === 'style' || node.name === 'script')

-							node.empty().remove();

-						else

-							node.unwrap();

-					}

-				}

-			}

-		};

-

-		self.filterNode = function(node) {

-			var i, name, list;

-

-			// Run element filters

-			if (name in nodeFilters) {

-				list = matchedNodes[name];

-

-				if (list)

-					list.push(node);

-				else

-					matchedNodes[name] = [node];

-			}

-

-			// Run attribute filters

-			i = attributeFilters.length;

-			while (i--) {

-				name = attributeFilters[i].name;

-

-				if (name in node.attributes.map) {

-					list = matchedAttributes[name];

-

-					if (list)

-						list.push(node);

-					else

-						matchedAttributes[name] = [node];

-				}

-			}

-

-			return node;

-		};

-

-		self.addNodeFilter = function(name, callback) {

-			tinymce.each(tinymce.explode(name), function(name) {

-				var list = nodeFilters[name];

-

-				if (!list)

-					nodeFilters[name] = list = [];

-

-				list.push(callback);

-			});

-		};

-

-		self.addAttributeFilter = function(name, callback) {

-			tinymce.each(tinymce.explode(name), function(name) {

-				var i;

-

-				for (i = 0; i < attributeFilters.length; i++) {

-					if (attributeFilters[i].name === name) {

-						attributeFilters[i].callbacks.push(callback);

-						return;

-					}

-				}

-

-				attributeFilters.push({name: name, callbacks: [callback]});

-			});

-		};

-

-		self.parse = function(html, args) {

-			var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate,

-				blockElements, startWhiteSpaceRegExp, invalidChildren = [],

-				endWhiteSpaceRegExp, allWhiteSpaceRegExp, whiteSpaceElements, children, nonEmptyElements, rootBlockName;

-

-			args = args || {};

-			matchedNodes = {};

-			matchedAttributes = {};

-			blockElements = tinymce.extend(tinymce.makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());

-			nonEmptyElements = schema.getNonEmptyElements();

-			children = schema.children;

-			validate = settings.validate;

-			rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block;

-

-			whiteSpaceElements = schema.getWhiteSpaceElements();

-			startWhiteSpaceRegExp = /^[ \t\r\n]+/;

-			endWhiteSpaceRegExp = /[ \t\r\n]+$/;

-			allWhiteSpaceRegExp = /[ \t\r\n]+/g;

-

-			function addRootBlocks() {

-				var node = rootNode.firstChild, next, rootBlockNode;

-

-				while (node) {

-					next = node.next;

-

-					if (node.type == 3 || (node.type == 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type'))) {

-						if (!rootBlockNode) {

-							// Create a new root block element

-							rootBlockNode = createNode(rootBlockName, 1);

-							rootNode.insert(rootBlockNode, node);

-							rootBlockNode.append(node);

-						} else

-							rootBlockNode.append(node);

-					} else {

-						rootBlockNode = null;

-					}

-

-					node = next;

-				};

-			};

-

-			function createNode(name, type) {

-				var node = new Node(name, type), list;

-

-				if (name in nodeFilters) {

-					list = matchedNodes[name];

-

-					if (list)

-						list.push(node);

-					else

-						matchedNodes[name] = [node];

-				}

-

-				return node;

-			};

-

-			function removeWhitespaceBefore(node) {

-				var textNode, textVal, sibling;

-

-				for (textNode = node.prev; textNode && textNode.type === 3; ) {

-					textVal = textNode.value.replace(endWhiteSpaceRegExp, '');

-

-					if (textVal.length > 0) {

-						textNode.value = textVal;

-						textNode = textNode.prev;

-					} else {

-						sibling = textNode.prev;

-						textNode.remove();

-						textNode = sibling;

-					}

-				}

-			};

-

-			parser = new tinymce.html.SaxParser({

-				validate : validate,

-				fix_self_closing : !validate, // Let the DOM parser handle <li> in <li> or <p> in <p> for better results

-

-				cdata: function(text) {

-					node.append(createNode('#cdata', 4)).value = text;

-				},

-

-				text: function(text, raw) {

-					var textNode;

-

-					// Trim all redundant whitespace on non white space elements

-					if (!whiteSpaceElements[node.name]) {

-						text = text.replace(allWhiteSpaceRegExp, ' ');

-

-						if (node.lastChild && blockElements[node.lastChild.name])

-							text = text.replace(startWhiteSpaceRegExp, '');

-					}

-

-					// Do we need to create the node

-					if (text.length !== 0) {

-						textNode = createNode('#text', 3);

-						textNode.raw = !!raw;

-						node.append(textNode).value = text;

-					}

-				},

-

-				comment: function(text) {

-					node.append(createNode('#comment', 8)).value = text;

-				},

-

-				pi: function(name, text) {

-					node.append(createNode(name, 7)).value = text;

-					removeWhitespaceBefore(node);

-				},

-

-				doctype: function(text) {

-					var newNode;

-		

-					newNode = node.append(createNode('#doctype', 10));

-					newNode.value = text;

-					removeWhitespaceBefore(node);

-				},

-

-				start: function(name, attrs, empty) {

-					var newNode, attrFiltersLen, elementRule, textNode, attrName, text, sibling, parent;

-

-					elementRule = validate ? schema.getElementRule(name) : {};

-					if (elementRule) {

-						newNode = createNode(elementRule.outputName || name, 1);

-						newNode.attributes = attrs;

-						newNode.shortEnded = empty;

-

-						node.append(newNode);

-

-						// Check if node is valid child of the parent node is the child is

-						// unknown we don't collect it since it's probably a custom element

-						parent = children[node.name];

-						if (parent && children[newNode.name] && !parent[newNode.name])

-							invalidChildren.push(newNode);

-

-						attrFiltersLen = attributeFilters.length;

-						while (attrFiltersLen--) {

-							attrName = attributeFilters[attrFiltersLen].name;

-

-							if (attrName in attrs.map) {

-								list = matchedAttributes[attrName];

-

-								if (list)

-									list.push(newNode);

-								else

-									matchedAttributes[attrName] = [newNode];

-							}

-						}

-

-						// Trim whitespace before block

-						if (blockElements[name])

-							removeWhitespaceBefore(newNode);

-

-						// Change current node if the element wasn't empty i.e not <br /> or <img />

-						if (!empty)

-							node = newNode;

-					}

-				},

-

-				end: function(name) {

-					var textNode, elementRule, text, sibling, tempNode;

-

-					elementRule = validate ? schema.getElementRule(name) : {};

-					if (elementRule) {

-						if (blockElements[name]) {

-							if (!whiteSpaceElements[node.name]) {

-								// Trim whitespace at beginning of block

-								for (textNode = node.firstChild; textNode && textNode.type === 3; ) {

-									text = textNode.value.replace(startWhiteSpaceRegExp, '');

-

-									if (text.length > 0) {

-										textNode.value = text;

-										textNode = textNode.next;

-									} else {

-										sibling = textNode.next;

-										textNode.remove();

-										textNode = sibling;

-									}

-								}

-

-								// Trim whitespace at end of block

-								for (textNode = node.lastChild; textNode && textNode.type === 3; ) {

-									text = textNode.value.replace(endWhiteSpaceRegExp, '');

-

-									if (text.length > 0) {

-										textNode.value = text;

-										textNode = textNode.prev;

-									} else {

-										sibling = textNode.prev;

-										textNode.remove();

-										textNode = sibling;

-									}

-								}

-							}

-

-							// Trim start white space

-							textNode = node.prev;

-							if (textNode && textNode.type === 3) {

-								text = textNode.value.replace(startWhiteSpaceRegExp, '');

-

-								if (text.length > 0)

-									textNode.value = text;

-								else

-									textNode.remove();

-							}

-						}

-

-						// Handle empty nodes

-						if (elementRule.removeEmpty || elementRule.paddEmpty) {

-							if (node.isEmpty(nonEmptyElements)) {

-								if (elementRule.paddEmpty)

-									node.empty().append(new Node('#text', '3')).value = '\u00a0';

-								else {

-									// Leave nodes that have a name like <a name="name">

-									if (!node.attributes.map.name) {

-										tempNode = node.parent;

-										node.empty().remove();

-										node = tempNode;

-										return;

-									}

-								}

-							}

-						}

-

-						node = node.parent;

-					}

-				}

-			}, schema);

-

-			rootNode = node = new Node(args.context || settings.root_name, 11);

-

-			parser.parse(html);

-

-			// Fix invalid children or report invalid children in a contextual parsing

-			if (validate && invalidChildren.length) {

-				if (!args.context)

-					fixInvalidChildren(invalidChildren);

-				else

-					args.invalid = true;

-			}

-

-			// Wrap nodes in the root into block elements if the root is body

-			if (rootBlockName && rootNode.name == 'body')

-				addRootBlocks();

-

-			// Run filters only when the contents is valid

-			if (!args.invalid) {

-				// Run node filters

-				for (name in matchedNodes) {

-					list = nodeFilters[name];

-					nodes = matchedNodes[name];

-

-					// Remove already removed children

-					fi = nodes.length;

-					while (fi--) {

-						if (!nodes[fi].parent)

-							nodes.splice(fi, 1);

-					}

-

-					for (i = 0, l = list.length; i < l; i++)

-						list[i](nodes, name, args);

-				}

-

-				// Run attribute filters

-				for (i = 0, l = attributeFilters.length; i < l; i++) {

-					list = attributeFilters[i];

-

-					if (list.name in matchedAttributes) {

-						nodes = matchedAttributes[list.name];

-

-						// Remove already removed children

-						fi = nodes.length;

-						while (fi--) {

-							if (!nodes[fi].parent)

-								nodes.splice(fi, 1);

-						}

-

-						for (fi = 0, fl = list.callbacks.length; fi < fl; fi++)

-							list.callbacks[fi](nodes, list.name, args);

-					}

-				}

-			}

-

-			return rootNode;

-		};

-

-		// Remove <br> at end of block elements Gecko and WebKit injects BR elements to

-		// make it possible to place the caret inside empty blocks. This logic tries to remove

-		// these elements and keep br elements that where intended to be there intact

-		if (settings.remove_trailing_brs) {

-			self.addNodeFilter('br', function(nodes, name) {

-				var i, l = nodes.length, node, blockElements = schema.getBlockElements(),

-					nonEmptyElements = schema.getNonEmptyElements(), parent, prev, prevName;

-

-				// Remove brs from body element as well

-				blockElements.body = 1;

-

-				// Must loop forwards since it will otherwise remove all brs in <p>a<br><br><br></p>

-				for (i = 0; i < l; i++) {

-					node = nodes[i];

-					parent = node.parent;

-

-					if (blockElements[node.parent.name] && node === parent.lastChild) {

-						// Loop all nodes to the right of the current node and check for other BR elements

-						// excluding bookmarks since they are invisible

-						prev = node.prev;

-						while (prev) {

-							prevName = prev.name;

-

-							// Ignore bookmarks

-							if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') {

-								// Found a non BR element

-								if (prevName !== "br")

-									break;

-	

-								// Found another br it's a <br><br> structure then don't remove anything

-								if (prevName === 'br') {

-									node = null;

-									break;

-								}

-							}

-

-							prev = prev.prev;

-						}

-

-						if (node) {

-							node.remove();

-

-							// Is the parent to be considered empty after we removed the BR

-							if (parent.isEmpty(nonEmptyElements)) {

-								elementRule = schema.getElementRule(parent.name);

-

-								// Remove or padd the element depending on schema rule

-								if (elementRule) {

-								  if (elementRule.removeEmpty)

-									  parent.remove();

-								  else if (elementRule.paddEmpty)

-									  parent.empty().append(new tinymce.html.Node('#text', 3)).value = '\u00a0';

-							  }

-              }

-						}

-					}

-				}

-			});

-		}

-	}

-})(tinymce);

-

-tinymce.html.Writer = function(settings) {

-	var html = [], indent, indentBefore, indentAfter, encode, htmlOutput;

-

-	settings = settings || {};

-	indent = settings.indent;

-	indentBefore = tinymce.makeMap(settings.indent_before || '');

-	indentAfter = tinymce.makeMap(settings.indent_after || '');

-	encode = tinymce.html.Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);

-	htmlOutput = settings.element_format == "html";

-

-	return {

-		start: function(name, attrs, empty) {

-			var i, l, attr, value;

-

-			if (indent && indentBefore[name] && html.length > 0) {

-				value = html[html.length - 1];

-

-				if (value.length > 0 && value !== '\n')

-					html.push('\n');

-			}

-

-			html.push('<', name);

-

-			if (attrs) {

-				for (i = 0, l = attrs.length; i < l; i++) {

-					attr = attrs[i];

-					html.push(' ', attr.name, '="', encode(attr.value, true), '"');

-				}

-			}

-

-			if (!empty || htmlOutput)

-				html[html.length] = '>';

-			else

-				html[html.length] = ' />';

-

-			if (empty && indent && indentAfter[name] && html.length > 0) {

-				value = html[html.length - 1];

-

-				if (value.length > 0 && value !== '\n')

-					html.push('\n');

-			}

-		},

-

-		end: function(name) {

-			var value;

-

-			/*if (indent && indentBefore[name] && html.length > 0) {

-				value = html[html.length - 1];

-

-				if (value.length > 0 && value !== '\n')

-					html.push('\n');

-			}*/

-

-			html.push('</', name, '>');

-

-			if (indent && indentAfter[name] && html.length > 0) {

-				value = html[html.length - 1];

-

-				if (value.length > 0 && value !== '\n')

-					html.push('\n');

-			}

-		},

-

-		text: function(text, raw) {

-			if (text.length > 0)

-				html[html.length] = raw ? text : encode(text);

-		},

-

-		cdata: function(text) {

-			html.push('<![CDATA[', text, ']]>');

-		},

-

-		comment: function(text) {

-			html.push('<!--', text, '-->');

-		},

-

-		pi: function(name, text) {

-			if (text)

-				html.push('<?', name, ' ', text, '?>');

-			else

-				html.push('<?', name, '?>');

-

-			if (indent)

-				html.push('\n');

-		},

-

-		doctype: function(text) {

-			html.push('<!DOCTYPE', text, '>', indent ? '\n' : '');

-		},

-

-		reset: function() {

-			html.length = 0;

-		},

-

-		getContent: function() {

-			return html.join('').replace(/\n$/, '');

-		}

-	};

-};

-

-(function(tinymce) {

-	tinymce.html.Serializer = function(settings, schema) {

-		var self = this, writer = new tinymce.html.Writer(settings);

-

-		settings = settings || {};

-		settings.validate = "validate" in settings ? settings.validate : true;

-

-		self.schema = schema = schema || new tinymce.html.Schema();

-		self.writer = writer;

-

-		self.serialize = function(node) {

-			var handlers, validate;

-

-			validate = settings.validate;

-

-			handlers = {

-				// #text

-				3: function(node, raw) {

-					writer.text(node.value, node.raw);

-				},

-

-				// #comment

-				8: function(node) {

-					writer.comment(node.value);

-				},

-

-				// Processing instruction

-				7: function(node) {

-					writer.pi(node.name, node.value);

-				},

-

-				// Doctype

-				10: function(node) {

-					writer.doctype(node.value);

-				},

-

-				// CDATA

-				4: function(node) {

-					writer.cdata(node.value);

-				},

-

- 				// Document fragment

-				11: function(node) {

-					if ((node = node.firstChild)) {

-						do {

-							walk(node);

-						} while (node = node.next);

-					}

-				}

-			};

-

-			writer.reset();

-

-			function walk(node) {

-				var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;

-

-				if (!handler) {

-					name = node.name;

-					isEmpty = node.shortEnded;

-					attrs = node.attributes;

-

-					// Sort attributes

-					if (validate && attrs && attrs.length > 1) {

-						sortedAttrs = [];

-						sortedAttrs.map = {};

-

-						elementRule = schema.getElementRule(node.name);

-						for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {

-							attrName = elementRule.attributesOrder[i];

-

-							if (attrName in attrs.map) {

-								attrValue = attrs.map[attrName];

-								sortedAttrs.map[attrName] = attrValue;

-								sortedAttrs.push({name: attrName, value: attrValue});

-							}

-						}

-

-						for (i = 0, l = attrs.length; i < l; i++) {

-							attrName = attrs[i].name;

-

-							if (!(attrName in sortedAttrs.map)) {

-								attrValue = attrs.map[attrName];

-								sortedAttrs.map[attrName] = attrValue;

-								sortedAttrs.push({name: attrName, value: attrValue});

-							}

-						}

-

-						attrs = sortedAttrs;

-					}

-

-					writer.start(node.name, attrs, isEmpty);

-

-					if (!isEmpty) {

-						if ((node = node.firstChild)) {

-							do {

-								walk(node);

-							} while (node = node.next);

-						}

-

-						writer.end(name);

-					}

-				} else

-					handler(node);

-			}

-

-			// Serialize element and treat all non elements as fragments

-			if (node.type == 1 && !settings.inner)

-				walk(node);

-			else

-				handlers[11](node);

-

-			return writer.getContent();

-		};

-	}

-})(tinymce);

-

-(function(tinymce) {

-	// Shorten names

-	var each = tinymce.each,

-		is = tinymce.is,

-		isWebKit = tinymce.isWebKit,

-		isIE = tinymce.isIE,

-		Entities = tinymce.html.Entities,

-		simpleSelectorRe = /^([a-z0-9],?)+$/i,

-		blockElementsMap = tinymce.html.Schema.blockElementsMap,

-		whiteSpaceRegExp = /^[ \t\r\n]*$/;

-

-	tinymce.create('tinymce.dom.DOMUtils', {

-		doc : null,

-		root : null,

-		files : null,

-		pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/,

-		props : {

-			"for" : "htmlFor",

-			"class" : "className",

-			className : "className",

-			checked : "checked",

-			disabled : "disabled",

-			maxlength : "maxLength",

-			readonly : "readOnly",

-			selected : "selected",

-			value : "value",

-			id : "id",

-			name : "name",

-			type : "type"

-		},

-

-		DOMUtils : function(d, s) {

-			var t = this, globalStyle, name;

-

-			t.doc = d;

-			t.win = window;

-			t.files = {};

-			t.cssFlicker = false;

-			t.counter = 0;

-			t.stdMode = !tinymce.isIE || d.documentMode >= 8;

-			t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat" || t.stdMode;

-			t.hasOuterHTML = "outerHTML" in d.createElement("a");

-

-			t.settings = s = tinymce.extend({

-				keep_values : false,

-				hex_colors : 1

-			}, s);

-			

-			t.schema = s.schema;

-			t.styles = new tinymce.html.Styles({

-				url_converter : s.url_converter,

-				url_converter_scope : s.url_converter_scope

-			}, s.schema);

-

-			// Fix IE6SP2 flicker and check it failed for pre SP2

-			if (tinymce.isIE6) {

-				try {

-					d.execCommand('BackgroundImageCache', false, true);

-				} catch (e) {

-					t.cssFlicker = true;

-				}

-			}

-

-			if (isIE && s.schema) {

-				// Add missing HTML 4/5 elements to IE

-				('abbr article aside audio canvas ' +

-				'details figcaption figure footer ' +

-				'header hgroup mark menu meter nav ' +

-				'output progress section summary ' +

-				'time video').replace(/\w+/g, function(name) {

-					d.createElement(name);

-				});

-

-				// Create all custom elements

-				for (name in s.schema.getCustomElements()) {

-					d.createElement(name);

-				}

-			}

-

-			tinymce.addUnload(t.destroy, t);

-		},

-

-		getRoot : function() {

-			var t = this, s = t.settings;

-

-			return (s && t.get(s.root_element)) || t.doc.body;

-		},

-

-		getViewPort : function(w) {

-			var d, b;

-

-			w = !w ? this.win : w;

-			d = w.document;

-			b = this.boxModel ? d.documentElement : d.body;

-

-			// Returns viewport size excluding scrollbars

-			return {

-				x : w.pageXOffset || b.scrollLeft,

-				y : w.pageYOffset || b.scrollTop,

-				w : w.innerWidth || b.clientWidth,

-				h : w.innerHeight || b.clientHeight

-			};

-		},

-

-		getRect : function(e) {

-			var p, t = this, sr;

-

-			e = t.get(e);

-			p = t.getPos(e);

-			sr = t.getSize(e);

-

-			return {

-				x : p.x,

-				y : p.y,

-				w : sr.w,

-				h : sr.h

-			};

-		},

-

-		getSize : function(e) {

-			var t = this, w, h;

-

-			e = t.get(e);

-			w = t.getStyle(e, 'width');

-			h = t.getStyle(e, 'height');

-

-			// Non pixel value, then force offset/clientWidth

-			if (w.indexOf('px') === -1)

-				w = 0;

-

-			// Non pixel value, then force offset/clientWidth

-			if (h.indexOf('px') === -1)

-				h = 0;

-

-			return {

-				w : parseInt(w) || e.offsetWidth || e.clientWidth,

-				h : parseInt(h) || e.offsetHeight || e.clientHeight

-			};

-		},

-

-		getParent : function(n, f, r) {

-			return this.getParents(n, f, r, false);

-		},

-

-		getParents : function(n, f, r, c) {

-			var t = this, na, se = t.settings, o = [];

-

-			n = t.get(n);

-			c = c === undefined;

-

-			if (se.strict_root)

-				r = r || t.getRoot();

-

-			// Wrap node name as func

-			if (is(f, 'string')) {

-				na = f;

-

-				if (f === '*') {

-					f = function(n) {return n.nodeType == 1;};

-				} else {

-					f = function(n) {

-						return t.is(n, na);

-					};

-				}

-			}

-

-			while (n) {

-				if (n == r || !n.nodeType || n.nodeType === 9)

-					break;

-

-				if (!f || f(n)) {

-					if (c)

-						o.push(n);

-					else

-						return n;

-				}

-

-				n = n.parentNode;

-			}

-

-			return c ? o : null;

-		},

-

-		get : function(e) {

-			var n;

-

-			if (e && this.doc && typeof(e) == 'string') {

-				n = e;

-				e = this.doc.getElementById(e);

-

-				// IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick

-				if (e && e.id !== n)

-					return this.doc.getElementsByName(n)[1];

-			}

-

-			return e;

-		},

-

-		getNext : function(node, selector) {

-			return this._findSib(node, selector, 'nextSibling');

-		},

-

-		getPrev : function(node, selector) {

-			return this._findSib(node, selector, 'previousSibling');

-		},

-

-

-		select : function(pa, s) {

-			var t = this;

-

-			return tinymce.dom.Sizzle(pa, t.get(s) || t.get(t.settings.root_element) || t.doc, []);

-		},

-

-		is : function(n, selector) {

-			var i;

-

-			// If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance

-			if (n.length === undefined) {

-				// Simple all selector

-				if (selector === '*')

-					return n.nodeType == 1;

-

-				// Simple selector just elements

-				if (simpleSelectorRe.test(selector)) {

-					selector = selector.toLowerCase().split(/,/);

-					n = n.nodeName.toLowerCase();

-

-					for (i = selector.length - 1; i >= 0; i--) {

-						if (selector[i] == n)

-							return true;

-					}

-

-					return false;

-				}

-			}

-

-			return tinymce.dom.Sizzle.matches(selector, n.nodeType ? [n] : n).length > 0;

-		},

-

-

-		add : function(p, n, a, h, c) {

-			var t = this;

-

-			return this.run(p, function(p) {

-				var e, k;

-

-				e = is(n, 'string') ? t.doc.createElement(n) : n;

-				t.setAttribs(e, a);

-

-				if (h) {

-					if (h.nodeType)

-						e.appendChild(h);

-					else

-						t.setHTML(e, h);

-				}

-

-				return !c ? p.appendChild(e) : e;

-			});

-		},

-

-		create : function(n, a, h) {

-			return this.add(this.doc.createElement(n), n, a, h, 1);

-		},

-

-		createHTML : function(n, a, h) {

-			var o = '', t = this, k;

-

-			o += '<' + n;

-

-			for (k in a) {

-				if (a.hasOwnProperty(k))

-					o += ' ' + k + '="' + t.encode(a[k]) + '"';

-			}

-

-			// A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime

-			if (typeof(h) != "undefined")

-				return o + '>' + h + '</' + n + '>';

-

-			return o + ' />';

-		},

-

-		remove : function(node, keep_children) {

-			return this.run(node, function(node) {

-				var child, parent = node.parentNode;

-

-				if (!parent)

-					return null;

-

-				if (keep_children) {

-					while (child = node.firstChild) {

-						// IE 8 will crash if you don't remove completely empty text nodes

-						if (!tinymce.isIE || child.nodeType !== 3 || child.nodeValue)

-							parent.insertBefore(child, node);

-						else

-							node.removeChild(child);

-					}

-				}

-

-				return parent.removeChild(node);

-			});

-		},

-

-		setStyle : function(n, na, v) {

-			var t = this;

-

-			return t.run(n, function(e) {

-				var s, i;

-

-				s = e.style;

-

-				// Camelcase it, if needed

-				na = na.replace(/-(\D)/g, function(a, b){

-					return b.toUpperCase();

-				});

-

-				// Default px suffix on these

-				if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v)))

-					v += 'px';

-

-				switch (na) {

-					case 'opacity':

-						// IE specific opacity

-						if (isIE) {

-							s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";

-

-							if (!n.currentStyle || !n.currentStyle.hasLayout)

-								s.display = 'inline-block';

-						}

-

-						// Fix for older browsers

-						s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || '';

-						break;

-

-					case 'float':

-						isIE ? s.styleFloat = v : s.cssFloat = v;

-						break;

-					

-					default:

-						s[na] = v || '';

-				}

-

-				// Force update of the style data

-				if (t.settings.update_styles)

-					t.setAttrib(e, 'data-mce-style');

-			});

-		},

-

-		getStyle : function(n, na, c) {

-			n = this.get(n);

-

-			if (!n)

-				return;

-

-			// Gecko

-			if (this.doc.defaultView && c) {

-				// Remove camelcase

-				na = na.replace(/[A-Z]/g, function(a){

-					return '-' + a;

-				});

-

-				try {

-					return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na);

-				} catch (ex) {

-					// Old safari might fail

-					return null;

-				}

-			}

-

-			// Camelcase it, if needed

-			na = na.replace(/-(\D)/g, function(a, b){

-				return b.toUpperCase();

-			});

-

-			if (na == 'float')

-				na = isIE ? 'styleFloat' : 'cssFloat';

-

-			// IE & Opera

-			if (n.currentStyle && c)

-				return n.currentStyle[na];

-

-			return n.style ? n.style[na] : undefined;

-		},

-

-		setStyles : function(e, o) {

-			var t = this, s = t.settings, ol;

-

-			ol = s.update_styles;

-			s.update_styles = 0;

-

-			each(o, function(v, n) {

-				t.setStyle(e, n, v);

-			});

-

-			// Update style info

-			s.update_styles = ol;

-			if (s.update_styles)

-				t.setAttrib(e, s.cssText);

-		},

-

-		removeAllAttribs: function(e) {

-			return this.run(e, function(e) {

-				var i, attrs = e.attributes;

-				for (i = attrs.length - 1; i >= 0; i--) {

-					e.removeAttributeNode(attrs.item(i));

-				}

-			});

-		},

-

-		setAttrib : function(e, n, v) {

-			var t = this;

-

-			// Whats the point

-			if (!e || !n)

-				return;

-

-			// Strict XML mode

-			if (t.settings.strict)

-				n = n.toLowerCase();

-

-			return this.run(e, function(e) {

-				var s = t.settings;

-				var originalValue = e.getAttribute(n);

-				if (v !== null) {

-					switch (n) {

-						case "style":

-							if (!is(v, 'string')) {

-								each(v, function(v, n) {

-									t.setStyle(e, n, v);

-								});

-

-								return;

-							}

-

-							// No mce_style for elements with these since they might get resized by the user

-							if (s.keep_values) {

-								if (v && !t._isRes(v))

-									e.setAttribute('data-mce-style', v, 2);

-								else

-									e.removeAttribute('data-mce-style', 2);

-							}

-

-							e.style.cssText = v;

-							break;

-

-						case "class":

-							e.className = v || ''; // Fix IE null bug

-							break;

-

-						case "src":

-						case "href":

-							if (s.keep_values) {

-								if (s.url_converter)

-									v = s.url_converter.call(s.url_converter_scope || t, v, n, e);

-

-								t.setAttrib(e, 'data-mce-' + n, v, 2);

-							}

-

-							break;

-

-						case "shape":

-							e.setAttribute('data-mce-style', v);

-							break;

-					}

-				}

-				if (is(v) && v !== null && v.length !== 0)

-					e.setAttribute(n, '' + v, 2);

-				else

-					e.removeAttribute(n, 2);

-

-				// fire onChangeAttrib event for attributes that have changed

-				if (tinyMCE.activeEditor && originalValue != v) {

-					var ed = tinyMCE.activeEditor;

-					ed.onSetAttrib.dispatch(ed, e, n, v);

-				}

-			});

-		},

-

-		setAttribs : function(e, o) {

-			var t = this;

-

-			return this.run(e, function(e) {

-				each(o, function(v, n) {

-					t.setAttrib(e, n, v);

-				});

-			});

-		},

-

-		getAttrib : function(e, n, dv) {

-			var v, t = this, undef;

-

-			e = t.get(e);

-

-			if (!e || e.nodeType !== 1)

-				return dv === undef ? false : dv;

-

-			if (!is(dv))

-				dv = '';

-

-			// Try the mce variant for these

-			if (/^(src|href|style|coords|shape)$/.test(n)) {

-				v = e.getAttribute("data-mce-" + n);

-

-				if (v)

-					return v;

-			}

-

-			if (isIE && t.props[n]) {

-				v = e[t.props[n]];

-				v = v && v.nodeValue ? v.nodeValue : v;

-			}

-

-			if (!v)

-				v = e.getAttribute(n, 2);

-

-			// Check boolean attribs

-			if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(n)) {

-				if (e[t.props[n]] === true && v === '')

-					return n;

-

-				return v ? n : '';

-			}

-

-			// Inner input elements will override attributes on form elements

-			if (e.nodeName === "FORM" && e.getAttributeNode(n))

-				return e.getAttributeNode(n).nodeValue;

-

-			if (n === 'style') {

-				v = v || e.style.cssText;

-

-				if (v) {

-					v = t.serializeStyle(t.parseStyle(v), e.nodeName);

-

-					if (t.settings.keep_values && !t._isRes(v))

-						e.setAttribute('data-mce-style', v);

-				}

-			}

-

-			// Remove Apple and WebKit stuff

-			if (isWebKit && n === "class" && v)

-				v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, '');

-

-			// Handle IE issues

-			if (isIE) {

-				switch (n) {

-					case 'rowspan':

-					case 'colspan':

-						// IE returns 1 as default value

-						if (v === 1)

-							v = '';

-

-						break;

-

-					case 'size':

-						// IE returns +0 as default value for size

-						if (v === '+0' || v === 20 || v === 0)

-							v = '';

-

-						break;

-

-					case 'width':

-					case 'height':

-					case 'vspace':

-					case 'checked':

-					case 'disabled':

-					case 'readonly':

-						if (v === 0)

-							v = '';

-

-						break;

-

-					case 'hspace':

-						// IE returns -1 as default value

-						if (v === -1)

-							v = '';

-

-						break;

-

-					case 'maxlength':

-					case 'tabindex':

-						// IE returns default value

-						if (v === 32768 || v === 2147483647 || v === '32768')

-							v = '';

-

-						break;

-

-					case 'multiple':

-					case 'compact':

-					case 'noshade':

-					case 'nowrap':

-						if (v === 65535)

-							return n;

-

-						return dv;

-

-					case 'shape':

-						v = v.toLowerCase();

-						break;

-

-					default:

-						// IE has odd anonymous function for event attributes

-						if (n.indexOf('on') === 0 && v)

-							v = tinymce._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1', '' + v);

-				}

-			}

-

-			return (v !== undef && v !== null && v !== '') ? '' + v : dv;

-		},

-

-		getPos : function(n, ro) {

-			var t = this, x = 0, y = 0, e, d = t.doc, r;

-

-			n = t.get(n);

-			ro = ro || d.body;

-

-			if (n) {

-				// Use getBoundingClientRect if it exists since it's faster than looping offset nodes

-				if (n.getBoundingClientRect) {

-					n = n.getBoundingClientRect();

-					e = t.boxModel ? d.documentElement : d.body;

-

-					// Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit

-					// Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position

-					x = n.left + (d.documentElement.scrollLeft || d.body.scrollLeft) - e.clientTop;

-					y = n.top + (d.documentElement.scrollTop || d.body.scrollTop) - e.clientLeft;

-

-					return {x : x, y : y};

-				}

-

-				r = n;

-				while (r && r != ro && r.nodeType) {

-					x += r.offsetLeft || 0;

-					y += r.offsetTop || 0;

-					r = r.offsetParent;

-				}

-

-				r = n.parentNode;

-				while (r && r != ro && r.nodeType) {

-					x -= r.scrollLeft || 0;

-					y -= r.scrollTop || 0;

-					r = r.parentNode;

-				}

-			}

-

-			return {x : x, y : y};

-		},

-

-		parseStyle : function(st) {

-			return this.styles.parse(st);

-		},

-

-		serializeStyle : function(o, name) {

-			return this.styles.serialize(o, name);

-		},

-

-		loadCSS : function(u) {

-			var t = this, d = t.doc, head;

-

-			if (!u)

-				u = '';

-

-			head = t.select('head')[0];

-

-			each(u.split(','), function(u) {

-				var link;

-

-				if (t.files[u])

-					return;

-

-				t.files[u] = true;

-				link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)});

-

-				// IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug

-				// This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading

-				// It's ugly but it seems to work fine.

-				if (isIE && d.documentMode && d.recalc) {

-					link.onload = function() {

-						if (d.recalc)

-							d.recalc();

-

-						link.onload = null;

-					};

-				}

-

-				head.appendChild(link);

-			});

-		},

-

-		addClass : function(e, c) {

-			return this.run(e, function(e) {

-				var o;

-

-				if (!c)

-					return 0;

-

-				if (this.hasClass(e, c))

-					return e.className;

-

-				o = this.removeClass(e, c);

-

-				return e.className = (o != '' ? (o + ' ') : '') + c;

-			});

-		},

-

-		removeClass : function(e, c) {

-			var t = this, re;

-

-			return t.run(e, function(e) {

-				var v;

-

-				if (t.hasClass(e, c)) {

-					if (!re)

-						re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");

-

-					v = e.className.replace(re, ' ');

-					v = tinymce.trim(v != ' ' ? v : '');

-

-					e.className = v;

-

-					// Empty class attr

-					if (!v) {

-						e.removeAttribute('class');

-						e.removeAttribute('className');

-					}

-

-					return v;

-				}

-

-				return e.className;

-			});

-		},

-

-		hasClass : function(n, c) {

-			n = this.get(n);

-

-			if (!n || !c)

-				return false;

-

-			return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1;

-		},

-

-		show : function(e) {

-			return this.setStyle(e, 'display', 'block');

-		},

-

-		hide : function(e) {

-			return this.setStyle(e, 'display', 'none');

-		},

-

-		isHidden : function(e) {

-			e = this.get(e);

-

-			return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none';

-		},

-

-		uniqueId : function(p) {

-			return (!p ? 'mce_' : p) + (this.counter++);

-		},

-

-		setHTML : function(element, html) {

-			var self = this;

-

-			return self.run(element, function(element) {

-				if (isIE) {

-					// Remove all child nodes, IE keeps empty text nodes in DOM

-					while (element.firstChild)

-						element.removeChild(element.firstChild);

-

-					try {

-						// IE will remove comments from the beginning

-						// unless you padd the contents with something

-						element.innerHTML = '<br />' + html;

-						element.removeChild(element.firstChild);

-					} catch (ex) {

-						// IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p

-						// This seems to fix this problem

-

-						// Create new div with HTML contents and a BR infront to keep comments

-						element = self.create('div');

-						element.innerHTML = '<br />' + html;

-

-						// Add all children from div to target

-						each (element.childNodes, function(node, i) {

-							// Skip br element

-							if (i)

-								element.appendChild(node);

-						});

-					}

-				} else

-					element.innerHTML = html;

-

-				return html;

-			});

-		},

-

-		getOuterHTML : function(elm) {

-			var doc, self = this;

-

-			elm = self.get(elm);

-

-			if (!elm)

-				return null;

-

-			if (elm.nodeType === 1 && self.hasOuterHTML)

-				return elm.outerHTML;

-

-			doc = (elm.ownerDocument || self.doc).createElement("body");

-			doc.appendChild(elm.cloneNode(true));

-

-			return doc.innerHTML;

-		},

-

-		setOuterHTML : function(e, h, d) {

-			var t = this;

-

-			function setHTML(e, h, d) {

-				var n, tp;

-

-				tp = d.createElement("body");

-				tp.innerHTML = h;

-

-				n = tp.lastChild;

-				while (n) {

-					t.insertAfter(n.cloneNode(true), e);

-					n = n.previousSibling;

-				}

-

-				t.remove(e);

-			};

-

-			return this.run(e, function(e) {

-				e = t.get(e);

-

-				// Only set HTML on elements

-				if (e.nodeType == 1) {

-					d = d || e.ownerDocument || t.doc;

-

-					if (isIE) {

-						try {

-							// Try outerHTML for IE it sometimes produces an unknown runtime error

-							if (isIE && e.nodeType == 1)

-								e.outerHTML = h;

-							else

-								setHTML(e, h, d);

-						} catch (ex) {

-							// Fix for unknown runtime error

-							setHTML(e, h, d);

-						}

-					} else

-						setHTML(e, h, d);

-				}

-			});

-		},

-

-		decode : Entities.decode,

-

-		encode : Entities.encodeAllRaw,

-

-		insertAfter : function(node, reference_node) {

-			reference_node = this.get(reference_node);

-

-			return this.run(node, function(node) {

-				var parent, nextSibling;

-

-				parent = reference_node.parentNode;

-				nextSibling = reference_node.nextSibling;

-

-				if (nextSibling)

-					parent.insertBefore(node, nextSibling);

-				else

-					parent.appendChild(node);

-

-				return node;

-			});

-		},

-

-		isBlock : function(node) {

-			var type = node.nodeType;

-

-			// If it's a node then check the type and use the nodeName

-			if (type)

-				return !!(type === 1 && blockElementsMap[node.nodeName]);

-

-			return !!blockElementsMap[node];

-		},

-

-		replace : function(n, o, k) {

-			var t = this;

-

-			if (is(o, 'array'))

-				n = n.cloneNode(true);

-

-			return t.run(o, function(o) {

-				if (k) {

-					each(tinymce.grep(o.childNodes), function(c) {

-						n.appendChild(c);

-					});

-				}

-

-				return o.parentNode.replaceChild(n, o);

-			});

-		},

-

-		rename : function(elm, name) {

-			var t = this, newElm;

-

-			if (elm.nodeName != name.toUpperCase()) {

-				// Rename block element

-				newElm = t.create(name);

-

-				// Copy attribs to new block

-				each(t.getAttribs(elm), function(attr_node) {

-					t.setAttrib(newElm, attr_node.nodeName, t.getAttrib(elm, attr_node.nodeName));

-				});

-

-				// Replace block

-				t.replace(newElm, elm, 1);

-			}

-

-			return newElm || elm;

-		},

-

-		findCommonAncestor : function(a, b) {

-			var ps = a, pe;

-

-			while (ps) {

-				pe = b;

-

-				while (pe && ps != pe)

-					pe = pe.parentNode;

-

-				if (ps == pe)

-					break;

-

-				ps = ps.parentNode;

-			}

-

-			if (!ps && a.ownerDocument)

-				return a.ownerDocument.documentElement;

-

-			return ps;

-		},

-

-		toHex : function(s) {

-			var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);

-

-			function hex(s) {

-				s = parseInt(s).toString(16);

-

-				return s.length > 1 ? s : '0' + s; // 0 -> 00

-			};

-

-			if (c) {

-				s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]);

-

-				return s;

-			}

-

-			return s;

-		},

-

-		getClasses : function() {

-			var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov;

-

-			if (t.classes)

-				return t.classes;

-

-			function addClasses(s) {

-				// IE style imports

-				each(s.imports, function(r) {

-					addClasses(r);

-				});

-

-				each(s.cssRules || s.rules, function(r) {

-					// Real type or fake it on IE

-					switch (r.type || 1) {

-						// Rule

-						case 1:

-							if (r.selectorText) {

-								each(r.selectorText.split(','), function(v) {

-									v = v.replace(/^\s*|\s*$|^\s\./g, "");

-

-									// Is internal or it doesn't contain a class

-									if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v))

-										return;

-

-									// Remove everything but class name

-									ov = v;

-									v = tinymce._replace(/.*\.([a-z0-9_\-]+).*/i, '$1', v);

-

-									// Filter classes

-									if (f && !(v = f(v, ov)))

-										return;

-

-									if (!lo[v]) {

-										cl.push({'class' : v});

-										lo[v] = 1;

-									}

-								});

-							}

-							break;

-

-						// Import

-						case 3:

-							addClasses(r.styleSheet);

-							break;

-					}

-				});

-			};

-

-			try {

-				each(t.doc.styleSheets, addClasses);

-			} catch (ex) {

-				// Ignore

-			}

-

-			if (cl.length > 0)

-				t.classes = cl;

-

-			return cl;

-		},

-

-		run : function(e, f, s) {

-			var t = this, o;

-

-			if (t.doc && typeof(e) === 'string')

-				e = t.get(e);

-

-			if (!e)

-				return false;

-

-			s = s || this;

-			if (!e.nodeType && (e.length || e.length === 0)) {

-				o = [];

-

-				each(e, function(e, i) {

-					if (e) {

-						if (typeof(e) == 'string')

-							e = t.doc.getElementById(e);

-

-						o.push(f.call(s, e, i));

-					}

-				});

-

-				return o;

-			}

-

-			return f.call(s, e);

-		},

-

-		getAttribs : function(n) {

-			var o;

-

-			n = this.get(n);

-

-			if (!n)

-				return [];

-

-			if (isIE) {

-				o = [];

-

-				// Object will throw exception in IE

-				if (n.nodeName == 'OBJECT')

-					return n.attributes;

-

-				// IE doesn't keep the selected attribute if you clone option elements

-				if (n.nodeName === 'OPTION' && this.getAttrib(n, 'selected'))

-					o.push({specified : 1, nodeName : 'selected'});

-

-				// It's crazy that this is faster in IE but it's because it returns all attributes all the time

-				n.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, '').replace(/[\w:\-]+/gi, function(a) {

-					o.push({specified : 1, nodeName : a});

-				});

-

-				return o;

-			}

-

-			return n.attributes;

-		},

-

-		isEmpty : function(node, elements) {

-			var self = this, i, attributes, type, walker, name, parentNode;

-

-			node = node.firstChild;

-			if (node) {

-				walker = new tinymce.dom.TreeWalker(node);

-				elements = elements || self.schema ? self.schema.getNonEmptyElements() : null;

-

-				do {

-					type = node.nodeType;

-

-					if (type === 1) {

-						// Ignore bogus elements

-						if (node.getAttribute('data-mce-bogus'))

-							continue;

-

-						// Keep empty elements like <img />

-						name = node.nodeName.toLowerCase();

-						if (elements && elements[name]) {

-							// Ignore single BR elements in blocks like <p><br /></p>

-							parentNode = node.parentNode;

-							if (name === 'br' && self.isBlock(parentNode) && parentNode.firstChild === node && parentNode.lastChild === node) {

-								continue;

-							}

-

-							return false;

-						}

-

-						// Keep elements with data-bookmark attributes or name attribute like <a name="1"></a>

-						attributes = self.getAttribs(node);

-						i = node.attributes.length;

-						while (i--) {

-							name = node.attributes[i].nodeName;

-							if (name === "name" || name === 'data-mce-bookmark')

-								return false;

-						}

-					}

-

-					// Keep non whitespace text nodes

-					if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue)))

-						return false;

-				} while (node = walker.next());

-			}

-

-			return true;

-		},

-

-		destroy : function(s) {

-			var t = this;

-

-			if (t.events)

-				t.events.destroy();

-

-			t.win = t.doc = t.root = t.events = null;

-

-			// Manual destroy then remove unload handler

-			if (!s)

-				tinymce.removeUnload(t.destroy);

-		},

-

-		createRng : function() {

-			var d = this.doc;

-

-			return d.createRange ? d.createRange() : new tinymce.dom.Range(this);

-		},

-

-		nodeIndex : function(node, normalized) {

-			var idx = 0, lastNodeType, lastNode, nodeType;

-

-			if (node) {

-				for (lastNodeType = node.nodeType, node = node.previousSibling, lastNode = node; node; node = node.previousSibling) {

-					nodeType = node.nodeType;

-

-					// Normalize text nodes

-					if (normalized && nodeType == 3) {

-						if (nodeType == lastNodeType || !node.nodeValue.length)

-							continue;

-					}

-					idx++;

-					lastNodeType = nodeType;

-				}

-			}

-

-			return idx;

-		},

-

-		split : function(pe, e, re) {

-			var t = this, r = t.createRng(), bef, aft, pa;

-

-			// W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sense

-			// but we don't want that in our code since it serves no purpose for the end user

-			// For example if this is chopped:

-			//   <p>text 1<span><b>CHOP</b></span>text 2</p>

-			// would produce:

-			//   <p>text 1<span></span></p><b>CHOP</b><p><span></span>text 2</p>

-			// this function will then trim of empty edges and produce:

-			//   <p>text 1</p><b>CHOP</b><p>text 2</p>

-			function trim(node) {

-				var i, children = node.childNodes, type = node.nodeType;

-

-				function surroundedBySpans(node) {

-					var previousIsSpan = node.previousSibling && node.previousSibling.nodeName == 'SPAN';

-					var nextIsSpan = node.nextSibling && node.nextSibling.nodeName == 'SPAN';

-					return previousIsSpan && nextIsSpan;

-				}

-

-				if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark')

-					return;

-

-				for (i = children.length - 1; i >= 0; i--)

-					trim(children[i]);

-

-				if (type != 9) {

-					// Keep non whitespace text nodes

-					if (type == 3 && node.nodeValue.length > 0) {

-						// If parent element isn't a block or there isn't any useful contents for example "<p>   </p>"

-						// Also keep text nodes with only spaces if surrounded by spans.

-						// eg. "<p><span>a</span> <span>b</span></p>" should keep space between a and b

-						var trimmedLength = tinymce.trim(node.nodeValue).length;

-						if (!t.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength == 0 && surroundedBySpans(node))

-							return;

-					} else if (type == 1) {

-						// If the only child is a bookmark then move it up

-						children = node.childNodes;

-						if (children.length == 1 && children[0] && children[0].nodeType == 1 && children[0].getAttribute('data-mce-type') == 'bookmark')

-							node.parentNode.insertBefore(children[0], node);

-

-						// Keep non empty elements or img, hr etc

-						if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName))

-							return;

-					}

-

-					t.remove(node);

-				}

-

-				return node;

-			};

-

-			if (pe && e) {

-				// Get before chunk

-				r.setStart(pe.parentNode, t.nodeIndex(pe));

-				r.setEnd(e.parentNode, t.nodeIndex(e));

-				bef = r.extractContents();

-

-				// Get after chunk

-				r = t.createRng();

-				r.setStart(e.parentNode, t.nodeIndex(e) + 1);

-				r.setEnd(pe.parentNode, t.nodeIndex(pe) + 1);

-				aft = r.extractContents();

-

-				// Insert before chunk

-				pa = pe.parentNode;

-				pa.insertBefore(trim(bef), pe);

-

-				// Insert middle chunk

-				if (re)

-				pa.replaceChild(re, e);

-			else

-				pa.insertBefore(e, pe);

-

-				// Insert after chunk

-				pa.insertBefore(trim(aft), pe);

-				t.remove(pe);

-

-				return re || e;

-			}

-		},

-

-		bind : function(target, name, func, scope) {

-			var t = this;

-

-			if (!t.events)

-				t.events = new tinymce.dom.EventUtils();

-

-			return t.events.add(target, name, func, scope || this);

-		},

-

-		unbind : function(target, name, func) {

-			var t = this;

-

-			if (!t.events)

-				t.events = new tinymce.dom.EventUtils();

-

-			return t.events.remove(target, name, func);

-		},

-

-

-		_findSib : function(node, selector, name) {

-			var t = this, f = selector;

-

-			if (node) {

-				// If expression make a function of it using is

-				if (is(f, 'string')) {

-					f = function(node) {

-						return t.is(node, selector);

-					};

-				}

-

-				// Loop all siblings

-				for (node = node[name]; node; node = node[name]) {

-					if (f(node))

-						return node;

-				}

-			}

-

-			return null;

-		},

-

-		_isRes : function(c) {

-			// Is live resizble element

-			return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c);

-		}

-

-		/*

-		walk : function(n, f, s) {

-			var d = this.doc, w;

-

-			if (d.createTreeWalker) {

-				w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);

-

-				while ((n = w.nextNode()) != null)

-					f.call(s || this, n);

-			} else

-				tinymce.walk(n, f, 'childNodes', s);

-		}

-		*/

-

-		/*

-		toRGB : function(s) {

-			var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s);

-

-			if (c) {

-				// #FFF -> #FFFFFF

-				if (!is(c[3]))

-					c[3] = c[2] = c[1];

-

-				return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")";

-			}

-

-			return s;

-		}

-		*/

-	});

-

-	tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});

-})(tinymce);

-

-(function(ns) {

-	// Range constructor

-	function Range(dom) {

-		var t = this,

-			doc = dom.doc,

-			EXTRACT = 0,

-			CLONE = 1,

-			DELETE = 2,

-			TRUE = true,

-			FALSE = false,

-			START_OFFSET = 'startOffset',

-			START_CONTAINER = 'startContainer',

-			END_CONTAINER = 'endContainer',

-			END_OFFSET = 'endOffset',

-			extend = tinymce.extend,

-			nodeIndex = dom.nodeIndex;

-

-		extend(t, {

-			// Inital states

-			startContainer : doc,

-			startOffset : 0,

-			endContainer : doc,

-			endOffset : 0,

-			collapsed : TRUE,

-			commonAncestorContainer : doc,

-

-			// Range constants

-			START_TO_START : 0,

-			START_TO_END : 1,

-			END_TO_END : 2,

-			END_TO_START : 3,

-

-			// Public methods

-			setStart : setStart,

-			setEnd : setEnd,

-			setStartBefore : setStartBefore,

-			setStartAfter : setStartAfter,

-			setEndBefore : setEndBefore,

-			setEndAfter : setEndAfter,

-			collapse : collapse,

-			selectNode : selectNode,

-			selectNodeContents : selectNodeContents,

-			compareBoundaryPoints : compareBoundaryPoints,

-			deleteContents : deleteContents,

-			extractContents : extractContents,

-			cloneContents : cloneContents,

-			insertNode : insertNode,

-			surroundContents : surroundContents,

-			cloneRange : cloneRange

-		});

-

-		function setStart(n, o) {

-			_setEndPoint(TRUE, n, o);

-		};

-

-		function setEnd(n, o) {

-			_setEndPoint(FALSE, n, o);

-		};

-

-		function setStartBefore(n) {

-			setStart(n.parentNode, nodeIndex(n));

-		};

-

-		function setStartAfter(n) {

-			setStart(n.parentNode, nodeIndex(n) + 1);

-		};

-

-		function setEndBefore(n) {

-			setEnd(n.parentNode, nodeIndex(n));

-		};

-

-		function setEndAfter(n) {

-			setEnd(n.parentNode, nodeIndex(n) + 1);

-		};

-

-		function collapse(ts) {

-			if (ts) {

-				t[END_CONTAINER] = t[START_CONTAINER];

-				t[END_OFFSET] = t[START_OFFSET];

-			} else {

-				t[START_CONTAINER] = t[END_CONTAINER];

-				t[START_OFFSET] = t[END_OFFSET];

-			}

-

-			t.collapsed = TRUE;

-		};

-

-		function selectNode(n) {

-			setStartBefore(n);

-			setEndAfter(n);

-		};

-

-		function selectNodeContents(n) {

-			setStart(n, 0);

-			setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length);

-		};

-

-		function compareBoundaryPoints(h, r) {

-			var sc = t[START_CONTAINER], so = t[START_OFFSET], ec = t[END_CONTAINER], eo = t[END_OFFSET],

-			rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset;

-

-			// Check START_TO_START

-			if (h === 0)

-				return _compareBoundaryPoints(sc, so, rsc, rso);

-	

-			// Check START_TO_END

-			if (h === 1)

-				return _compareBoundaryPoints(ec, eo, rsc, rso);

-	

-			// Check END_TO_END

-			if (h === 2)

-				return _compareBoundaryPoints(ec, eo, rec, reo);

-	

-			// Check END_TO_START

-			if (h === 3) 

-				return _compareBoundaryPoints(sc, so, rec, reo);

-		};

-

-		function deleteContents() {

-			_traverse(DELETE);

-		};

-

-		function extractContents() {

-			return _traverse(EXTRACT);

-		};

-

-		function cloneContents() {

-			return _traverse(CLONE);

-		};

-

-		function insertNode(n) {

-			var startContainer = this[START_CONTAINER],

-				startOffset = this[START_OFFSET], nn, o;

-

-			// Node is TEXT_NODE or CDATA

-			if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) {

-				if (!startOffset) {

-					// At the start of text

-					startContainer.parentNode.insertBefore(n, startContainer);

-				} else if (startOffset >= startContainer.nodeValue.length) {

-					// At the end of text

-					dom.insertAfter(n, startContainer);

-				} else {

-					// Middle, need to split

-					nn = startContainer.splitText(startOffset);

-					startContainer.parentNode.insertBefore(n, nn);

-				}

-			} else {

-				// Insert element node

-				if (startContainer.childNodes.length > 0)

-					o = startContainer.childNodes[startOffset];

-

-				if (o)

-					startContainer.insertBefore(n, o);

-				else

-					startContainer.appendChild(n);

-			}

-		};

-

-		function surroundContents(n) {

-			var f = t.extractContents();

-

-			t.insertNode(n);

-			n.appendChild(f);

-			t.selectNode(n);

-		};

-

-		function cloneRange() {

-			return extend(new Range(dom), {

-				startContainer : t[START_CONTAINER],

-				startOffset : t[START_OFFSET],

-				endContainer : t[END_CONTAINER],

-				endOffset : t[END_OFFSET],

-				collapsed : t.collapsed,

-				commonAncestorContainer : t.commonAncestorContainer

-			});

-		};

-

-		// Private methods

-

-		function _getSelectedNode(container, offset) {

-			var child;

-

-			if (container.nodeType == 3 /* TEXT_NODE */)

-				return container;

-

-			if (offset < 0)

-				return container;

-

-			child = container.firstChild;

-			while (child && offset > 0) {

-				--offset;

-				child = child.nextSibling;

-			}

-

-			if (child)

-				return child;

-

-			return container;

-		};

-

-		function _isCollapsed() {

-			return (t[START_CONTAINER] == t[END_CONTAINER] && t[START_OFFSET] == t[END_OFFSET]);

-		};

-

-		function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) {

-			var c, offsetC, n, cmnRoot, childA, childB;

-			

-			// In the first case the boundary-points have the same container. A is before B

-			// if its offset is less than the offset of B, A is equal to B if its offset is

-			// equal to the offset of B, and A is after B if its offset is greater than the

-			// offset of B.

-			if (containerA == containerB) {

-				if (offsetA == offsetB)

-					return 0; // equal

-

-				if (offsetA < offsetB)

-					return -1; // before

-

-				return 1; // after

-			}

-

-			// In the second case a child node C of the container of A is an ancestor

-			// container of B. In this case, A is before B if the offset of A is less than or

-			// equal to the index of the child node C and A is after B otherwise.

-			c = containerB;

-			while (c && c.parentNode != containerA)

-				c = c.parentNode;

-

-			if (c) {

-				offsetC = 0;

-				n = containerA.firstChild;

-

-				while (n != c && offsetC < offsetA) {

-					offsetC++;

-					n = n.nextSibling;

-				}

-

-				if (offsetA <= offsetC)

-					return -1; // before

-

-				return 1; // after

-			}

-

-			// In the third case a child node C of the container of B is an ancestor container

-			// of A. In this case, A is before B if the index of the child node C is less than

-			// the offset of B and A is after B otherwise.

-			c = containerA;

-			while (c && c.parentNode != containerB) {

-				c = c.parentNode;

-			}

-

-			if (c) {

-				offsetC = 0;

-				n = containerB.firstChild;

-

-				while (n != c && offsetC < offsetB) {

-					offsetC++;

-					n = n.nextSibling;

-				}

-

-				if (offsetC < offsetB)

-					return -1; // before

-

-				return 1; // after

-			}

-

-			// In the fourth case, none of three other cases hold: the containers of A and B

-			// are siblings or descendants of sibling nodes. In this case, A is before B if

-			// the container of A is before the container of B in a pre-order traversal of the

-			// Ranges' context tree and A is after B otherwise.

-			cmnRoot = dom.findCommonAncestor(containerA, containerB);

-			childA = containerA;

-

-			while (childA && childA.parentNode != cmnRoot)

-				childA = childA.parentNode;

-

-			if (!childA)

-				childA = cmnRoot;

-

-			childB = containerB;

-			while (childB && childB.parentNode != cmnRoot)

-				childB = childB.parentNode;

-

-			if (!childB)

-				childB = cmnRoot;

-

-			if (childA == childB)

-				return 0; // equal

-

-			n = cmnRoot.firstChild;

-			while (n) {

-				if (n == childA)

-					return -1; // before

-

-				if (n == childB)

-					return 1; // after

-

-				n = n.nextSibling;

-			}

-		};

-

-		function _setEndPoint(st, n, o) {

-			var ec, sc;

-

-			if (st) {

-				t[START_CONTAINER] = n;

-				t[START_OFFSET] = o;

-			} else {

-				t[END_CONTAINER] = n;

-				t[END_OFFSET] = o;

-			}

-

-			// If one boundary-point of a Range is set to have a root container

-			// other than the current one for the Range, the Range is collapsed to

-			// the new position. This enforces the restriction that both boundary-

-			// points of a Range must have the same root container.

-			ec = t[END_CONTAINER];

-			while (ec.parentNode)

-				ec = ec.parentNode;

-

-			sc = t[START_CONTAINER];

-			while (sc.parentNode)

-				sc = sc.parentNode;

-

-			if (sc == ec) {

-				// The start position of a Range is guaranteed to never be after the

-				// end position. To enforce this restriction, if the start is set to

-				// be at a position after the end, the Range is collapsed to that

-				// position.

-				if (_compareBoundaryPoints(t[START_CONTAINER], t[START_OFFSET], t[END_CONTAINER], t[END_OFFSET]) > 0)

-					t.collapse(st);

-			} else

-				t.collapse(st);

-

-			t.collapsed = _isCollapsed();

-			t.commonAncestorContainer = dom.findCommonAncestor(t[START_CONTAINER], t[END_CONTAINER]);

-		};

-

-		function _traverse(how) {

-			var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep;

-

-			if (t[START_CONTAINER] == t[END_CONTAINER])

-				return _traverseSameContainer(how);

-

-			for (c = t[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {

-				if (p == t[START_CONTAINER])

-					return _traverseCommonStartContainer(c, how);

-

-				++endContainerDepth;

-			}

-

-			for (c = t[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {

-				if (p == t[END_CONTAINER])

-					return _traverseCommonEndContainer(c, how);

-

-				++startContainerDepth;

-			}

-

-			depthDiff = startContainerDepth - endContainerDepth;

-

-			startNode = t[START_CONTAINER];

-			while (depthDiff > 0) {

-				startNode = startNode.parentNode;

-				depthDiff--;

-			}

-

-			endNode = t[END_CONTAINER];

-			while (depthDiff < 0) {

-				endNode = endNode.parentNode;

-				depthDiff++;

-			}

-

-			// ascend the ancestor hierarchy until we have a common parent.

-			for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) {

-				startNode = sp;

-				endNode = ep;

-			}

-

-			return _traverseCommonAncestors(startNode, endNode, how);

-		};

-

-		 function _traverseSameContainer(how) {

-			var frag, s, sub, n, cnt, sibling, xferNode;

-

-			if (how != DELETE)

-				frag = doc.createDocumentFragment();

-

-			// If selection is empty, just return the fragment

-			if (t[START_OFFSET] == t[END_OFFSET])

-				return frag;

-

-			// Text node needs special case handling

-			if (t[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) {

-				// get the substring

-				s = t[START_CONTAINER].nodeValue;

-				sub = s.substring(t[START_OFFSET], t[END_OFFSET]);

-

-				// set the original text node to its new value

-				if (how != CLONE) {

-					t[START_CONTAINER].deleteData(t[START_OFFSET], t[END_OFFSET] - t[START_OFFSET]);

-

-					// Nothing is partially selected, so collapse to start point

-					t.collapse(TRUE);

-				}

-

-				if (how == DELETE)

-					return;

-

-				frag.appendChild(doc.createTextNode(sub));

-				return frag;

-			}

-

-			// Copy nodes between the start/end offsets.

-			n = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]);

-			cnt = t[END_OFFSET] - t[START_OFFSET];

-

-			while (cnt > 0) {

-				sibling = n.nextSibling;

-				xferNode = _traverseFullySelected(n, how);

-

-				if (frag)

-					frag.appendChild( xferNode );

-

-				--cnt;

-				n = sibling;

-			}

-

-			// Nothing is partially selected, so collapse to start point

-			if (how != CLONE)

-				t.collapse(TRUE);

-

-			return frag;

-		};

-

-		function _traverseCommonStartContainer(endAncestor, how) {

-			var frag, n, endIdx, cnt, sibling, xferNode;

-

-			if (how != DELETE)

-				frag = doc.createDocumentFragment();

-

-			n = _traverseRightBoundary(endAncestor, how);

-

-			if (frag)

-				frag.appendChild(n);

-

-			endIdx = nodeIndex(endAncestor);

-			cnt = endIdx - t[START_OFFSET];

-

-			if (cnt <= 0) {

-				// Collapse to just before the endAncestor, which

-				// is partially selected.

-				if (how != CLONE) {

-					t.setEndBefore(endAncestor);

-					t.collapse(FALSE);

-				}

-

-				return frag;

-			}

-

-			n = endAncestor.previousSibling;

-			while (cnt > 0) {

-				sibling = n.previousSibling;

-				xferNode = _traverseFullySelected(n, how);

-

-				if (frag)

-					frag.insertBefore(xferNode, frag.firstChild);

-

-				--cnt;

-				n = sibling;

-			}

-

-			// Collapse to just before the endAncestor, which

-			// is partially selected.

-			if (how != CLONE) {

-				t.setEndBefore(endAncestor);

-				t.collapse(FALSE);

-			}

-

-			return frag;

-		};

-

-		function _traverseCommonEndContainer(startAncestor, how) {

-			var frag, startIdx, n, cnt, sibling, xferNode;

-

-			if (how != DELETE)

-				frag = doc.createDocumentFragment();

-

-			n = _traverseLeftBoundary(startAncestor, how);

-			if (frag)

-				frag.appendChild(n);

-

-			startIdx = nodeIndex(startAncestor);

-			++startIdx; // Because we already traversed it

-

-			cnt = t[END_OFFSET] - startIdx;

-			n = startAncestor.nextSibling;

-			while (cnt > 0) {

-				sibling = n.nextSibling;

-				xferNode = _traverseFullySelected(n, how);

-

-				if (frag)

-					frag.appendChild(xferNode);

-

-				--cnt;

-				n = sibling;

-			}

-

-			if (how != CLONE) {

-				t.setStartAfter(startAncestor);

-				t.collapse(TRUE);

-			}

-

-			return frag;

-		};

-

-		function _traverseCommonAncestors(startAncestor, endAncestor, how) {

-			var n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling;

-

-			if (how != DELETE)

-				frag = doc.createDocumentFragment();

-

-			n = _traverseLeftBoundary(startAncestor, how);

-			if (frag)

-				frag.appendChild(n);

-

-			commonParent = startAncestor.parentNode;

-			startOffset = nodeIndex(startAncestor);

-			endOffset = nodeIndex(endAncestor);

-			++startOffset;

-

-			cnt = endOffset - startOffset;

-			sibling = startAncestor.nextSibling;

-

-			while (cnt > 0) {

-				nextSibling = sibling.nextSibling;

-				n = _traverseFullySelected(sibling, how);

-

-				if (frag)

-					frag.appendChild(n);

-

-				sibling = nextSibling;

-				--cnt;

-			}

-

-			n = _traverseRightBoundary(endAncestor, how);

-

-			if (frag)

-				frag.appendChild(n);

-

-			if (how != CLONE) {

-				t.setStartAfter(startAncestor);

-				t.collapse(TRUE);

-			}

-

-			return frag;

-		};

-

-		function _traverseRightBoundary(root, how) {

-			var next = _getSelectedNode(t[END_CONTAINER], t[END_OFFSET] - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != t[END_CONTAINER];

-

-			if (next == root)

-				return _traverseNode(next, isFullySelected, FALSE, how);

-

-			parent = next.parentNode;

-			clonedParent = _traverseNode(parent, FALSE, FALSE, how);

-

-			while (parent) {

-				while (next) {

-					prevSibling = next.previousSibling;

-					clonedChild = _traverseNode(next, isFullySelected, FALSE, how);

-

-					if (how != DELETE)

-						clonedParent.insertBefore(clonedChild, clonedParent.firstChild);

-

-					isFullySelected = TRUE;

-					next = prevSibling;

-				}

-

-				if (parent == root)

-					return clonedParent;

-

-				next = parent.previousSibling;

-				parent = parent.parentNode;

-

-				clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how);

-

-				if (how != DELETE)

-					clonedGrandParent.appendChild(clonedParent);

-

-				clonedParent = clonedGrandParent;

-			}

-		};

-

-		function _traverseLeftBoundary(root, how) {

-			var next = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]), isFullySelected = next != t[START_CONTAINER], parent, clonedParent, nextSibling, clonedChild, clonedGrandParent;

-

-			if (next == root)

-				return _traverseNode(next, isFullySelected, TRUE, how);

-

-			parent = next.parentNode;

-			clonedParent = _traverseNode(parent, FALSE, TRUE, how);

-

-			while (parent) {

-				while (next) {

-					nextSibling = next.nextSibling;

-					clonedChild = _traverseNode(next, isFullySelected, TRUE, how);

-

-					if (how != DELETE)

-						clonedParent.appendChild(clonedChild);

-

-					isFullySelected = TRUE;

-					next = nextSibling;

-				}

-

-				if (parent == root)

-					return clonedParent;

-

-				next = parent.nextSibling;

-				parent = parent.parentNode;

-

-				clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how);

-

-				if (how != DELETE)

-					clonedGrandParent.appendChild(clonedParent);

-

-				clonedParent = clonedGrandParent;

-			}

-		};

-

-		function _traverseNode(n, isFullySelected, isLeft, how) {

-			var txtValue, newNodeValue, oldNodeValue, offset, newNode;

-

-			if (isFullySelected)

-				return _traverseFullySelected(n, how);

-

-			if (n.nodeType == 3 /* TEXT_NODE */) {

-				txtValue = n.nodeValue;

-

-				if (isLeft) {

-					offset = t[START_OFFSET];

-					newNodeValue = txtValue.substring(offset);

-					oldNodeValue = txtValue.substring(0, offset);

-				} else {

-					offset = t[END_OFFSET];

-					newNodeValue = txtValue.substring(0, offset);

-					oldNodeValue = txtValue.substring(offset);

-				}

-

-				if (how != CLONE)

-					n.nodeValue = oldNodeValue;

-

-				if (how == DELETE)

-					return;

-

-				newNode = n.cloneNode(FALSE);

-				newNode.nodeValue = newNodeValue;

-

-				return newNode;

-			}

-

-			if (how == DELETE)

-				return;

-

-			return n.cloneNode(FALSE);

-		};

-

-		function _traverseFullySelected(n, how) {

-			if (how != DELETE)

-				return how == CLONE ? n.cloneNode(TRUE) : n;

-

-			n.parentNode.removeChild(n);

-		};

-	};

-

-	ns.Range = Range;

-})(tinymce.dom);

-

-(function() {

-	function Selection(selection) {

-		var self = this, dom = selection.dom, TRUE = true, FALSE = false;

-

-		function getPosition(rng, start) {

-			var checkRng, startIndex = 0, endIndex, inside,

-				children, child, offset, index, position = -1, parent;

-

-			// Setup test range, collapse it and get the parent

-			checkRng = rng.duplicate();

-			checkRng.collapse(start);

-			parent = checkRng.parentElement();

-

-			// Check if the selection is within the right document

-			if (parent.ownerDocument !== selection.dom.doc)

-				return;

-

-			// IE will report non editable elements as it's parent so look for an editable one

-			while (parent.contentEditable === "false") {

-				parent = parent.parentNode;

-			}

-

-			// If parent doesn't have any children then return that we are inside the element

-			if (!parent.hasChildNodes()) {

-				return {node : parent, inside : 1};

-			}

-

-			// Setup node list and endIndex

-			children = parent.children;

-			endIndex = children.length - 1;

-

-			// Perform a binary search for the position

-			while (startIndex <= endIndex) {

-				index = Math.floor((startIndex + endIndex) / 2);

-

-				// Move selection to node and compare the ranges

-				child = children[index];

-				checkRng.moveToElementText(child);

-				position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng);

-

-				// Before/after or an exact match

-				if (position > 0) {

-					endIndex = index - 1;

-				} else if (position < 0) {

-					startIndex = index + 1;

-				} else {

-					return {node : child};

-				}

-			}

-

-			// Check if child position is before or we didn't find a position

-			if (position < 0) {

-				// No element child was found use the parent element and the offset inside that

-				if (!child) {

-					checkRng.moveToElementText(parent);

-					checkRng.collapse(true);

-					child = parent;

-					inside = true;

-				} else

-					checkRng.collapse(false);

-

-				checkRng.setEndPoint(start ? 'EndToStart' : 'EndToEnd', rng);

-

-				// Fix for edge case: <div style="width: 100px; height:100px;"><table>..</table>ab|c</div>

-				if (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) > 0) {

-					checkRng = rng.duplicate();

-					checkRng.collapse(start);

-

-					offset = -1;

-					while (parent == checkRng.parentElement()) {

-						if (checkRng.move('character', -1) == 0)

-							break;

-

-						offset++;

-					}

-				}

-

-				offset = offset || checkRng.text.replace('\r\n', ' ').length;

-			} else {

-				// Child position is after the selection endpoint

-				checkRng.collapse(true);

-				checkRng.setEndPoint(start ? 'StartToStart' : 'StartToEnd', rng);

-

-				// Get the length of the text to find where the endpoint is relative to it's container

-				offset = checkRng.text.replace('\r\n', ' ').length;

-			}

-

-			return {node : child, position : position, offset : offset, inside : inside};

-		};

-

-		// Returns a W3C DOM compatible range object by using the IE Range API

-		function getRange() {

-			var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark, fail;

-

-			// If selection is outside the current document just return an empty range

-			element = ieRange.item ? ieRange.item(0) : ieRange.parentElement();

-			if (element.ownerDocument != dom.doc)

-				return domRange;

-

-			collapsed = selection.isCollapsed();

-

-			// Handle control selection

-			if (ieRange.item) {

-				domRange.setStart(element.parentNode, dom.nodeIndex(element));

-				domRange.setEnd(domRange.startContainer, domRange.startOffset + 1);

-

-				return domRange;

-			}

-

-			function findEndPoint(start) {

-				var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue;

-

-				container = endPoint.node;

-				offset = endPoint.offset;

-

-				if (endPoint.inside && !container.hasChildNodes()) {

-					domRange[start ? 'setStart' : 'setEnd'](container, 0);

-					return;

-				}

-

-				if (offset === undef) {

-					domRange[start ? 'setStartBefore' : 'setEndAfter'](container);

-					return;

-				}

-

-				if (endPoint.position < 0) {

-					sibling = endPoint.inside ? container.firstChild : container.nextSibling;

-

-					if (!sibling) {

-						domRange[start ? 'setStartAfter' : 'setEndAfter'](container);

-						return;

-					}

-

-					if (!offset) {

-						if (sibling.nodeType == 3)

-							domRange[start ? 'setStart' : 'setEnd'](sibling, 0);

-						else

-							domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling);

-

-						return;

-					}

-

-					// Find the text node and offset

-					while (sibling) {

-						nodeValue = sibling.nodeValue;

-						textNodeOffset += nodeValue.length;

-

-						// We are at or passed the position we where looking for

-						if (textNodeOffset >= offset) {

-							container = sibling;

-							textNodeOffset -= offset;

-							textNodeOffset = nodeValue.length - textNodeOffset;

-							break;

-						}

-

-						sibling = sibling.nextSibling;

-					}

-				} else {

-					// Find the text node and offset

-					sibling = container.previousSibling;

-

-					if (!sibling)

-						return domRange[start ? 'setStartBefore' : 'setEndBefore'](container);

-

-					// If there isn't any text to loop then use the first position

-					if (!offset) {

-						if (container.nodeType == 3)

-							domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length);

-						else

-							domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling);

-

-						return;

-					}

-

-					while (sibling) {

-						textNodeOffset += sibling.nodeValue.length;

-

-						// We are at or passed the position we where looking for

-						if (textNodeOffset >= offset) {

-							container = sibling;

-							textNodeOffset -= offset;

-							break;

-						}

-

-						sibling = sibling.previousSibling;

-					}

-				}

-

-				domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset);

-			};

-

-			try {

-				// Find start point

-				findEndPoint(true);

-

-				// Find end point if needed

-				if (!collapsed)

-					findEndPoint();

-			} catch (ex) {

-				// IE has a nasty bug where text nodes might throw "invalid argument" when you

-				// access the nodeValue or other properties of text nodes. This seems to happend when

-				// text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it.

-				if (ex.number == -2147024809) {

-					// Get the current selection

-					bookmark = self.getBookmark(2);

-

-					// Get start element

-					tmpRange = ieRange.duplicate();

-					tmpRange.collapse(true);

-					element = tmpRange.parentElement();

-

-					// Get end element

-					if (!collapsed) {

-						tmpRange = ieRange.duplicate();

-						tmpRange.collapse(false);

-						element2 = tmpRange.parentElement();

-						element2.innerHTML = element2.innerHTML;

-					}

-

-					// Remove the broken elements

-					element.innerHTML = element.innerHTML;

-

-					// Restore the selection

-					self.moveToBookmark(bookmark);

-

-					// Since the range has moved we need to re-get it

-					ieRange = selection.getRng();

-

-					// Find start point

-					findEndPoint(true);

-

-					// Find end point if needed

-					if (!collapsed)

-						findEndPoint();

-				} else

-					throw ex; // Throw other errors

-			}

-

-			return domRange;

-		};

-

-		this.getBookmark = function(type) {

-			var rng = selection.getRng(), start, end, bookmark = {};

-

-			function getIndexes(node) {

-				var node, parent, root, children, i, indexes = [];

-

-				parent = node.parentNode;

-				root = dom.getRoot().parentNode;

-

-				while (parent != root && parent.nodeType !== 9) {

-					children = parent.children;

-

-					i = children.length;

-					while (i--) {

-						if (node === children[i]) {

-							indexes.push(i);

-							break;

-						}

-					}

-

-					node = parent;

-					parent = parent.parentNode;

-				}

-

-				return indexes;

-			};

-

-			function getBookmarkEndPoint(start) {

-				var position;

-

-				position = getPosition(rng, start);

-				if (position) {

-					return {

-						position : position.position,

-						offset : position.offset,

-						indexes : getIndexes(position.node),

-						inside : position.inside

-					};

-				}

-			};

-

-			// Non ubstructive bookmark

-			if (type === 2) {

-				// Handle text selection

-				if (!rng.item) {

-					bookmark.start = getBookmarkEndPoint(true);

-

-					if (!selection.isCollapsed())

-						bookmark.end = getBookmarkEndPoint();

-				} else

-					bookmark.start = {ctrl : true, indexes : getIndexes(rng.item(0))};

-			}

-

-			return bookmark;

-		};

-

-		this.moveToBookmark = function(bookmark) {

-			var rng, body = dom.doc.body;

-

-			function resolveIndexes(indexes) {

-				var node, i, idx, children;

-

-				node = dom.getRoot();

-				for (i = indexes.length - 1; i >= 0; i--) {

-					children = node.children;

-					idx = indexes[i];

-

-					if (idx <= children.length - 1) {

-						node = children[idx];

-					}

-				}

-

-				return node;

-			};

-			

-			function setBookmarkEndPoint(start) {

-				var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef;

-

-				if (endPoint) {

-					moveLeft = endPoint.position > 0;

-

-					moveRng = body.createTextRange();

-					moveRng.moveToElementText(resolveIndexes(endPoint.indexes));

-

-					offset = endPoint.offset;

-					if (offset !== undef) {

-						moveRng.collapse(endPoint.inside || moveLeft);

-						moveRng.moveStart('character', moveLeft ? -offset : offset);

-					} else

-						moveRng.collapse(start);

-

-					rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng);

-

-					if (start)

-						rng.collapse(true);

-				}

-			};

-

-			if (bookmark.start) {

-				if (bookmark.start.ctrl) {

-					rng = body.createControlRange();

-					rng.addElement(resolveIndexes(bookmark.start.indexes));

-					rng.select();

-				} else {

-					rng = body.createTextRange();

-					setBookmarkEndPoint(true);

-					setBookmarkEndPoint();

-					rng.select();

-				}

-			}

-		};

-

-		this.addRange = function(rng) {

-			var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, doc = selection.dom.doc, body = doc.body;

-

-			function setEndPoint(start) {

-				var container, offset, marker, tmpRng, nodes;

-

-				marker = dom.create('a');

-				container = start ? startContainer : endContainer;

-				offset = start ? startOffset : endOffset;

-				tmpRng = ieRng.duplicate();

-

-				if (container == doc || container == doc.documentElement) {

-					container = body;

-					offset = 0;

-				}

-

-				if (container.nodeType == 3) {

-					container.parentNode.insertBefore(marker, container);

-					tmpRng.moveToElementText(marker);

-					tmpRng.moveStart('character', offset);

-					dom.remove(marker);

-					ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);

-				} else {

-					nodes = container.childNodes;

-

-					if (nodes.length) {

-						if (offset >= nodes.length) {

-							dom.insertAfter(marker, nodes[nodes.length - 1]);

-						} else {

-							container.insertBefore(marker, nodes[offset]);

-						}

-

-						tmpRng.moveToElementText(marker);

-					} else {

-						// Empty node selection for example <div>|</div>

-						marker = doc.createTextNode('\uFEFF');

-						container.appendChild(marker);

-						tmpRng.moveToElementText(marker.parentNode);

-						tmpRng.collapse(TRUE);

-					}

-

-					ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);

-					dom.remove(marker);

-				}

-			}

-

-			// Setup some shorter versions

-			startContainer = rng.startContainer;

-			startOffset = rng.startOffset;

-			endContainer = rng.endContainer;

-			endOffset = rng.endOffset;

-			ieRng = body.createTextRange();

-

-			// If single element selection then try making a control selection out of it

-			if (startContainer == endContainer && startContainer.nodeType == 1 && startOffset == endOffset - 1) {

-				if (startOffset == endOffset - 1) {

-					try {

-						ctrlRng = body.createControlRange();

-						ctrlRng.addElement(startContainer.childNodes[startOffset]);

-						ctrlRng.select();

-						return;

-					} catch (ex) {

-						// Ignore

-					}

-				}

-			}

-

-			// Set start/end point of selection

-			setEndPoint(true);

-			setEndPoint();

-

-			// Select the new range and scroll it into view

-			ieRng.select();

-		};

-

-		// Expose range method

-		this.getRangeAt = getRange;

-	};

-

-	// Expose the selection object

-	tinymce.dom.TridentSelection = Selection;

-})();

-

-

-/*

- * Sizzle CSS Selector Engine - v1.0

- *  Copyright 2009, The Dojo Foundation

- *  Released under the MIT, BSD, and GPL Licenses.

- *  More information: http://sizzlejs.com/

- */

-(function(){

-

-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,

-	done = 0,

-	toString = Object.prototype.toString,

-	hasDuplicate = false,

-	baseHasDuplicate = true;

-

-// Here we check if the JavaScript engine is using some sort of

-// optimization where it does not always call our comparision

-// function. If that is the case, discard the hasDuplicate value.

-//   Thus far that includes Google Chrome.

-[0, 0].sort(function(){

-	baseHasDuplicate = false;

-	return 0;

-});

-

-var Sizzle = function(selector, context, results, seed) {

-	results = results || [];

-	context = context || document;

-

-	var origContext = context;

-

-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {

-		return [];

-	}

-	

-	if ( !selector || typeof selector !== "string" ) {

-		return results;

-	}

-

-	var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),

-		soFar = selector, ret, cur, pop, i;

-	

-	// Reset the position of the chunker regexp (start from head)

-	do {

-		chunker.exec("");

-		m = chunker.exec(soFar);

-

-		if ( m ) {

-			soFar = m[3];

-		

-			parts.push( m[1] );

-		

-			if ( m[2] ) {

-				extra = m[3];

-				break;

-			}

-		}

-	} while ( m );

-

-	if ( parts.length > 1 && origPOS.exec( selector ) ) {

-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {

-			set = posProcess( parts[0] + parts[1], context );

-		} else {

-			set = Expr.relative[ parts[0] ] ?

-				[ context ] :

-				Sizzle( parts.shift(), context );

-

-			while ( parts.length ) {

-				selector = parts.shift();

-

-				if ( Expr.relative[ selector ] ) {

-					selector += parts.shift();

-				}

-				

-				set = posProcess( selector, set );

-			}

-		}

-	} else {

-		// Take a shortcut and set the context if the root selector is an ID

-		// (but not if it'll be faster if the inner selector is an ID)

-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&

-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {

-			ret = Sizzle.find( parts.shift(), context, contextXML );

-			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];

-		}

-

-		if ( context ) {

-			ret = seed ?

-				{ expr: parts.pop(), set: makeArray(seed) } :

-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );

-			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;

-

-			if ( parts.length > 0 ) {

-				checkSet = makeArray(set);

-			} else {

-				prune = false;

-			}

-

-			while ( parts.length ) {

-				cur = parts.pop();

-				pop = cur;

-

-				if ( !Expr.relative[ cur ] ) {

-					cur = "";

-				} else {

-					pop = parts.pop();

-				}

-

-				if ( pop == null ) {

-					pop = context;

-				}

-

-				Expr.relative[ cur ]( checkSet, pop, contextXML );

-			}

-		} else {

-			checkSet = parts = [];

-		}

-	}

-

-	if ( !checkSet ) {

-		checkSet = set;

-	}

-

-	if ( !checkSet ) {

-		Sizzle.error( cur || selector );

-	}

-

-	if ( toString.call(checkSet) === "[object Array]" ) {

-		if ( !prune ) {

-			results.push.apply( results, checkSet );

-		} else if ( context && context.nodeType === 1 ) {

-			for ( i = 0; checkSet[i] != null; i++ ) {

-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {

-					results.push( set[i] );

-				}

-			}

-		} else {

-			for ( i = 0; checkSet[i] != null; i++ ) {

-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {

-					results.push( set[i] );

-				}

-			}

-		}

-	} else {

-		makeArray( checkSet, results );

-	}

-

-	if ( extra ) {

-		Sizzle( extra, origContext, results, seed );

-		Sizzle.uniqueSort( results );

-	}

-

-	return results;

-};

-

-Sizzle.uniqueSort = function(results){

-	if ( sortOrder ) {

-		hasDuplicate = baseHasDuplicate;

-		results.sort(sortOrder);

-

-		if ( hasDuplicate ) {

-			for ( var i = 1; i < results.length; i++ ) {

-				if ( results[i] === results[i-1] ) {

-					results.splice(i--, 1);

-				}

-			}

-		}

-	}

-

-	return results;

-};

-

-Sizzle.matches = function(expr, set){

-	return Sizzle(expr, null, null, set);

-};

-

-Sizzle.find = function(expr, context, isXML){

-	var set;

-

-	if ( !expr ) {

-		return [];

-	}

-

-	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {

-		var type = Expr.order[i], match;

-		

-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {

-			var left = match[1];

-			match.splice(1,1);

-

-			if ( left.substr( left.length - 1 ) !== "\\" ) {

-				match[1] = (match[1] || "").replace(/\\/g, "");

-				set = Expr.find[ type ]( match, context, isXML );

-				if ( set != null ) {

-					expr = expr.replace( Expr.match[ type ], "" );

-					break;

-				}

-			}

-		}

-	}

-

-	if ( !set ) {

-		set = context.getElementsByTagName("*");

-	}

-

-	return {set: set, expr: expr};

-};

-

-Sizzle.filter = function(expr, set, inplace, not){

-	var old = expr, result = [], curLoop = set, match, anyFound,

-		isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);

-

-	while ( expr && set.length ) {

-		for ( var type in Expr.filter ) {

-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

-				var filter = Expr.filter[ type ], found, item, left = match[1];

-				anyFound = false;

-

-				match.splice(1,1);

-

-				if ( left.substr( left.length - 1 ) === "\\" ) {

-					continue;

-				}

-

-				if ( curLoop === result ) {

-					result = [];

-				}

-

-				if ( Expr.preFilter[ type ] ) {

-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

-

-					if ( !match ) {

-						anyFound = found = true;

-					} else if ( match === true ) {

-						continue;

-					}

-				}

-

-				if ( match ) {

-					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {

-						if ( item ) {

-							found = filter( item, match, i, curLoop );

-							var pass = not ^ !!found;

-

-							if ( inplace && found != null ) {

-								if ( pass ) {

-									anyFound = true;

-								} else {

-									curLoop[i] = false;

-								}

-							} else if ( pass ) {

-								result.push( item );

-								anyFound = true;

-							}

-						}

-					}

-				}

-

-				if ( found !== undefined ) {

-					if ( !inplace ) {

-						curLoop = result;

-					}

-

-					expr = expr.replace( Expr.match[ type ], "" );

-

-					if ( !anyFound ) {

-						return [];

-					}

-

-					break;

-				}

-			}

-		}

-

-		// Improper expression

-		if ( expr === old ) {

-			if ( anyFound == null ) {

-				Sizzle.error( expr );

-			} else {

-				break;

-			}

-		}

-

-		old = expr;

-	}

-

-	return curLoop;

-};

-

-Sizzle.error = function( msg ) {

-	throw "Syntax error, unrecognized expression: " + msg;

-};

-

-var Expr = Sizzle.selectors = {

-	order: [ "ID", "NAME", "TAG" ],

-	match: {

-		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,

-		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,

-		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,

-		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,

-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,

-		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,

-		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,

-		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/

-	},

-	leftMatch: {},

-	attrMap: {

-		"class": "className",

-		"for": "htmlFor"

-	},

-	attrHandle: {

-		href: function(elem){

-			return elem.getAttribute("href");

-		}

-	},

-	relative: {

-		"+": function(checkSet, part){

-			var isPartStr = typeof part === "string",

-				isTag = isPartStr && !/\W/.test(part),

-				isPartStrNotTag = isPartStr && !isTag;

-

-			if ( isTag ) {

-				part = part.toLowerCase();

-			}

-

-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {

-				if ( (elem = checkSet[i]) ) {

-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

-

-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?

-						elem || false :

-						elem === part;

-				}

-			}

-

-			if ( isPartStrNotTag ) {

-				Sizzle.filter( part, checkSet, true );

-			}

-		},

-		">": function(checkSet, part){

-			var isPartStr = typeof part === "string",

-				elem, i = 0, l = checkSet.length;

-

-			if ( isPartStr && !/\W/.test(part) ) {

-				part = part.toLowerCase();

-

-				for ( ; i < l; i++ ) {

-					elem = checkSet[i];

-					if ( elem ) {

-						var parent = elem.parentNode;

-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;

-					}

-				}

-			} else {

-				for ( ; i < l; i++ ) {

-					elem = checkSet[i];

-					if ( elem ) {

-						checkSet[i] = isPartStr ?

-							elem.parentNode :

-							elem.parentNode === part;

-					}

-				}

-

-				if ( isPartStr ) {

-					Sizzle.filter( part, checkSet, true );

-				}

-			}

-		},

-		"": function(checkSet, part, isXML){

-			var doneName = done++, checkFn = dirCheck, nodeCheck;

-

-			if ( typeof part === "string" && !/\W/.test(part) ) {

-				part = part.toLowerCase();

-				nodeCheck = part;

-				checkFn = dirNodeCheck;

-			}

-

-			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);

-		},

-		"~": function(checkSet, part, isXML){

-			var doneName = done++, checkFn = dirCheck, nodeCheck;

-

-			if ( typeof part === "string" && !/\W/.test(part) ) {

-				part = part.toLowerCase();

-				nodeCheck = part;

-				checkFn = dirNodeCheck;

-			}

-

-			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);

-		}

-	},

-	find: {

-		ID: function(match, context, isXML){

-			if ( typeof context.getElementById !== "undefined" && !isXML ) {

-				var m = context.getElementById(match[1]);

-				return m ? [m] : [];

-			}

-		},

-		NAME: function(match, context){

-			if ( typeof context.getElementsByName !== "undefined" ) {

-				var ret = [], results = context.getElementsByName(match[1]);

-

-				for ( var i = 0, l = results.length; i < l; i++ ) {

-					if ( results[i].getAttribute("name") === match[1] ) {

-						ret.push( results[i] );

-					}

-				}

-

-				return ret.length === 0 ? null : ret;

-			}

-		},

-		TAG: function(match, context){

-			return context.getElementsByTagName(match[1]);

-		}

-	},

-	preFilter: {

-		CLASS: function(match, curLoop, inplace, result, not, isXML){

-			match = " " + match[1].replace(/\\/g, "") + " ";

-

-			if ( isXML ) {

-				return match;

-			}

-

-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {

-				if ( elem ) {

-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {

-						if ( !inplace ) {

-							result.push( elem );

-						}

-					} else if ( inplace ) {

-						curLoop[i] = false;

-					}

-				}

-			}

-

-			return false;

-		},

-		ID: function(match){

-			return match[1].replace(/\\/g, "");

-		},

-		TAG: function(match, curLoop){

-			return match[1].toLowerCase();

-		},

-		CHILD: function(match){

-			if ( match[1] === "nth" ) {

-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'

-				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(

-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||

-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

-

-				// calculate the numbers (first)n+(last) including if they are negative

-				match[2] = (test[1] + (test[2] || 1)) - 0;

-				match[3] = test[3] - 0;

-			}

-

-			// TODO: Move to normal caching system

-			match[0] = done++;

-

-			return match;

-		},

-		ATTR: function(match, curLoop, inplace, result, not, isXML){

-			var name = match[1].replace(/\\/g, "");

-			

-			if ( !isXML && Expr.attrMap[name] ) {

-				match[1] = Expr.attrMap[name];

-			}

-

-			if ( match[2] === "~=" ) {

-				match[4] = " " + match[4] + " ";

-			}

-

-			return match;

-		},

-		PSEUDO: function(match, curLoop, inplace, result, not){

-			if ( match[1] === "not" ) {

-				// If we're dealing with a complex expression, or a simple one

-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {

-					match[3] = Sizzle(match[3], null, null, curLoop);

-				} else {

-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);

-					if ( !inplace ) {

-						result.push.apply( result, ret );

-					}

-					return false;

-				}

-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {

-				return true;

-			}

-			

-			return match;

-		},

-		POS: function(match){

-			match.unshift( true );

-			return match;

-		}

-	},

-	filters: {

-		enabled: function(elem){

-			return elem.disabled === false && elem.type !== "hidden";

-		},

-		disabled: function(elem){

-			return elem.disabled === true;

-		},

-		checked: function(elem){

-			return elem.checked === true;

-		},

-		selected: function(elem){

-			// Accessing this property makes selected-by-default

-			// options in Safari work properly

-			elem.parentNode.selectedIndex;

-			return elem.selected === true;

-		},

-		parent: function(elem){

-			return !!elem.firstChild;

-		},

-		empty: function(elem){

-			return !elem.firstChild;

-		},

-		has: function(elem, i, match){

-			return !!Sizzle( match[3], elem ).length;

-		},

-		header: function(elem){

-			return (/h\d/i).test( elem.nodeName );

-		},

-		text: function(elem){

-			return "text" === elem.type;

-		},

-		radio: function(elem){

-			return "radio" === elem.type;

-		},

-		checkbox: function(elem){

-			return "checkbox" === elem.type;

-		},

-		file: function(elem){

-			return "file" === elem.type;

-		},

-		password: function(elem){

-			return "password" === elem.type;

-		},

-		submit: function(elem){

-			return "submit" === elem.type;

-		},

-		image: function(elem){

-			return "image" === elem.type;

-		},

-		reset: function(elem){

-			return "reset" === elem.type;

-		},

-		button: function(elem){

-			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";

-		},

-		input: function(elem){

-			return (/input|select|textarea|button/i).test(elem.nodeName);

-		}

-	},

-	setFilters: {

-		first: function(elem, i){

-			return i === 0;

-		},

-		last: function(elem, i, match, array){

-			return i === array.length - 1;

-		},

-		even: function(elem, i){

-			return i % 2 === 0;

-		},

-		odd: function(elem, i){

-			return i % 2 === 1;

-		},

-		lt: function(elem, i, match){

-			return i < match[3] - 0;

-		},

-		gt: function(elem, i, match){

-			return i > match[3] - 0;

-		},

-		nth: function(elem, i, match){

-			return match[3] - 0 === i;

-		},

-		eq: function(elem, i, match){

-			return match[3] - 0 === i;

-		}

-	},

-	filter: {

-		PSEUDO: function(elem, match, i, array){

-			var name = match[1], filter = Expr.filters[ name ];

-

-			if ( filter ) {

-				return filter( elem, i, match, array );

-			} else if ( name === "contains" ) {

-				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;

-			} else if ( name === "not" ) {

-				var not = match[3];

-

-				for ( var j = 0, l = not.length; j < l; j++ ) {

-					if ( not[j] === elem ) {

-						return false;

-					}

-				}

-

-				return true;

-			} else {

-				Sizzle.error( "Syntax error, unrecognized expression: " + name );

-			}

-		},

-		CHILD: function(elem, match){

-			var type = match[1], node = elem;

-			switch (type) {

-				case 'only':

-				case 'first':

-					while ( (node = node.previousSibling) )	 {

-						if ( node.nodeType === 1 ) { 

-							return false; 

-						}

-					}

-					if ( type === "first" ) { 

-						return true; 

-					}

-					node = elem;

-				case 'last':

-					while ( (node = node.nextSibling) )	 {

-						if ( node.nodeType === 1 ) { 

-							return false; 

-						}

-					}

-					return true;

-				case 'nth':

-					var first = match[2], last = match[3];

-

-					if ( first === 1 && last === 0 ) {

-						return true;

-					}

-					

-					var doneName = match[0],

-						parent = elem.parentNode;

-	

-					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {

-						var count = 0;

-						for ( node = parent.firstChild; node; node = node.nextSibling ) {

-							if ( node.nodeType === 1 ) {

-								node.nodeIndex = ++count;

-							}

-						} 

-						parent.sizcache = doneName;

-					}

-					

-					var diff = elem.nodeIndex - last;

-					if ( first === 0 ) {

-						return diff === 0;

-					} else {

-						return ( diff % first === 0 && diff / first >= 0 );

-					}

-			}

-		},

-		ID: function(elem, match){

-			return elem.nodeType === 1 && elem.getAttribute("id") === match;

-		},

-		TAG: function(elem, match){

-			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;

-		},

-		CLASS: function(elem, match){

-			return (" " + (elem.className || elem.getAttribute("class")) + " ")

-				.indexOf( match ) > -1;

-		},

-		ATTR: function(elem, match){

-			var name = match[1],

-				result = Expr.attrHandle[ name ] ?

-					Expr.attrHandle[ name ]( elem ) :

-					elem[ name ] != null ?

-						elem[ name ] :

-						elem.getAttribute( name ),

-				value = result + "",

-				type = match[2],

-				check = match[4];

-

-			return result == null ?

-				type === "!=" :

-				type === "=" ?

-				value === check :

-				type === "*=" ?

-				value.indexOf(check) >= 0 :

-				type === "~=" ?

-				(" " + value + " ").indexOf(check) >= 0 :

-				!check ?

-				value && result !== false :

-				type === "!=" ?

-				value !== check :

-				type === "^=" ?

-				value.indexOf(check) === 0 :

-				type === "$=" ?

-				value.substr(value.length - check.length) === check :

-				type === "|=" ?

-				value === check || value.substr(0, check.length + 1) === check + "-" :

-				false;

-		},

-		POS: function(elem, match, i, array){

-			var name = match[2], filter = Expr.setFilters[ name ];

-

-			if ( filter ) {

-				return filter( elem, i, match, array );

-			}

-		}

-	}

-};

-

-var origPOS = Expr.match.POS,

-	fescape = function(all, num){

-		return "\\" + (num - 0 + 1);

-	};

-

-for ( var type in Expr.match ) {

-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );

-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );

-}

-

-var makeArray = function(array, results) {

-	array = Array.prototype.slice.call( array, 0 );

-

-	if ( results ) {

-		results.push.apply( results, array );

-		return results;

-	}

-	

-	return array;

-};

-

-// Perform a simple check to determine if the browser is capable of

-// converting a NodeList to an array using builtin methods.

-// Also verifies that the returned array holds DOM nodes

-// (which is not the case in the Blackberry browser)

-try {

-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;

-

-// Provide a fallback method if it does not work

-} catch(e){

-	makeArray = function(array, results) {

-		var ret = results || [], i = 0;

-

-		if ( toString.call(array) === "[object Array]" ) {

-			Array.prototype.push.apply( ret, array );

-		} else {

-			if ( typeof array.length === "number" ) {

-				for ( var l = array.length; i < l; i++ ) {

-					ret.push( array[i] );

-				}

-			} else {

-				for ( ; array[i]; i++ ) {

-					ret.push( array[i] );

-				}

-			}

-		}

-

-		return ret;

-	};

-}

-

-var sortOrder;

-

-if ( document.documentElement.compareDocumentPosition ) {

-	sortOrder = function( a, b ) {

-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {

-			if ( a == b ) {

-				hasDuplicate = true;

-			}

-			return a.compareDocumentPosition ? -1 : 1;

-		}

-

-		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;

-		if ( ret === 0 ) {

-			hasDuplicate = true;

-		}

-		return ret;

-	};

-} else if ( "sourceIndex" in document.documentElement ) {

-	sortOrder = function( a, b ) {

-		if ( !a.sourceIndex || !b.sourceIndex ) {

-			if ( a == b ) {

-				hasDuplicate = true;

-			}

-			return a.sourceIndex ? -1 : 1;

-		}

-

-		var ret = a.sourceIndex - b.sourceIndex;

-		if ( ret === 0 ) {

-			hasDuplicate = true;

-		}

-		return ret;

-	};

-} else if ( document.createRange ) {

-	sortOrder = function( a, b ) {

-		if ( !a.ownerDocument || !b.ownerDocument ) {

-			if ( a == b ) {

-				hasDuplicate = true;

-			}

-			return a.ownerDocument ? -1 : 1;

-		}

-

-		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();

-		aRange.setStart(a, 0);

-		aRange.setEnd(a, 0);

-		bRange.setStart(b, 0);

-		bRange.setEnd(b, 0);

-		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);

-		if ( ret === 0 ) {

-			hasDuplicate = true;

-		}

-		return ret;

-	};

-}

-

-// Utility function for retreiving the text value of an array of DOM nodes

-Sizzle.getText = function( elems ) {

-	var ret = "", elem;

-

-	for ( var i = 0; elems[i]; i++ ) {

-		elem = elems[i];

-

-		// Get the text from text nodes and CDATA nodes

-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {

-			ret += elem.nodeValue;

-

-		// Traverse everything else, except comment nodes

-		} else if ( elem.nodeType !== 8 ) {

-			ret += Sizzle.getText( elem.childNodes );

-		}

-	}

-

-	return ret;

-};

-

-// Check to see if the browser returns elements by name when

-// querying by getElementById (and provide a workaround)

-(function(){

-	// We're going to inject a fake input element with a specified name

-	var form = document.createElement("div"),

-		id = "script" + (new Date()).getTime();

-	form.innerHTML = "<a name='" + id + "'/>";

-

-	// Inject it into the root element, check its status, and remove it quickly

-	var root = document.documentElement;

-	root.insertBefore( form, root.firstChild );

-

-	// The workaround has to do additional checks after a getElementById

-	// Which slows things down for other browsers (hence the branching)

-	if ( document.getElementById( id ) ) {

-		Expr.find.ID = function(match, context, isXML){

-			if ( typeof context.getElementById !== "undefined" && !isXML ) {

-				var m = context.getElementById(match[1]);

-				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];

-			}

-		};

-

-		Expr.filter.ID = function(elem, match){

-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");

-			return elem.nodeType === 1 && node && node.nodeValue === match;

-		};

-	}

-

-	root.removeChild( form );

-	root = form = null; // release memory in IE

-})();

-

-(function(){

-	// Check to see if the browser returns only elements

-	// when doing getElementsByTagName("*")

-

-	// Create a fake element

-	var div = document.createElement("div");

-	div.appendChild( document.createComment("") );

-

-	// Make sure no comments are found

-	if ( div.getElementsByTagName("*").length > 0 ) {

-		Expr.find.TAG = function(match, context){

-			var results = context.getElementsByTagName(match[1]);

-

-			// Filter out possible comments

-			if ( match[1] === "*" ) {

-				var tmp = [];

-

-				for ( var i = 0; results[i]; i++ ) {

-					if ( results[i].nodeType === 1 ) {

-						tmp.push( results[i] );

-					}

-				}

-

-				results = tmp;

-			}

-

-			return results;

-		};

-	}

-

-	// Check to see if an attribute returns normalized href attributes

-	div.innerHTML = "<a href='#'></a>";

-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&

-			div.firstChild.getAttribute("href") !== "#" ) {

-		Expr.attrHandle.href = function(elem){

-			return elem.getAttribute("href", 2);

-		};

-	}

-

-	div = null; // release memory in IE

-})();

-

-if ( document.querySelectorAll ) {

-	(function(){

-		var oldSizzle = Sizzle, div = document.createElement("div");

-		div.innerHTML = "<p class='TEST'></p>";

-

-		// Safari can't handle uppercase or unicode characters when

-		// in quirks mode.

-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {

-			return;

-		}

-	

-		Sizzle = function(query, context, extra, seed){

-			context = context || document;

-

-			// Only use querySelectorAll on non-XML documents

-			// (ID selectors don't work in non-HTML documents)

-			if ( !seed && context.nodeType === 9 && !Sizzle.isXML(context) ) {

-				try {

-					return makeArray( context.querySelectorAll(query), extra );

-				} catch(e){}

-			}

-		

-			return oldSizzle(query, context, extra, seed);

-		};

-

-		for ( var prop in oldSizzle ) {

-			Sizzle[ prop ] = oldSizzle[ prop ];

-		}

-

-		div = null; // release memory in IE

-	})();

-}

-

-(function(){

-	var div = document.createElement("div");

-

-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

-

-	// Opera can't find a second classname (in 9.6)

-	// Also, make sure that getElementsByClassName actually exists

-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {

-		return;

-	}

-

-	// Safari caches class attributes, doesn't catch changes (in 3.2)

-	div.lastChild.className = "e";

-

-	if ( div.getElementsByClassName("e").length === 1 ) {

-		return;

-	}

-	

-	Expr.order.splice(1, 0, "CLASS");

-	Expr.find.CLASS = function(match, context, isXML) {

-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {

-			return context.getElementsByClassName(match[1]);

-		}

-	};

-

-	div = null; // release memory in IE

-})();

-

-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

-		var elem = checkSet[i];

-		if ( elem ) {

-			elem = elem[dir];

-			var match = false;

-

-			while ( elem ) {

-				if ( elem.sizcache === doneName ) {

-					match = checkSet[elem.sizset];

-					break;

-				}

-

-				if ( elem.nodeType === 1 && !isXML ){

-					elem.sizcache = doneName;

-					elem.sizset = i;

-				}

-

-				if ( elem.nodeName.toLowerCase() === cur ) {

-					match = elem;

-					break;

-				}

-

-				elem = elem[dir];

-			}

-

-			checkSet[i] = match;

-		}

-	}

-}

-

-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

-		var elem = checkSet[i];

-		if ( elem ) {

-			elem = elem[dir];

-			var match = false;

-

-			while ( elem ) {

-				if ( elem.sizcache === doneName ) {

-					match = checkSet[elem.sizset];

-					break;

-				}

-

-				if ( elem.nodeType === 1 ) {

-					if ( !isXML ) {

-						elem.sizcache = doneName;

-						elem.sizset = i;

-					}

-					if ( typeof cur !== "string" ) {

-						if ( elem === cur ) {

-							match = true;

-							break;

-						}

-

-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {

-						match = elem;

-						break;

-					}

-				}

-

-				elem = elem[dir];

-			}

-

-			checkSet[i] = match;

-		}

-	}

-}

-

-Sizzle.contains = document.compareDocumentPosition ? function(a, b){

-	return !!(a.compareDocumentPosition(b) & 16);

-} : function(a, b){

-	return a !== b && (a.contains ? a.contains(b) : true);

-};

-

-Sizzle.isXML = function(elem){

-	// documentElement is verified for cases where it doesn't yet exist

-	// (such as loading iframes in IE - #4833) 

-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;

-	return documentElement ? documentElement.nodeName !== "HTML" : false;

-};

-

-var posProcess = function(selector, context){

-	var tmpSet = [], later = "", match,

-		root = context.nodeType ? [context] : context;

-

-	// Position selectors must be done after the filter

-	// And so must :not(positional) so we move all PSEUDOs to the end

-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {

-		later += match[0];

-		selector = selector.replace( Expr.match.PSEUDO, "" );

-	}

-

-	selector = Expr.relative[selector] ? selector + "*" : selector;

-

-	for ( var i = 0, l = root.length; i < l; i++ ) {

-		Sizzle( selector, root[i], tmpSet );

-	}

-

-	return Sizzle.filter( later, tmpSet );

-};

-

-// EXPOSE

-

-window.tinymce.dom.Sizzle = Sizzle;

-

-})();

-

-

-(function(tinymce) {

-	// Shorten names

-	var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;

-

-	tinymce.create('tinymce.dom.EventUtils', {

-		EventUtils : function() {

-			this.inits = [];

-			this.events = [];

-		},

-

-		add : function(o, n, f, s) {

-			var cb, t = this, el = t.events, r;

-

-			if (n instanceof Array) {

-				r = [];

-

-				each(n, function(n) {

-					r.push(t.add(o, n, f, s));

-				});

-

-				return r;

-			}

-

-			// Handle array

-			if (o && o.hasOwnProperty && o instanceof Array) {

-				r = [];

-

-				each(o, function(o) {

-					o = DOM.get(o);

-					r.push(t.add(o, n, f, s));

-				});

-

-				return r;

-			}

-

-			o = DOM.get(o);

-

-			if (!o)

-				return;

-

-			// Setup event callback

-			cb = function(e) {

-				// Is all events disabled

-				if (t.disabled)

-					return;

-

-				e = e || window.event;

-

-				// Patch in target, preventDefault and stopPropagation in IE it's W3C valid

-				if (e && isIE) {

-					if (!e.target)

-						e.target = e.srcElement;

-

-					// Patch in preventDefault, stopPropagation methods for W3C compatibility

-					tinymce.extend(e, t._stoppers);

-				}

-

-				if (!s)

-					return f(e);

-

-				return f.call(s, e);

-			};

-

-			if (n == 'unload') {

-				tinymce.unloads.unshift({func : cb});

-				return cb;

-			}

-

-			if (n == 'init') {

-				if (t.domLoaded)

-					cb();

-				else

-					t.inits.push(cb);

-

-				return cb;

-			}

-

-			// Store away listener reference

-			el.push({

-				obj : o,

-				name : n,

-				func : f,

-				cfunc : cb,

-				scope : s

-			});

-

-			t._add(o, n, cb);

-

-			return f;

-		},

-

-		remove : function(o, n, f) {

-			var t = this, a = t.events, s = false, r;

-

-			// Handle array

-			if (o && o.hasOwnProperty && o instanceof Array) {

-				r = [];

-

-				each(o, function(o) {

-					o = DOM.get(o);

-					r.push(t.remove(o, n, f));

-				});

-

-				return r;

-			}

-

-			o = DOM.get(o);

-

-			each(a, function(e, i) {

-				if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {

-					a.splice(i, 1);

-					t._remove(o, n, e.cfunc);

-					s = true;

-					return false;

-				}

-			});

-

-			return s;

-		},

-

-		clear : function(o) {

-			var t = this, a = t.events, i, e;

-

-			if (o) {

-				o = DOM.get(o);

-

-				for (i = a.length - 1; i >= 0; i--) {

-					e = a[i];

-

-					if (e.obj === o) {

-						t._remove(e.obj, e.name, e.cfunc);

-						e.obj = e.cfunc = null;

-						a.splice(i, 1);

-					}

-				}

-			}

-		},

-

-		cancel : function(e) {

-			if (!e)

-				return false;

-

-			this.stop(e);

-

-			return this.prevent(e);

-		},

-

-		stop : function(e) {

-			if (e.stopPropagation)

-				e.stopPropagation();

-			else

-				e.cancelBubble = true;

-

-			return false;

-		},

-

-		prevent : function(e) {

-			if (e.preventDefault)

-				e.preventDefault();

-			else

-				e.returnValue = false;

-

-			return false;

-		},

-

-		destroy : function() {

-			var t = this;

-

-			each(t.events, function(e, i) {

-				t._remove(e.obj, e.name, e.cfunc);

-				e.obj = e.cfunc = null;

-			});

-

-			t.events = [];

-			t = null;

-		},

-

-		_add : function(o, n, f) {

-			if (o.attachEvent)

-				o.attachEvent('on' + n, f);

-			else if (o.addEventListener)

-				o.addEventListener(n, f, false);

-			else

-				o['on' + n] = f;

-		},

-

-		_remove : function(o, n, f) {

-			if (o) {

-				try {

-					if (o.detachEvent)

-						o.detachEvent('on' + n, f);

-					else if (o.removeEventListener)

-						o.removeEventListener(n, f, false);

-					else

-						o['on' + n] = null;

-				} catch (ex) {

-					// Might fail with permission denined on IE so we just ignore that

-				}

-			}

-		},

-

-		_pageInit : function(win) {

-			var t = this;

-

-			// Keep it from running more than once

-			if (t.domLoaded)

-				return;

-

-			t.domLoaded = true;

-

-			each(t.inits, function(c) {

-				c();

-			});

-

-			t.inits = [];

-		},

-

-		_wait : function(win) {

-			var t = this, doc = win.document;

-

-			// No need since the document is already loaded

-			if (win.tinyMCE_GZ && tinyMCE_GZ.loaded) {

-				t.domLoaded = 1;

-				return;

-			}

-

-			// Use IE method

-			if (doc.attachEvent) {

-				doc.attachEvent("onreadystatechange", function() {

-					if (doc.readyState === "complete") {

-						doc.detachEvent("onreadystatechange", arguments.callee);

-						t._pageInit(win);

-					}

-				});

-

-				if (doc.documentElement.doScroll && win == win.top) {

-					(function() {

-						if (t.domLoaded)

-							return;

-

-						try {

-							// If IE is used, use the trick by Diego Perini licensed under MIT by request to the author.

-							// http://javascript.nwbox.com/IEContentLoaded/

-							doc.documentElement.doScroll("left");

-						} catch (ex) {

-							setTimeout(arguments.callee, 0);

-							return;

-						}

-

-						t._pageInit(win);

-					})();

-				}

-			} else if (doc.addEventListener) {

-				t._add(win, 'DOMContentLoaded', function() {

-					t._pageInit(win);

-				});

-			}

-

-			t._add(win, 'load', function() {

-				t._pageInit(win);

-			});

-		},

-

-		_stoppers : {

-			preventDefault : function() {

-				this.returnValue = false;

-			},

-

-			stopPropagation : function() {

-				this.cancelBubble = true;

-			}

-		}

-	});

-

-	Event = tinymce.dom.Event = new tinymce.dom.EventUtils();

-

-	// Dispatch DOM content loaded event for IE and Safari

-	Event._wait(window);

-

-	tinymce.addUnload(function() {

-		Event.destroy();

-	});

-})(tinymce);

-

-(function(tinymce) {

-	tinymce.dom.Element = function(id, settings) {

-		var t = this, dom, el;

-

-		t.settings = settings = settings || {};

-		t.id = id;

-		t.dom = dom = settings.dom || tinymce.DOM;

-

-		// Only IE leaks DOM references, this is a lot faster

-		if (!tinymce.isIE)

-			el = dom.get(t.id);

-

-		tinymce.each(

-				('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' + 

-				'setAttrib,setAttribs,getAttrib,addClass,removeClass,' + 

-				'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' + 

-				'isHidden,setHTML,get').split(/,/)

-			, function(k) {

-				t[k] = function() {

-					var a = [id], i;

-

-					for (i = 0; i < arguments.length; i++)

-						a.push(arguments[i]);

-

-					a = dom[k].apply(dom, a);

-					t.update(k);

-

-					return a;

-				};

-		});

-

-		tinymce.extend(t, {

-			on : function(n, f, s) {

-				return tinymce.dom.Event.add(t.id, n, f, s);

-			},

-

-			getXY : function() {

-				return {

-					x : parseInt(t.getStyle('left')),

-					y : parseInt(t.getStyle('top'))

-				};

-			},

-

-			getSize : function() {

-				var n = dom.get(t.id);

-

-				return {

-					w : parseInt(t.getStyle('width') || n.clientWidth),

-					h : parseInt(t.getStyle('height') || n.clientHeight)

-				};

-			},

-

-			moveTo : function(x, y) {

-				t.setStyles({left : x, top : y});

-			},

-

-			moveBy : function(x, y) {

-				var p = t.getXY();

-

-				t.moveTo(p.x + x, p.y + y);

-			},

-

-			resizeTo : function(w, h) {

-				t.setStyles({width : w, height : h});

-			},

-

-			resizeBy : function(w, h) {

-				var s = t.getSize();

-

-				t.resizeTo(s.w + w, s.h + h);

-			},

-

-			update : function(k) {

-				var b;

-

-				if (tinymce.isIE6 && settings.blocker) {

-					k = k || '';

-

-					// Ignore getters

-					if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)

-						return;

-

-					// Remove blocker on remove

-					if (k == 'remove') {

-						dom.remove(t.blocker);

-						return;

-					}

-

-					if (!t.blocker) {

-						t.blocker = dom.uniqueId();

-						b = dom.add(settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});

-						dom.setStyle(b, 'opacity', 0);

-					} else

-						b = dom.get(t.blocker);

-

-					dom.setStyles(b, {

-						left : t.getStyle('left', 1),

-						top : t.getStyle('top', 1),

-						width : t.getStyle('width', 1),

-						height : t.getStyle('height', 1),

-						display : t.getStyle('display', 1),

-						zIndex : parseInt(t.getStyle('zIndex', 1) || 0) - 1

-					});

-				}

-			}

-		});

-	};

-})(tinymce);

-

-(function(tinymce) {

-	function trimNl(s) {

-		return s.replace(/[\n\r]+/g, '');

-	};

-

-	// Shorten names

-	var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;

-

-	tinymce.create('tinymce.dom.Selection', {

-		Selection : function(dom, win, serializer) {

-			var t = this;

-

-			t.dom = dom;

-			t.win = win;

-			t.serializer = serializer;

-

-			// Add events

-			each([

-				'onBeforeSetContent',

-

-				'onBeforeGetContent',

-

-				'onSetContent',

-

-				'onGetContent'

-			], function(e) {

-				t[e] = new tinymce.util.Dispatcher(t);

-			});

-

-			// No W3C Range support

-			if (!t.win.getSelection)

-				t.tridentSel = new tinymce.dom.TridentSelection(t);

-

-			if (tinymce.isIE && dom.boxModel)

-				this._fixIESelection();

-

-			// Prevent leaks

-			tinymce.addUnload(t.destroy, t);

-		},

-

-		setCursorLocation: function(node, offset) {

-			var t = this; var r = t.dom.createRng();

-			r.setStart(node, offset);

-			r.setEnd(node, offset);

-			t.setRng(r);

-			t.collapse(false);

-		},

-		getContent : function(s) {

-			var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;

-

-			s = s || {};

-			wb = wa = '';

-			s.get = true;

-			s.format = s.format || 'html';

-			s.forced_root_block = '';

-			t.onBeforeGetContent.dispatch(t, s);

-

-			if (s.format == 'text')

-				return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));

-

-			if (r.cloneContents) {

-				n = r.cloneContents();

-

-				if (n)

-					e.appendChild(n);

-			} else if (is(r.item) || is(r.htmlText)) {

-				// IE will produce invalid markup if elements are present that

-				// it doesn't understand like custom elements or HTML5 elements.

-				// Adding a BR in front of the contents and then remoiving it seems to fix it though.

-				e.innerHTML = '<br>' + (r.item ? r.item(0).outerHTML : r.htmlText);

-				e.removeChild(e.firstChild);

-			} else

-				e.innerHTML = r.toString();

-

-			// Keep whitespace before and after

-			if (/^\s/.test(e.innerHTML))

-				wb = ' ';

-

-			if (/\s+$/.test(e.innerHTML))

-				wa = ' ';

-

-			s.getInner = true;

-

-			s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;

-			t.onGetContent.dispatch(t, s);

-

-			return s.content;

-		},

-

-		setContent : function(content, args) {

-			var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp;

-

-			args = args || {format : 'html'};

-			args.set = true;

-			content = args.content = content;

-

-			// Dispatch before set content event

-			if (!args.no_events)

-				self.onBeforeSetContent.dispatch(self, args);

-

-			content = args.content;

-

-			if (rng.insertNode) {

-				// Make caret marker since insertNode places the caret in the beginning of text after insert

-				content += '<span id="__caret">_</span>';

-

-				// Delete and insert new node

-				if (rng.startContainer == doc && rng.endContainer == doc) {

-					// WebKit will fail if the body is empty since the range is then invalid and it can't insert contents

-					doc.body.innerHTML = content;

-				} else {

-					rng.deleteContents();

-

-					if (doc.body.childNodes.length == 0) {

-						doc.body.innerHTML = content;

-					} else {

-						// createContextualFragment doesn't exists in IE 9 DOMRanges

-						if (rng.createContextualFragment) {

-							rng.insertNode(rng.createContextualFragment(content));

-						} else {

-							// Fake createContextualFragment call in IE 9

-							frag = doc.createDocumentFragment();

-							temp = doc.createElement('div');

-

-							frag.appendChild(temp);

-							temp.outerHTML = content;

-

-							rng.insertNode(frag);

-						}

-					}

-				}

-

-				// Move to caret marker

-				caretNode = self.dom.get('__caret');

-

-				// Make sure we wrap it compleatly, Opera fails with a simple select call

-				rng = doc.createRange();

-				rng.setStartBefore(caretNode);

-				rng.setEndBefore(caretNode);

-				self.setRng(rng);

-

-				// Remove the caret position

-				self.dom.remove('__caret');

-

-				try {

-					self.setRng(rng);

-				} catch (ex) {

-					// Might fail on Opera for some odd reason

-				}

-			} else {

-				if (rng.item) {

-					// Delete content and get caret text selection

-					doc.execCommand('Delete', false, null);

-					rng = self.getRng();

-				}

-

-				// Explorer removes spaces from the beginning of pasted contents

-				if (/^\s+/.test(content)) {

-					rng.pasteHTML('<span id="__mce_tmp">_</span>' + content);

-					self.dom.remove('__mce_tmp');

-				} else

-					rng.pasteHTML(content);

-			}

-

-			// Dispatch set content event

-			if (!args.no_events)

-				self.onSetContent.dispatch(self, args);

-		},

-

-		getStart : function() {

-			var rng = this.getRng(), startElement, parentElement, checkRng, node;

-

-			if (rng.duplicate || rng.item) {

-				// Control selection, return first item

-				if (rng.item)

-					return rng.item(0);

-

-				// Get start element

-				checkRng = rng.duplicate();

-				checkRng.collapse(1);

-				startElement = checkRng.parentElement();

-

-				// Check if range parent is inside the start element, then return the inner parent element

-				// This will fix issues when a single element is selected, IE would otherwise return the wrong start element

-				parentElement = node = rng.parentElement();

-				while (node = node.parentNode) {

-					if (node == startElement) {

-						startElement = parentElement;

-						break;

-					}

-				}

-

-				return startElement;

-			} else {

-				startElement = rng.startContainer;

-

-				if (startElement.nodeType == 1 && startElement.hasChildNodes())

-					startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];

-

-				if (startElement && startElement.nodeType == 3)

-					return startElement.parentNode;

-

-				return startElement;

-			}

-		},

-

-		getEnd : function() {

-			var t = this, r = t.getRng(), e, eo;

-

-			if (r.duplicate || r.item) {

-				if (r.item)

-					return r.item(0);

-

-				r = r.duplicate();

-				r.collapse(0);

-				e = r.parentElement();

-

-				if (e && e.nodeName == 'BODY')

-					return e.lastChild || e;

-

-				return e;

-			} else {

-				e = r.endContainer;

-				eo = r.endOffset;

-

-				if (e.nodeType == 1 && e.hasChildNodes())

-					e = e.childNodes[eo > 0 ? eo - 1 : eo];

-

-				if (e && e.nodeType == 3)

-					return e.parentNode;

-

-				return e;

-			}

-		},

-

-		getBookmark : function(type, normalized) {

-			var t = this, dom = t.dom, rng, rng2, id, collapsed, name, element, index, chr = '\uFEFF', styles;

-

-			function findIndex(name, element) {

-				var index = 0;

-

-				each(dom.select(name), function(node, i) {

-					if (node == element)

-						index = i;

-				});

-

-				return index;

-			};

-

-			if (type == 2) {

-				function getLocation() {

-					var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};

-

-					function getPoint(rng, start) {

-						var container = rng[start ? 'startContainer' : 'endContainer'],

-							offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;

-

-						if (container.nodeType == 3) {

-							if (normalized) {

-								for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)

-									offset += node.nodeValue.length;

-							}

-

-							point.push(offset);

-						} else {

-							childNodes = container.childNodes;

-

-							if (offset >= childNodes.length && childNodes.length) {

-								after = 1;

-								offset = Math.max(0, childNodes.length - 1);

-							}

-

-							point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);

-						}

-

-						for (; container && container != root; container = container.parentNode)

-							point.push(t.dom.nodeIndex(container, normalized));

-

-						return point;

-					};

-

-					bookmark.start = getPoint(rng, true);

-

-					if (!t.isCollapsed())

-						bookmark.end = getPoint(rng);

-

-					return bookmark;

-				};

-

-				if (t.tridentSel)

-					return t.tridentSel.getBookmark(type);

-

-				return getLocation();

-			}

-

-			// Handle simple range

-			if (type)

-				return {rng : t.getRng()};

-

-			rng = t.getRng();

-			id = dom.uniqueId();

-			collapsed = tinyMCE.activeEditor.selection.isCollapsed();

-			styles = 'overflow:hidden;line-height:0px';

-

-			// Explorer method

-			if (rng.duplicate || rng.item) {

-				// Text selection

-				if (!rng.item) {

-					rng2 = rng.duplicate();

-

-					try {

-						// Insert start marker

-						rng.collapse();

-						rng.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_start" style="' + styles + '">' + chr + '</span>');

-

-						// Insert end marker

-						if (!collapsed) {

-							rng2.collapse(false);

-

-							// Detect the empty space after block elements in IE and move the end back one character <p></p>] becomes <p>]</p>

-							rng.moveToElementText(rng2.parentElement());

-							if (rng.compareEndPoints('StartToEnd', rng2) == 0)

-								rng2.move('character', -1);

-

-							rng2.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_end" style="' + styles + '">' + chr + '</span>');

-						}

-					} catch (ex) {

-						// IE might throw unspecified error so lets ignore it

-						return null;

-					}

-				} else {

-					// Control selection

-					element = rng.item(0);

-					name = element.nodeName;

-

-					return {name : name, index : findIndex(name, element)};

-				}

-			} else {

-				element = t.getNode();

-				name = element.nodeName;

-				if (name == 'IMG')

-					return {name : name, index : findIndex(name, element)};

-

-				// W3C method

-				rng2 = rng.cloneRange();

-

-				// Insert end marker

-				if (!collapsed) {

-					rng2.collapse(false);

-					rng2.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_end', style : styles}, chr));

-				}

-

-				rng.collapse(true);

-				rng.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_start', style : styles}, chr));

-			}

-

-			t.moveToBookmark({id : id, keep : 1});

-

-			return {id : id};

-		},

-

-		moveToBookmark : function(bookmark) {

-			var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;

-

-			if (bookmark) {

-				if (bookmark.start) {

-					rng = dom.createRng();

-					root = dom.getRoot();

-

-					function setEndPoint(start) {

-						var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;

-

-						if (point) {

-							offset = point[0];

-

-							// Find container node

-							for (node = root, i = point.length - 1; i >= 1; i--) {

-								children = node.childNodes;

-

-								if (point[i] > children.length - 1)

-									return;

-

-								node = children[point[i]];

-							}

-

-							// Move text offset to best suitable location

-							if (node.nodeType === 3)

-								offset = Math.min(point[0], node.nodeValue.length);

-

-							// Move element offset to best suitable location

-							if (node.nodeType === 1)

-								offset = Math.min(point[0], node.childNodes.length);

-

-							// Set offset within container node

-							if (start)

-								rng.setStart(node, offset);

-							else

-								rng.setEnd(node, offset);

-						}

-

-						return true;

-					};

-

-					if (t.tridentSel)

-						return t.tridentSel.moveToBookmark(bookmark);

-

-					if (setEndPoint(true) && setEndPoint()) {

-						t.setRng(rng);

-					}

-				} else if (bookmark.id) {

-					function restoreEndPoint(suffix) {

-						var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;

-

-						if (marker) {

-							node = marker.parentNode;

-

-							if (suffix == 'start') {

-								if (!keep) {

-									idx = dom.nodeIndex(marker);

-								} else {

-									node = marker.firstChild;

-									idx = 1;

-								}

-

-								startContainer = endContainer = node;

-								startOffset = endOffset = idx;

-							} else {

-								if (!keep) {

-									idx = dom.nodeIndex(marker);

-								} else {

-									node = marker.firstChild;

-									idx = 1;

-								}

-

-								endContainer = node;

-								endOffset = idx;

-							}

-

-							if (!keep) {

-								prev = marker.previousSibling;

-								next = marker.nextSibling;

-

-								// Remove all marker text nodes

-								each(tinymce.grep(marker.childNodes), function(node) {

-									if (node.nodeType == 3)

-										node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');

-								});

-

-								// Remove marker but keep children if for example contents where inserted into the marker

-								// Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature

-								while (marker = dom.get(bookmark.id + '_' + suffix))

-									dom.remove(marker, 1);

-

-								// If siblings are text nodes then merge them unless it's Opera since it some how removes the node

-								// and we are sniffing since adding a lot of detection code for a browser with 3% of the market isn't worth the effort. Sorry, Opera but it's just a fact

-								if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) {

-									idx = prev.nodeValue.length;

-									prev.appendData(next.nodeValue);

-									dom.remove(next);

-

-									if (suffix == 'start') {

-										startContainer = endContainer = prev;

-										startOffset = endOffset = idx;

-									} else {

-										endContainer = prev;

-										endOffset = idx;

-									}

-								}

-							}

-						}

-					};

-

-					function addBogus(node) {

-						// Adds a bogus BR element for empty block elements or just a space on IE since it renders BR elements incorrectly

-						if (dom.isBlock(node) && !node.innerHTML)

-							node.innerHTML = !isIE ? '<br data-mce-bogus="1" />' : ' ';

-

-						return node;

-					};

-

-					// Restore start/end points

-					restoreEndPoint('start');

-					restoreEndPoint('end');

-

-					if (startContainer) {

-						rng = dom.createRng();

-						rng.setStart(addBogus(startContainer), startOffset);

-						rng.setEnd(addBogus(endContainer), endOffset);

-						t.setRng(rng);

-					}

-				} else if (bookmark.name) {

-					t.select(dom.select(bookmark.name)[bookmark.index]);

-				} else if (bookmark.rng)

-					t.setRng(bookmark.rng);

-			}

-		},

-

-		select : function(node, content) {

-			var t = this, dom = t.dom, rng = dom.createRng(), idx;

-

-			if (node) {

-				idx = dom.nodeIndex(node);

-				rng.setStart(node.parentNode, idx);

-				rng.setEnd(node.parentNode, idx + 1);

-

-				// Find first/last text node or BR element

-				if (content) {

-					function setPoint(node, start) {

-						var walker = new tinymce.dom.TreeWalker(node, node);

-

-						do {

-							// Text node

-							if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {

-								if (start)

-									rng.setStart(node, 0);

-								else

-									rng.setEnd(node, node.nodeValue.length);

-

-								return;

-							}

-

-							// BR element

-							if (node.nodeName == 'BR') {

-								if (start)

-									rng.setStartBefore(node);

-								else

-									rng.setEndBefore(node);

-

-								return;

-							}

-						} while (node = (start ? walker.next() : walker.prev()));

-					};

-

-					setPoint(node, 1);

-					setPoint(node);

-				}

-

-				t.setRng(rng);

-			}

-

-			return node;

-		},

-

-		isCollapsed : function() {

-			var t = this, r = t.getRng(), s = t.getSel();

-

-			if (!r || r.item)

-				return false;

-

-			if (r.compareEndPoints)

-				return r.compareEndPoints('StartToEnd', r) === 0;

-

-			return !s || r.collapsed;

-		},

-

-		collapse : function(to_start) {

-			var self = this, rng = self.getRng(), node;

-

-			// Control range on IE

-			if (rng.item) {

-				node = rng.item(0);

-				rng = self.win.document.body.createTextRange();

-				rng.moveToElementText(node);

-			}

-

-			rng.collapse(!!to_start);

-			self.setRng(rng);

-		},

-

-		getSel : function() {

-			var t = this, w = this.win;

-

-			return w.getSelection ? w.getSelection() : w.document.selection;

-		},

-

-		getRng : function(w3c) {

-			var t = this, s, r, elm, doc = t.win.document;

-

-			// Found tridentSel object then we need to use that one

-			if (w3c && t.tridentSel)

-				return t.tridentSel.getRangeAt(0);

-

-			try {

-				if (s = t.getSel())

-					r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : doc.createRange());

-			} catch (ex) {

-				// IE throws unspecified error here if TinyMCE is placed in a frame/iframe

-			}

-

-			// We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet

-			if (tinymce.isIE && r && r.setStart && doc.selection.createRange().item) {

-				elm = doc.selection.createRange().item(0);

-				r = doc.createRange();

-				r.setStartBefore(elm);

-				r.setEndAfter(elm);

-			}

-

-			// No range found then create an empty one

-			// This can occur when the editor is placed in a hidden container element on Gecko

-			// Or on IE when there was an exception

-			if (!r)

-				r = doc.createRange ? doc.createRange() : doc.body.createTextRange();

-

-			if (t.selectedRange && t.explicitRange) {

-				if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) {

-					// Safari, Opera and Chrome only ever select text which causes the range to change.

-					// This lets us use the originally set range if the selection hasn't been changed by the user.

-					r = t.explicitRange;

-				} else {

-					t.selectedRange = null;

-					t.explicitRange = null;

-				}

-			}

-

-			return r;

-		},

-

-		setRng : function(r) {

-			var s, t = this;

-			

-			if (!t.tridentSel) {

-				s = t.getSel();

-

-				if (s) {

-					t.explicitRange = r;

-

-					try {

-						s.removeAllRanges();

-					} catch (ex) {

-						// IE9 might throw errors here don't know why

-					}

-

-					s.addRange(r);

-					// adding range isn't always successful so we need to check range count otherwise an exception can occur

-					t.selectedRange = s.rangeCount > 0 ? s.getRangeAt(0) : null;

-				}

-			} else {

-				// Is W3C Range

-				if (r.cloneRange) {

-					t.tridentSel.addRange(r);

-					return;

-				}

-

-				// Is IE specific range

-				try {

-					r.select();

-				} catch (ex) {

-					// Needed for some odd IE bug #1843306

-				}

-			}

-		},

-

-		setNode : function(n) {

-			var t = this;

-

-			t.setContent(t.dom.getOuterHTML(n));

-

-			return n;

-		},

-

-		getNode : function() {

-			var t = this, rng = t.getRng(), sel = t.getSel(), elm, start = rng.startContainer, end = rng.endContainer;

-

-			// Range maybe lost after the editor is made visible again

-			if (!rng)

-				return t.dom.getRoot();

-

-			if (rng.setStart) {

-				elm = rng.commonAncestorContainer;

-

-				// Handle selection a image or other control like element such as anchors

-				if (!rng.collapsed) {

-					if (rng.startContainer == rng.endContainer) {

-						if (rng.endOffset - rng.startOffset < 2) {

-							if (rng.startContainer.hasChildNodes())

-								elm = rng.startContainer.childNodes[rng.startOffset];

-						}

-					}

-

-					// If the anchor node is a element instead of a text node then return this element

-					//if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) 

-					//	return sel.anchorNode.childNodes[sel.anchorOffset];

-

-					// Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent.

-					// This happens when you double click an underlined word in FireFox.

-					if (start.nodeType === 3 && end.nodeType === 3) {

-						function skipEmptyTextNodes(n, forwards) {

-							var orig = n;

-							while (n && n.nodeType === 3 && n.length === 0) {

-								n = forwards ? n.nextSibling : n.previousSibling;

-							}

-							return n || orig;

-						}

-						if (start.length === rng.startOffset) {

-							start = skipEmptyTextNodes(start.nextSibling, true);

-						} else {

-							start = start.parentNode;

-						}

-						if (rng.endOffset === 0) {

-							end = skipEmptyTextNodes(end.previousSibling, false);

-						} else {

-							end = end.parentNode;

-						}

-

-						if (start && start === end)

-							return start;

-					}

-				}

-

-				if (elm && elm.nodeType == 3)

-					return elm.parentNode;

-

-				return elm;

-			}

-

-			return rng.item ? rng.item(0) : rng.parentElement();

-		},

-

-		getSelectedBlocks : function(st, en) {

-			var t = this, dom = t.dom, sb, eb, n, bl = [];

-

-			sb = dom.getParent(st || t.getStart(), dom.isBlock);

-			eb = dom.getParent(en || t.getEnd(), dom.isBlock);

-

-			if (sb)

-				bl.push(sb);

-

-			if (sb && eb && sb != eb) {

-				n = sb;

-

-				var walker = new tinymce.dom.TreeWalker(sb, dom.getRoot());

-				while ((n = walker.next()) && n != eb) {

-					if (dom.isBlock(n))

-						bl.push(n);

-				}

-			}

-

-			if (eb && sb != eb)

-				bl.push(eb);

-

-			return bl;

-		},

-

-		normalize : function() {

-			var self = this, rng, normalized;

-

-			// TODO:

-			// Retain selection direction.

-			// Lean left/right on Gecko for inline elements.

-			// Run this on mouse up/key up when the user manually moves the selection

-			

-			// Normalize only on non IE browsers for now

-			if (tinymce.isIE)

-				return;

-

-			function normalizeEndPoint(start) {

-				var container, offset, walker, dom = self.dom, body = dom.getRoot(), node;

-

-				container = rng[(start ? 'start' : 'end') + 'Container'];

-				offset = rng[(start ? 'start' : 'end') + 'Offset'];

-

-				// If the container is a document move it to the body element

-				if (container.nodeType === 9) {

-					container = container.body;

-					offset = 0;

-				}

-

-				// If the container is body try move it into the closest text node or position

-				// TODO: Add more logic here to handle element selection cases

-				if (container === body) {

-					// Resolve the index

-					if (container.hasChildNodes()) {

-						container = container.childNodes[Math.min(!start && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1)];

-						offset = 0;

-

-						// Don't walk into elements that doesn't have any child nodes like a IMG

-						if (container.hasChildNodes()) {

-							// Walk the DOM to find a text node to place the caret at or a BR

-							node = container;

-							walker = new tinymce.dom.TreeWalker(container, body);

-							do {

-								// Found a text node use that position

-								if (node.nodeType === 3) {

-									offset = start ? 0 : node.nodeValue.length - 1;

-									container = node;

-									normalized = true;

-									break;

-								}

-

-								// Found a BR/IMG element that we can place the caret before

-								if (/^(BR|IMG)$/.test(node.nodeName)) {

-									offset = dom.nodeIndex(node);

-									container = node.parentNode;

-

-									// Put caret after image when moving the end point

-									if (node.nodeName ==  "IMG" && !start) {

-										offset++;

-									}

-

-									normalized = true;

-									break;

-								}

-							} while (node = (start ? walker.next() : walker.prev()));

-						}

-					}

-				}

-

-				// Set endpoint if it was normalized

-				if (normalized)

-					rng['set' + (start ? 'Start' : 'End')](container, offset);

-			};

-

-			rng = self.getRng();

-

-			// Normalize the end points

-			normalizeEndPoint(true);

-			

-			if (!rng.collapsed)

-				normalizeEndPoint();

-

-			// Set the selection if it was normalized

-			if (normalized) {

-				//console.log(self.dom.dumpRng(rng));

-				self.setRng(rng);

-			}

-		},

-

-		destroy : function(s) {

-			var t = this;

-

-			t.win = null;

-

-			// Manual destroy then remove unload handler

-			if (!s)

-				tinymce.removeUnload(t.destroy);

-		},

-

-		// IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode

-		_fixIESelection : function() {

-			var dom = this.dom, doc = dom.doc, body = doc.body, started, startRng, htmlElm;

-

-			// Make HTML element unselectable since we are going to handle selection by hand

-			doc.documentElement.unselectable = true;

-

-			// Return range from point or null if it failed

-			function rngFromPoint(x, y) {

-				var rng = body.createTextRange();

-

-				try {

-					rng.moveToPoint(x, y);

-				} catch (ex) {

-					// IE sometimes throws and exception, so lets just ignore it

-					rng = null;

-				}

-

-				return rng;

-			};

-

-			// Fires while the selection is changing

-			function selectionChange(e) {

-				var pointRng;

-

-				// Check if the button is down or not

-				if (e.button) {

-					// Create range from mouse position

-					pointRng = rngFromPoint(e.x, e.y);

-

-					if (pointRng) {

-						// Check if pointRange is before/after selection then change the endPoint

-						if (pointRng.compareEndPoints('StartToStart', startRng) > 0)

-							pointRng.setEndPoint('StartToStart', startRng);

-						else

-							pointRng.setEndPoint('EndToEnd', startRng);

-

-						pointRng.select();

-					}

-				} else

-					endSelection();

-			}

-

-			// Removes listeners

-			function endSelection() {

-				var rng = doc.selection.createRange();

-

-				// If the range is collapsed then use the last start range

-				if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0)

-					startRng.select();

-

-				dom.unbind(doc, 'mouseup', endSelection);

-				dom.unbind(doc, 'mousemove', selectionChange);

-				startRng = started = 0;

-			};

-

-			// Detect when user selects outside BODY

-			dom.bind(doc, ['mousedown', 'contextmenu'], function(e) {

-				if (e.target.nodeName === 'HTML') {

-					if (started)

-						endSelection();

-

-					// Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML

-					htmlElm = doc.documentElement;

-					if (htmlElm.scrollHeight > htmlElm.clientHeight)

-						return;

-

-					started = 1;

-					// Setup start position

-					startRng = rngFromPoint(e.x, e.y);

-					if (startRng) {

-						// Listen for selection change events

-						dom.bind(doc, 'mouseup', endSelection);

-						dom.bind(doc, 'mousemove', selectionChange);

-

-						dom.win.focus();

-						startRng.select();

-					}

-				}

-			});

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	tinymce.dom.Serializer = function(settings, dom, schema) {

-		var onPreProcess, onPostProcess, isIE = tinymce.isIE, each = tinymce.each, htmlParser;

-

-		// Support the old apply_source_formatting option

-		if (!settings.apply_source_formatting)

-			settings.indent = false;

-

-		// Default DOM and Schema if they are undefined

-		dom = dom || tinymce.DOM;

-		schema = schema || new tinymce.html.Schema(settings);

-		settings.entity_encoding = settings.entity_encoding || 'named';

-		settings.remove_trailing_brs = "remove_trailing_brs" in settings ? settings.remove_trailing_brs : true;

-

-		onPreProcess = new tinymce.util.Dispatcher(self);

-

-		onPostProcess = new tinymce.util.Dispatcher(self);

-

-		htmlParser = new tinymce.html.DomParser(settings, schema);

-

-		// Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed

-		htmlParser.addAttributeFilter('src,href,style', function(nodes, name) {

-			var i = nodes.length, node, value, internalName = 'data-mce-' + name, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef;

-

-			while (i--) {

-				node = nodes[i];

-

-				value = node.attributes.map[internalName];

-				if (value !== undef) {

-					// Set external name to internal value and remove internal

-					node.attr(name, value.length > 0 ? value : null);

-					node.attr(internalName, null);

-				} else {

-					// No internal attribute found then convert the value we have in the DOM

-					value = node.attributes.map[name];

-

-					if (name === "style")

-						value = dom.serializeStyle(dom.parseStyle(value), node.name);

-					else if (urlConverter)

-						value = urlConverter.call(urlConverterScope, value, name, node.name);

-

-					node.attr(name, value.length > 0 ? value : null);

-				}

-			}

-		});

-

-		// Remove internal classes mceItem<..>

-		htmlParser.addAttributeFilter('class', function(nodes, name) {

-			var i = nodes.length, node, value;

-

-			while (i--) {

-				node = nodes[i];

-				value = node.attr('class').replace(/\s*mce(Item\w+|Selected)\s*/g, '');

-				node.attr('class', value.length > 0 ? value : null);

-			}

-		});

-

-		// Remove bookmark elements

-		htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) {

-			var i = nodes.length, node;

-

-			while (i--) {

-				node = nodes[i];

-

-				if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup)

-					node.remove();

-			}

-		});

-

-		// Force script into CDATA sections and remove the mce- prefix also add comments around styles

-		htmlParser.addNodeFilter('script,style', function(nodes, name) {

-			var i = nodes.length, node, value;

-

-			function trim(value) {

-				return value.replace(/(<!--\[CDATA\[|\]\]-->)/g, '\n')

-						.replace(/^[\r\n]*|[\r\n]*$/g, '')

-						.replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi, '')

-						.replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, '');

-			};

-

-			while (i--) {

-				node = nodes[i];

-				value = node.firstChild ? node.firstChild.value : '';

-

-				if (name === "script") {

-					// Remove mce- prefix from script elements

-					node.attr('type', (node.attr('type') || 'text/javascript').replace(/^mce\-/, ''));

-

-					if (value.length > 0)

-						node.firstChild.value = '// <![CDATA[\n' + trim(value) + '\n// ]]>';

-				} else {

-					if (value.length > 0)

-						node.firstChild.value = '<!--\n' + trim(value) + '\n-->';

-				}

-			}

-		});

-

-		// Convert comments to cdata and handle protected comments

-		htmlParser.addNodeFilter('#comment', function(nodes, name) {

-			var i = nodes.length, node;

-

-			while (i--) {

-				node = nodes[i];

-

-				if (node.value.indexOf('[CDATA[') === 0) {

-					node.name = '#cdata';

-					node.type = 4;

-					node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, '');

-				} else if (node.value.indexOf('mce:protected ') === 0) {

-					node.name = "#text";

-					node.type = 3;

-					node.raw = true;

-					node.value = unescape(node.value).substr(14);

-				}

-			}

-		});

-

-		htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) {

-			var i = nodes.length, node;

-

-			while (i--) {

-				node = nodes[i];

-				if (node.type === 7)

-					node.remove();

-				else if (node.type === 1) {

-					if (name === "input" && !("type" in node.attributes.map))

-						node.attr('type', 'text');

-				}

-			}

-		});

-

-		// Fix list elements, TODO: Replace this later

-		if (settings.fix_list_elements) {

-			htmlParser.addNodeFilter('ul,ol', function(nodes, name) {

-				var i = nodes.length, node, parentNode;

-

-				while (i--) {

-					node = nodes[i];

-					parentNode = node.parent;

-

-					if (parentNode.name === 'ul' || parentNode.name === 'ol') {

-						if (node.prev && node.prev.name === 'li') {

-							node.prev.append(node);

-						}

-					}

-				}

-			});

-		}

-

-		// Remove internal data attributes

-		htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style', function(nodes, name) {

-			var i = nodes.length;

-

-			while (i--) {

-				nodes[i].attr(name, null);

-			}

-		});

-

-		// Return public methods

-		return {

-			schema : schema,

-

-			addNodeFilter : htmlParser.addNodeFilter,

-

-			addAttributeFilter : htmlParser.addAttributeFilter,

-

-			onPreProcess : onPreProcess,

-

-			onPostProcess : onPostProcess,

-

-			serialize : function(node, args) {

-				var impl, doc, oldDoc, htmlSerializer, content;

-

-				// Explorer won't clone contents of script and style and the

-				// selected index of select elements are cleared on a clone operation.

-				if (isIE && dom.select('script,style,select,map').length > 0) {

-					content = node.innerHTML;

-					node = node.cloneNode(false);

-					dom.setHTML(node, content);

-				} else

-					node = node.cloneNode(true);

-

-				// Nodes needs to be attached to something in WebKit/Opera

-				// Older builds of Opera crashes if you attach the node to an document created dynamically

-				// and since we can't feature detect a crash we need to sniff the acutal build number

-				// This fix will make DOM ranges and make Sizzle happy!

-				impl = node.ownerDocument.implementation;

-				if (impl.createHTMLDocument) {

-					// Create an empty HTML document

-					doc = impl.createHTMLDocument("");

-

-					// Add the element or it's children if it's a body element to the new document

-					each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) {

-						doc.body.appendChild(doc.importNode(node, true));

-					});

-

-					// Grab first child or body element for serialization

-					if (node.nodeName != 'BODY')

-						node = doc.body.firstChild;

-					else

-						node = doc.body;

-

-					// set the new document in DOMUtils so createElement etc works

-					oldDoc = dom.doc;

-					dom.doc = doc;

-				}

-

-				args = args || {};

-				args.format = args.format || 'html';

-

-				// Pre process

-				if (!args.no_events) {

-					args.node = node;

-					onPreProcess.dispatch(self, args);

-				}

-

-				// Setup serializer

-				htmlSerializer = new tinymce.html.Serializer(settings, schema);

-

-				// Parse and serialize HTML

-				args.content = htmlSerializer.serialize(

-					htmlParser.parse(args.getInner ? node.innerHTML : tinymce.trim(dom.getOuterHTML(node), args), args)

-				);

-

-				// Replace all BOM characters for now until we can find a better solution

-				if (!args.cleanup)

-					args.content = args.content.replace(/\uFEFF|\u200B/g, '');

-

-				// Post process

-				if (!args.no_events)

-					onPostProcess.dispatch(self, args);

-

-				// Restore the old document if it was changed

-				if (oldDoc)

-					dom.doc = oldDoc;

-

-				args.node = null;

-

-				return args.content;

-			},

-

-			addRules : function(rules) {

-				schema.addValidElements(rules);

-			},

-

-			setRules : function(rules) {

-				schema.setValidElements(rules);

-			}

-		};

-	};

-})(tinymce);

-(function(tinymce) {

-	tinymce.dom.ScriptLoader = function(settings) {

-		var QUEUED = 0,

-			LOADING = 1,

-			LOADED = 2,

-			states = {},

-			queue = [],

-			scriptLoadedCallbacks = {},

-			queueLoadedCallbacks = [],

-			loading = 0,

-			undefined;

-

-		function loadScript(url, callback) {

-			var t = this, dom = tinymce.DOM, elm, uri, loc, id;

-

-			// Execute callback when script is loaded

-			function done() {

-				dom.remove(id);

-

-				if (elm)

-					elm.onreadystatechange = elm.onload = elm = null;

-

-				callback();

-			};

-			

-			function error() {

-				// Report the error so it's easier for people to spot loading errors

-				if (typeof(console) !== "undefined" && console.log)

-					console.log("Failed to load: " + url);

-

-				// We can't mark it as done if there is a load error since

-				// A) We don't want to produce 404 errors on the server and

-				// B) the onerror event won't fire on all browsers.

-				// done();

-			};

-

-			id = dom.uniqueId();

-

-			if (tinymce.isIE6) {

-				uri = new tinymce.util.URI(url);

-				loc = location;

-

-				// If script is from same domain and we

-				// use IE 6 then use XHR since it's more reliable

-				if (uri.host == loc.hostname && uri.port == loc.port && (uri.protocol + ':') == loc.protocol && uri.protocol.toLowerCase() != 'file') {

-					tinymce.util.XHR.send({

-						url : tinymce._addVer(uri.getURI()),

-						success : function(content) {

-							// Create new temp script element

-							var script = dom.create('script', {

-								type : 'text/javascript'

-							});

-

-							// Evaluate script in global scope

-							script.text = content;

-							document.getElementsByTagName('head')[0].appendChild(script);

-							dom.remove(script);

-

-							done();

-						},

-						

-						error : error

-					});

-

-					return;

-				}

-			}

-

-			// Create new script element

-			elm = dom.create('script', {

-				id : id,

-				type : 'text/javascript',

-				src : tinymce._addVer(url)

-			});

-

-			// Add onload listener for non IE browsers since IE9

-			// fires onload event before the script is parsed and executed

-			if (!tinymce.isIE)

-				elm.onload = done;

-

-			// Add onerror event will get fired on some browsers but not all of them

-			elm.onerror = error;

-

-			// Opera 9.60 doesn't seem to fire the onreadystate event at correctly

-			if (!tinymce.isOpera) {

-				elm.onreadystatechange = function() {

-					var state = elm.readyState;

-

-					// Loaded state is passed on IE 6 however there

-					// are known issues with this method but we can't use

-					// XHR in a cross domain loading

-					if (state == 'complete' || state == 'loaded')

-						done();

-				};

-			}

-

-			// Most browsers support this feature so we report errors

-			// for those at least to help users track their missing plugins etc

-			// todo: Removed since it produced error if the document is unloaded by navigating away, re-add it as an option

-			/*elm.onerror = function() {

-				alert('Failed to load: ' + url);

-			};*/

-

-			// Add script to document

-			(document.getElementsByTagName('head')[0] || document.body).appendChild(elm);

-		};

-

-		this.isDone = function(url) {

-			return states[url] == LOADED;

-		};

-

-		this.markDone = function(url) {

-			states[url] = LOADED;

-		};

-

-		this.add = this.load = function(url, callback, scope) {

-			var item, state = states[url];

-

-			// Add url to load queue

-			if (state == undefined) {

-				queue.push(url);

-				states[url] = QUEUED;

-			}

-

-			if (callback) {

-				// Store away callback for later execution

-				if (!scriptLoadedCallbacks[url])

-					scriptLoadedCallbacks[url] = [];

-

-				scriptLoadedCallbacks[url].push({

-					func : callback,

-					scope : scope || this

-				});

-			}

-		};

-

-		this.loadQueue = function(callback, scope) {

-			this.loadScripts(queue, callback, scope);

-		};

-

-		this.loadScripts = function(scripts, callback, scope) {

-			var loadScripts;

-

-			function execScriptLoadedCallbacks(url) {

-				// Execute URL callback functions

-				tinymce.each(scriptLoadedCallbacks[url], function(callback) {

-					callback.func.call(callback.scope);

-				});

-

-				scriptLoadedCallbacks[url] = undefined;

-			};

-

-			queueLoadedCallbacks.push({

-				func : callback,

-				scope : scope || this

-			});

-

-			loadScripts = function() {

-				var loadingScripts = tinymce.grep(scripts);

-

-				// Current scripts has been handled

-				scripts.length = 0;

-

-				// Load scripts that needs to be loaded

-				tinymce.each(loadingScripts, function(url) {

-					// Script is already loaded then execute script callbacks directly

-					if (states[url] == LOADED) {

-						execScriptLoadedCallbacks(url);

-						return;

-					}

-

-					// Is script not loading then start loading it

-					if (states[url] != LOADING) {

-						states[url] = LOADING;

-						loading++;

-

-						loadScript(url, function() {

-							states[url] = LOADED;

-							loading--;

-

-							execScriptLoadedCallbacks(url);

-

-							// Load more scripts if they where added by the recently loaded script

-							loadScripts();

-						});

-					}

-				});

-

-				// No scripts are currently loading then execute all pending queue loaded callbacks

-				if (!loading) {

-					tinymce.each(queueLoadedCallbacks, function(callback) {

-						callback.func.call(callback.scope);

-					});

-

-					queueLoadedCallbacks.length = 0;

-				}

-			};

-

-			loadScripts();

-		};

-	};

-

-	// Global script loader

-	tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();

-})(tinymce);

-

-tinymce.dom.TreeWalker = function(start_node, root_node) {

-	var node = start_node;

-

-	function findSibling(node, start_name, sibling_name, shallow) {

-		var sibling, parent;

-

-		if (node) {

-			// Walk into nodes if it has a start

-			if (!shallow && node[start_name])

-				return node[start_name];

-

-			// Return the sibling if it has one

-			if (node != root_node) {

-				sibling = node[sibling_name];

-				if (sibling)

-					return sibling;

-

-				// Walk up the parents to look for siblings

-				for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {

-					sibling = parent[sibling_name];

-					if (sibling)

-						return sibling;

-				}

-			}

-		}

-	};

-

-	this.current = function() {

-		return node;

-	};

-

-	this.next = function(shallow) {

-		return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));

-	};

-

-	this.prev = function(shallow) {

-		return (node = findSibling(node, 'lastChild', 'previousSibling', shallow));

-	};

-};

-

-(function(tinymce) {

-	tinymce.dom.RangeUtils = function(dom) {

-		var INVISIBLE_CHAR = '\uFEFF';

-

-		this.walk = function(rng, callback) {

-			var startContainer = rng.startContainer,

-				startOffset = rng.startOffset,

-				endContainer = rng.endContainer,

-				endOffset = rng.endOffset,

-				ancestor, startPoint,

-				endPoint, node, parent, siblings, nodes;

-

-			// Handle table cell selection the table plugin enables

-			// you to fake select table cells and perform formatting actions on them

-			nodes = dom.select('td.mceSelected,th.mceSelected');

-			if (nodes.length > 0) {

-				tinymce.each(nodes, function(node) {

-					callback([node]);

-				});

-

-				return;

-			}

-

-			function exclude(nodes) {

-				var node;

-

-				// First node is excluded

-				node = nodes[0];

-				if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {

-					nodes.splice(0, 1);

-				}

-

-				// Last node is excluded

-				node = nodes[nodes.length - 1];

-				if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {

-					nodes.splice(nodes.length - 1, 1);

-				}

-

-				return nodes;

-			};

-

-			function collectSiblings(node, name, end_node) {

-				var siblings = [];

-

-				for (; node && node != end_node; node = node[name])

-					siblings.push(node);

-

-				return siblings;

-			};

-

-			function findEndPoint(node, root) {

-				do {

-					if (node.parentNode == root)

-						return node;

-

-					node = node.parentNode;

-				} while(node);

-			};

-

-			function walkBoundary(start_node, end_node, next) {

-				var siblingName = next ? 'nextSibling' : 'previousSibling';

-

-				for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) {

-					parent = node.parentNode;

-					siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName);

-

-					if (siblings.length) {

-						if (!next)

-							siblings.reverse();

-

-						callback(exclude(siblings));

-					}

-				}

-			};

-

-			// If index based start position then resolve it

-			if (startContainer.nodeType == 1 && startContainer.hasChildNodes())

-				startContainer = startContainer.childNodes[startOffset];

-

-			// If index based end position then resolve it

-			if (endContainer.nodeType == 1 && endContainer.hasChildNodes())

-				endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)];

-

-			// Same container

-			if (startContainer == endContainer)

-				return callback(exclude([startContainer]));

-

-			// Find common ancestor and end points

-			ancestor = dom.findCommonAncestor(startContainer, endContainer);

-				

-			// Process left side

-			for (node = startContainer; node; node = node.parentNode) {

-				if (node === endContainer)

-					return walkBoundary(startContainer, ancestor, true);

-

-				if (node === ancestor)

-					break;

-			}

-

-			// Process right side

-			for (node = endContainer; node; node = node.parentNode) {

-				if (node === startContainer)

-					return walkBoundary(endContainer, ancestor);

-

-				if (node === ancestor)

-					break;

-			}

-

-			// Find start/end point

-			startPoint = findEndPoint(startContainer, ancestor) || startContainer;

-			endPoint = findEndPoint(endContainer, ancestor) || endContainer;

-

-			// Walk left leaf

-			walkBoundary(startContainer, startPoint, true);

-

-			// Walk the middle from start to end point

-			siblings = collectSiblings(

-				startPoint == startContainer ? startPoint : startPoint.nextSibling,

-				'nextSibling',

-				endPoint == endContainer ? endPoint.nextSibling : endPoint

-			);

-

-			if (siblings.length)

-				callback(exclude(siblings));

-

-			// Walk right leaf

-			walkBoundary(endContainer, endPoint);

-		};

-

-		this.split = function(rng) {

-			var startContainer = rng.startContainer,

-				startOffset = rng.startOffset,

-				endContainer = rng.endContainer,

-				endOffset = rng.endOffset;

-

-			function splitText(node, offset) {

-				return node.splitText(offset);

-			};

-

-			// Handle single text node

-			if (startContainer == endContainer && startContainer.nodeType == 3) {

-				if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {

-					endContainer = splitText(startContainer, startOffset);

-					startContainer = endContainer.previousSibling;

-

-					if (endOffset > startOffset) {

-						endOffset = endOffset - startOffset;

-						startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;

-						endOffset = endContainer.nodeValue.length;

-						startOffset = 0;

-					} else {

-						endOffset = 0;

-					}

-				}

-			} else {

-				// Split startContainer text node if needed

-				if (startContainer.nodeType == 3 && startOffset > 0 && startOffset < startContainer.nodeValue.length) {

-					startContainer = splitText(startContainer, startOffset);

-					startOffset = 0;

-				}

-

-				// Split endContainer text node if needed

-				if (endContainer.nodeType == 3 && endOffset > 0 && endOffset < endContainer.nodeValue.length) {

-					endContainer = splitText(endContainer, endOffset).previousSibling;

-					endOffset = endContainer.nodeValue.length;

-				}

-			}

-

-			return {

-				startContainer : startContainer,

-				startOffset : startOffset,

-				endContainer : endContainer,

-				endOffset : endOffset

-			};

-		};

-

-	};

-

-	tinymce.dom.RangeUtils.compareRanges = function(rng1, rng2) {

-		if (rng1 && rng2) {

-			// Compare native IE ranges

-			if (rng1.item || rng1.duplicate) {

-				// Both are control ranges and the selected element matches

-				if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0))

-					return true;

-

-				// Both are text ranges and the range matches

-				if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1))

-					return true;

-			} else {

-				// Compare w3c ranges

-				return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset;

-			}

-		}

-

-		return false;

-	};

-})(tinymce);

-

-(function(tinymce) {

-	var Event = tinymce.dom.Event, each = tinymce.each;

-

-	tinymce.create('tinymce.ui.KeyboardNavigation', {

-		KeyboardNavigation: function(settings, dom) {

-			var t = this, root = settings.root, items = settings.items,

-					enableUpDown = settings.enableUpDown, enableLeftRight = settings.enableLeftRight || !settings.enableUpDown,

-					excludeFromTabOrder = settings.excludeFromTabOrder,

-					itemFocussed, itemBlurred, rootKeydown, rootFocussed, focussedId;

-

-			dom = dom || tinymce.DOM;

-

-			itemFocussed = function(evt) {

-				focussedId = evt.target.id;

-			};

-			

-			itemBlurred = function(evt) {

-				dom.setAttrib(evt.target.id, 'tabindex', '-1');

-			};

-			

-			rootFocussed = function(evt) {

-				var item = dom.get(focussedId);

-				dom.setAttrib(item, 'tabindex', '0');

-				item.focus();

-			};

-			

-			t.focus = function() {

-				dom.get(focussedId).focus();

-			};

-

-			t.destroy = function() {

-				each(items, function(item) {

-					dom.unbind(dom.get(item.id), 'focus', itemFocussed);

-					dom.unbind(dom.get(item.id), 'blur', itemBlurred);

-				});

-

-				dom.unbind(dom.get(root), 'focus', rootFocussed);

-				dom.unbind(dom.get(root), 'keydown', rootKeydown);

-

-				items = dom = root = t.focus = itemFocussed = itemBlurred = rootKeydown = rootFocussed = null;

-				t.destroy = function() {};

-			};

-			

-			t.moveFocus = function(dir, evt) {

-				var idx = -1, controls = t.controls, newFocus;

-

-				if (!focussedId)

-					return;

-

-				each(items, function(item, index) {

-					if (item.id === focussedId) {

-						idx = index;

-						return false;

-					}

-				});

-

-				idx += dir;

-				if (idx < 0) {

-					idx = items.length - 1;

-				} else if (idx >= items.length) {

-					idx = 0;

-				}

-				

-				newFocus = items[idx];

-				dom.setAttrib(focussedId, 'tabindex', '-1');

-				dom.setAttrib(newFocus.id, 'tabindex', '0');

-				dom.get(newFocus.id).focus();

-

-				if (settings.actOnFocus) {

-					settings.onAction(newFocus.id);

-				}

-

-				if (evt)

-					Event.cancel(evt);

-			};

-			

-			rootKeydown = function(evt) {

-				var DOM_VK_LEFT = 37, DOM_VK_RIGHT = 39, DOM_VK_UP = 38, DOM_VK_DOWN = 40, DOM_VK_ESCAPE = 27, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_SPACE = 32;

-				

-				switch (evt.keyCode) {

-					case DOM_VK_LEFT:

-						if (enableLeftRight) t.moveFocus(-1);

-						break;

-	

-					case DOM_VK_RIGHT:

-						if (enableLeftRight) t.moveFocus(1);

-						break;

-	

-					case DOM_VK_UP:

-						if (enableUpDown) t.moveFocus(-1);

-						break;

-

-					case DOM_VK_DOWN:

-						if (enableUpDown) t.moveFocus(1);

-						break;

-

-					case DOM_VK_ESCAPE:

-						if (settings.onCancel) {

-							settings.onCancel();

-							Event.cancel(evt);

-						}

-						break;

-

-					case DOM_VK_ENTER:

-					case DOM_VK_RETURN:

-					case DOM_VK_SPACE:

-						if (settings.onAction) {

-							settings.onAction(focussedId);

-							Event.cancel(evt);

-						}

-						break;

-				}

-			};

-

-			// Set up state and listeners for each item.

-			each(items, function(item, idx) {

-				var tabindex;

-

-				if (!item.id) {

-					item.id = dom.uniqueId('_mce_item_');

-				}

-

-				if (excludeFromTabOrder) {

-					dom.bind(item.id, 'blur', itemBlurred);

-					tabindex = '-1';

-				} else {

-					tabindex = (idx === 0 ? '0' : '-1');

-				}

-

-				dom.setAttrib(item.id, 'tabindex', tabindex);

-				dom.bind(dom.get(item.id), 'focus', itemFocussed);

-			});

-			

-			// Setup initial state for root element.

-			if (items[0]){

-				focussedId = items[0].id;

-			}

-

-			dom.setAttrib(root, 'tabindex', '-1');

-			

-			// Setup listeners for root element.

-			dom.bind(dom.get(root), 'focus', rootFocussed);

-			dom.bind(dom.get(root), 'keydown', rootKeydown);

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	// Shorten class names

-	var DOM = tinymce.DOM, is = tinymce.is;

-

-	tinymce.create('tinymce.ui.Control', {

-		Control : function(id, s, editor) {

-			this.id = id;

-			this.settings = s = s || {};

-			this.rendered = false;

-			this.onRender = new tinymce.util.Dispatcher(this);

-			this.classPrefix = '';

-			this.scope = s.scope || this;

-			this.disabled = 0;

-			this.active = 0;

-			this.editor = editor;

-		},

-		

-		setAriaProperty : function(property, value) {

-			var element = DOM.get(this.id + '_aria') || DOM.get(this.id);

-			if (element) {

-				DOM.setAttrib(element, 'aria-' + property, !!value);

-			}

-		},

-		

-		focus : function() {

-			DOM.get(this.id).focus();

-		},

-

-		setDisabled : function(s) {

-			if (s != this.disabled) {

-				this.setAriaProperty('disabled', s);

-

-				this.setState('Disabled', s);

-				this.setState('Enabled', !s);

-				this.disabled = s;

-			}

-		},

-

-		isDisabled : function() {

-			return this.disabled;

-		},

-

-		setActive : function(s) {

-			if (s != this.active) {

-				this.setState('Active', s);

-				this.active = s;

-				this.setAriaProperty('pressed', s);

-			}

-		},

-

-		isActive : function() {

-			return this.active;

-		},

-

-		setState : function(c, s) {

-			var n = DOM.get(this.id);

-

-			c = this.classPrefix + c;

-

-			if (s)

-				DOM.addClass(n, c);

-			else

-				DOM.removeClass(n, c);

-		},

-

-		isRendered : function() {

-			return this.rendered;

-		},

-

-		renderHTML : function() {

-		},

-

-		renderTo : function(n) {

-			DOM.setHTML(n, this.renderHTML());

-		},

-

-		postRender : function() {

-			var t = this, b;

-

-			// Set pending states

-			if (is(t.disabled)) {

-				b = t.disabled;

-				t.disabled = -1;

-				t.setDisabled(b);

-			}

-

-			if (is(t.active)) {

-				b = t.active;

-				t.active = -1;

-				t.setActive(b);

-			}

-		},

-

-		remove : function() {

-			DOM.remove(this.id);

-			this.destroy();

-		},

-

-		destroy : function() {

-			tinymce.dom.Event.clear(this.id);

-		}

-	});

-})(tinymce);

-tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {

-	Container : function(id, s, editor) {

-		this.parent(id, s, editor);

-

-		this.controls = [];

-

-		this.lookup = {};

-	},

-

-	add : function(c) {

-		this.lookup[c.id] = c;

-		this.controls.push(c);

-

-		return c;

-	},

-

-	get : function(n) {

-		return this.lookup[n];

-	}

-});

-

-

-tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {

-	Separator : function(id, s) {

-		this.parent(id, s);

-		this.classPrefix = 'mceSeparator';

-		this.setDisabled(true);

-	},

-

-	renderHTML : function() {

-		return tinymce.DOM.createHTML('span', {'class' : this.classPrefix, role : 'separator', 'aria-orientation' : 'vertical', tabindex : '-1'});

-	}

-});

-

-(function(tinymce) {

-	var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;

-

-	tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {

-		MenuItem : function(id, s) {

-			this.parent(id, s);

-			this.classPrefix = 'mceMenuItem';

-		},

-

-		setSelected : function(s) {

-			this.setState('Selected', s);

-			this.setAriaProperty('checked', !!s);

-			this.selected = s;

-		},

-

-		isSelected : function() {

-			return this.selected;

-		},

-

-		postRender : function() {

-			var t = this;

-			

-			t.parent();

-

-			// Set pending state

-			if (is(t.selected))

-				t.setSelected(t.selected);

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;

-

-	tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {

-		Menu : function(id, s) {

-			var t = this;

-

-			t.parent(id, s);

-			t.items = {};

-			t.collapsed = false;

-			t.menuCount = 0;

-			t.onAddItem = new tinymce.util.Dispatcher(this);

-		},

-

-		expand : function(d) {

-			var t = this;

-

-			if (d) {

-				walk(t, function(o) {

-					if (o.expand)

-						o.expand();

-				}, 'items', t);

-			}

-

-			t.collapsed = false;

-		},

-

-		collapse : function(d) {

-			var t = this;

-

-			if (d) {

-				walk(t, function(o) {

-					if (o.collapse)

-						o.collapse();

-				}, 'items', t);

-			}

-

-			t.collapsed = true;

-		},

-

-		isCollapsed : function() {

-			return this.collapsed;

-		},

-

-		add : function(o) {

-			if (!o.settings)

-				o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o);

-

-			this.onAddItem.dispatch(this, o);

-

-			return this.items[o.id] = o;

-		},

-

-		addSeparator : function() {

-			return this.add({separator : true});

-		},

-

-		addMenu : function(o) {

-			if (!o.collapse)

-				o = this.createMenu(o);

-

-			this.menuCount++;

-

-			return this.add(o);

-		},

-

-		hasMenus : function() {

-			return this.menuCount !== 0;

-		},

-

-		remove : function(o) {

-			delete this.items[o.id];

-		},

-

-		removeAll : function() {

-			var t = this;

-

-			walk(t, function(o) {

-				if (o.removeAll)

-					o.removeAll();

-				else

-					o.remove();

-

-				o.destroy();

-			}, 'items', t);

-

-			t.items = {};

-		},

-

-		createMenu : function(o) {

-			var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o);

-

-			m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);

-

-			return m;

-		}

-	});

-})(tinymce);

-(function(tinymce) {

-	var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;

-

-	tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {

-		DropMenu : function(id, s) {

-			s = s || {};

-			s.container = s.container || DOM.doc.body;

-			s.offset_x = s.offset_x || 0;

-			s.offset_y = s.offset_y || 0;

-			s.vp_offset_x = s.vp_offset_x || 0;

-			s.vp_offset_y = s.vp_offset_y || 0;

-

-			if (is(s.icons) && !s.icons)

-				s['class'] += ' mceNoIcons';

-

-			this.parent(id, s);

-			this.onShowMenu = new tinymce.util.Dispatcher(this);

-			this.onHideMenu = new tinymce.util.Dispatcher(this);

-			this.classPrefix = 'mceMenu';

-		},

-

-		createMenu : function(s) {

-			var t = this, cs = t.settings, m;

-

-			s.container = s.container || cs.container;

-			s.parent = t;

-			s.constrain = s.constrain || cs.constrain;

-			s['class'] = s['class'] || cs['class'];

-			s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x;

-			s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y;

-			s.keyboard_focus = cs.keyboard_focus;

-			m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s);

-

-			m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem);

-

-			return m;

-		},

-		

-		focus : function() {

-			var t = this;

-			if (t.keyboardNav) {

-				t.keyboardNav.focus();

-			}

-		},

-

-		update : function() {

-			var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th;

-

-			tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth;

-			th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight;

-

-			if (!DOM.boxModel)

-				t.element.setStyles({width : tw + 2, height : th + 2});

-			else

-				t.element.setStyles({width : tw, height : th});

-

-			if (s.max_width)

-				DOM.setStyle(co, 'width', tw);

-

-			if (s.max_height) {

-				DOM.setStyle(co, 'height', th);

-

-				if (tb.clientHeight < s.max_height)

-					DOM.setStyle(co, 'overflow', 'hidden');

-			}

-		},

-

-		showMenu : function(x, y, px) {

-			var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix;

-

-			t.collapse(1);

-

-			if (t.isMenuVisible)

-				return;

-

-			if (!t.rendered) {

-				co = DOM.add(t.settings.container, t.renderNode());

-

-				each(t.items, function(o) {

-					o.postRender();

-				});

-

-				t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});

-			} else

-				co = DOM.get('menu_' + t.id);

-

-			// Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug

-			if (!tinymce.isOpera)

-				DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF});

-

-			DOM.show(co);

-			t.update();

-

-			x += s.offset_x || 0;

-			y += s.offset_y || 0;

-			vp.w -= 4;

-			vp.h -= 4;

-

-			// Move inside viewport if not submenu

-			if (s.constrain) {

-				w = co.clientWidth - ot;

-				h = co.clientHeight - ot;

-				mx = vp.x + vp.w;

-				my = vp.y + vp.h;

-

-				if ((x + s.vp_offset_x + w) > mx)

-					x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w);

-

-				if ((y + s.vp_offset_y + h) > my)

-					y = Math.max(0, (my - s.vp_offset_y) - h);

-			}

-

-			DOM.setStyles(co, {left : x , top : y});

-			t.element.update();

-

-			t.isMenuVisible = 1;

-			t.mouseClickFunc = Event.add(co, 'click', function(e) {

-				var m;

-

-				e = e.target;

-

-				if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) {

-					m = t.items[e.id];

-

-					if (m.isDisabled())

-						return;

-

-					dm = t;

-

-					while (dm) {

-						if (dm.hideMenu)

-							dm.hideMenu();

-

-						dm = dm.settings.parent;

-					}

-

-					if (m.settings.onclick)

-						m.settings.onclick(e);

-

-					return Event.cancel(e); // Cancel to fix onbeforeunload problem

-				}

-			});

-

-			if (t.hasMenus()) {

-				t.mouseOverFunc = Event.add(co, 'mouseover', function(e) {

-					var m, r, mi;

-

-					e = e.target;

-					if (e && (e = DOM.getParent(e, 'tr'))) {

-						m = t.items[e.id];

-

-						if (t.lastMenu)

-							t.lastMenu.collapse(1);

-

-						if (m.isDisabled())

-							return;

-

-						if (e && DOM.hasClass(e, cp + 'ItemSub')) {

-							//p = DOM.getPos(s.container);

-							r = DOM.getRect(e);

-							m.showMenu((r.x + r.w - ot), r.y - ot, r.x);

-							t.lastMenu = m;

-							DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive');

-						}

-					}

-				});

-			}

-			

-			Event.add(co, 'keydown', t._keyHandler, t);

-

-			t.onShowMenu.dispatch(t);

-

-			if (s.keyboard_focus) { 

-				t._setupKeyboardNav(); 

-			}

-		},

-

-		hideMenu : function(c) {

-			var t = this, co = DOM.get('menu_' + t.id), e;

-

-			if (!t.isMenuVisible)

-				return;

-

-			if (t.keyboardNav) t.keyboardNav.destroy();

-			Event.remove(co, 'mouseover', t.mouseOverFunc);

-			Event.remove(co, 'click', t.mouseClickFunc);

-			Event.remove(co, 'keydown', t._keyHandler);

-			DOM.hide(co);

-			t.isMenuVisible = 0;

-

-			if (!c)

-				t.collapse(1);

-

-			if (t.element)

-				t.element.hide();

-

-			if (e = DOM.get(t.id))

-				DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive');

-

-			t.onHideMenu.dispatch(t);

-		},

-

-		add : function(o) {

-			var t = this, co;

-

-			o = t.parent(o);

-

-			if (t.isRendered && (co = DOM.get('menu_' + t.id)))

-				t._add(DOM.select('tbody', co)[0], o);

-

-			return o;

-		},

-

-		collapse : function(d) {

-			this.parent(d);

-			this.hideMenu(1);

-		},

-

-		remove : function(o) {

-			DOM.remove(o.id);

-			this.destroy();

-

-			return this.parent(o);

-		},

-

-		destroy : function() {

-			var t = this, co = DOM.get('menu_' + t.id);

-

-			if (t.keyboardNav) t.keyboardNav.destroy();

-			Event.remove(co, 'mouseover', t.mouseOverFunc);

-			Event.remove(DOM.select('a', co), 'focus', t.mouseOverFunc);

-			Event.remove(co, 'click', t.mouseClickFunc);

-			Event.remove(co, 'keydown', t._keyHandler);

-

-			if (t.element)

-				t.element.remove();

-

-			DOM.remove(co);

-		},

-

-		renderNode : function() {

-			var t = this, s = t.settings, n, tb, co, w;

-

-			w = DOM.create('div', {role: 'listbox', id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000;outline:0'});

-			if (t.settings.parent) {

-				DOM.setAttrib(w, 'aria-parent', 'menu_' + t.settings.parent.id);

-			}

-			co = DOM.add(w, 'div', {role: 'presentation', id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')});

-			t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});

-

-			if (s.menu_line)

-				DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'});

-

-//			n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'});

-			n = DOM.add(co, 'table', {role: 'presentation', id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0});

-			tb = DOM.add(n, 'tbody');

-

-			each(t.items, function(o) {

-				t._add(tb, o);

-			});

-

-			t.rendered = true;

-

-			return w;

-		},

-

-		// Internal functions

-		_setupKeyboardNav : function(){

-			var contextMenu, menuItems, t=this; 

-			contextMenu = DOM.get('menu_' + t.id);

-			menuItems = DOM.select('a[role=option]', 'menu_' + t.id);

-			menuItems.splice(0,0,contextMenu);

-			t.keyboardNav = new tinymce.ui.KeyboardNavigation({

-				root: 'menu_' + t.id,

-				items: menuItems,

-				onCancel: function() {

-					t.hideMenu();

-				},

-				enableUpDown: true

-			});

-			contextMenu.focus();

-		},

-

-		_keyHandler : function(evt) {

-			var t = this, e;

-			switch (evt.keyCode) {

-				case 37: // Left

-					if (t.settings.parent) {

-						t.hideMenu();

-						t.settings.parent.focus();

-						Event.cancel(evt);

-					}

-					break;

-				case 39: // Right

-					if (t.mouseOverFunc)

-						t.mouseOverFunc(evt);

-					break;

-			}

-		},

-

-		_add : function(tb, o) {

-			var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic;

-

-			if (s.separator) {

-				ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'});

-				DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'});

-

-				if (n = ro.previousSibling)

-					DOM.addClass(n, 'mceLast');

-

-				return;

-			}

-

-			n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'});

-			n = it = DOM.add(n, s.titleItem ? 'th' : 'td');

-			n = a = DOM.add(n, 'a', {id: o.id + '_aria',  role: s.titleItem ? 'presentation' : 'option', href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'});

-

-			if (s.parent) {

-				DOM.setAttrib(a, 'aria-haspopup', 'true');

-				DOM.setAttrib(a, 'aria-owns', 'menu_' + o.id);

-			}

-

-			DOM.addClass(it, s['class']);

-//			n = DOM.add(n, 'span', {'class' : 'item'});

-

-			ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')});

-

-			if (s.icon_src)

-				DOM.add(ic, 'img', {src : s.icon_src});

-

-			n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title);

-

-			if (o.settings.style)

-				DOM.setAttrib(n, 'style', o.settings.style);

-

-			if (tb.childNodes.length == 1)

-				DOM.addClass(ro, 'mceFirst');

-

-			if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator'))

-				DOM.addClass(ro, 'mceFirst');

-

-			if (o.collapse)

-				DOM.addClass(ro, cp + 'ItemSub');

-

-			if (n = ro.previousSibling)

-				DOM.removeClass(n, 'mceLast');

-

-			DOM.addClass(ro, 'mceLast');

-		}

-	});

-})(tinymce);

-(function(tinymce) {

-	var DOM = tinymce.DOM;

-

-	tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {

-		Button : function(id, s, ed) {

-			this.parent(id, s, ed);

-			this.classPrefix = 'mceButton';

-		},

-

-		renderHTML : function() {

-			var cp = this.classPrefix, s = this.settings, h, l;

-

-			l = DOM.encode(s.label || '');

-			h = '<a role="button" id="' + this.id + '" href="javascript:;" class="' + cp + ' ' + cp + 'Enabled ' + s['class'] + (l ? ' ' + cp + 'Labeled' : '') +'" onmousedown="return false;" onclick="return false;" aria-labelledby="' + this.id + '_voice" title="' + DOM.encode(s.title) + '">';

-			if (s.image && !(this.editor  &&this.editor.forcedHighContrastMode) )

-				h += '<img class="mceIcon" src="' + s.image + '" alt="' + DOM.encode(s.title) + '" />' + l;

-			else

-				h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '');

-

-			h += '<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="' + this.id + '_voice">' + s.title + '</span>'; 

-			h += '</a>';

-			return h;

-		},

-

-		postRender : function() {

-			var t = this, s = t.settings, bookmark;

-

-			// In IE a large image that occupies the entire editor area will be deselected when a button is clicked, so

-			// need to keep the selection in case the selection is lost

-			if (tinymce.isIE && t.editor) {

-				tinymce.dom.Event.add(t.id, 'mousedown', function(e) {

-					bookmark = t.editor.selection.getBookmark();

-				});

-			}

-			tinymce.dom.Event.add(t.id, 'click', function(e) {

-				if (!t.isDisabled()) {

-					// restore the selection in case the selection is lost in IE

-					if (tinymce.isIE && t.editor && bookmark) {

-						tinymce.activeEditor.selection.moveToBookmark(bookmark);

-					}

-					return s.onclick.call(s.scope, e);

-				}

-			});

-			tinymce.dom.Event.add(t.id, 'keyup', function(e) {

-				if (!t.isDisabled() && e.keyCode==tinymce.VK.SPACEBAR)

-					return s.onclick.call(s.scope, e);

-			});

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;

-

-	tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {

-		ListBox : function(id, s, ed) {

-			var t = this;

-

-			t.parent(id, s, ed);

-

-			t.items = [];

-

-			t.onChange = new Dispatcher(t);

-

-			t.onPostRender = new Dispatcher(t);

-

-			t.onAdd = new Dispatcher(t);

-

-			t.onRenderMenu = new tinymce.util.Dispatcher(this);

-

-			t.classPrefix = 'mceListBox';

-		},

-

-		select : function(va) {

-			var t = this, fv, f;

-

-			if (va == undefined)

-				return t.selectByIndex(-1);

-

-			// Is string or number make function selector

-			if (va && va.call)

-				f = va;

-			else {

-				f = function(v) {

-					return v == va;

-				};

-			}

-

-			// Do we need to do something?

-			if (va != t.selectedValue) {

-				// Find item

-				each(t.items, function(o, i) {

-					if (f(o.value)) {

-						fv = 1;

-						t.selectByIndex(i);

-						return false;

-					}

-				});

-

-				if (!fv)

-					t.selectByIndex(-1);

-			}

-		},

-

-		selectByIndex : function(idx) {

-			var t = this, e, o, label;

-

-			if (idx != t.selectedIndex) {

-				e = DOM.get(t.id + '_text');

-				label = DOM.get(t.id + '_voiceDesc');

-				o = t.items[idx];

-

-				if (o) {

-					t.selectedValue = o.value;

-					t.selectedIndex = idx;

-					DOM.setHTML(e, DOM.encode(o.title));

-					DOM.setHTML(label, t.settings.title + " - " + o.title);

-					DOM.removeClass(e, 'mceTitle');

-					DOM.setAttrib(t.id, 'aria-valuenow', o.title);

-				} else {

-					DOM.setHTML(e, DOM.encode(t.settings.title));

-					DOM.setHTML(label, DOM.encode(t.settings.title));

-					DOM.addClass(e, 'mceTitle');

-					t.selectedValue = t.selectedIndex = null;

-					DOM.setAttrib(t.id, 'aria-valuenow', t.settings.title);

-				}

-				e = 0;

-			}

-		},

-

-		add : function(n, v, o) {

-			var t = this;

-

-			o = o || {};

-			o = tinymce.extend(o, {

-				title : n,

-				value : v

-			});

-

-			t.items.push(o);

-			t.onAdd.dispatch(t, o);

-		},

-

-		getLength : function() {

-			return this.items.length;

-		},

-

-		renderHTML : function() {

-			var h = '', t = this, s = t.settings, cp = t.classPrefix;

-

-			h = '<span role="listbox" aria-haspopup="true" aria-labelledby="' + t.id +'_voiceDesc" aria-describedby="' + t.id + '_voiceDesc"><table role="presentation" tabindex="0" id="' + t.id + '" cellpadding="0" cellspacing="0" class="' + cp + ' ' + cp + 'Enabled' + (s['class'] ? (' ' + s['class']) : '') + '"><tbody><tr>';

-			h += '<td>' + DOM.createHTML('span', {id: t.id + '_voiceDesc', 'class': 'voiceLabel', style:'display:none;'}, t.settings.title); 

-			h += DOM.createHTML('a', {id : t.id + '_text', tabindex : -1, href : 'javascript:;', 'class' : 'mceText', onclick : "return false;", onmousedown : 'return false;'}, DOM.encode(t.settings.title)) + '</td>';

-			h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', tabindex : -1, href : 'javascript:;', 'class' : 'mceOpen', onclick : "return false;", onmousedown : 'return false;'}, '<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>') + '</td>';

-			h += '</tr></tbody></table></span>';

-

-			return h;

-		},

-

-		showMenu : function() {

-			var t = this, p2, e = DOM.get(this.id), m;

-

-			if (t.isDisabled() || t.items.length == 0)

-				return;

-

-			if (t.menu && t.menu.isMenuVisible)

-				return t.hideMenu();

-

-			if (!t.isMenuRendered) {

-				t.renderMenu();

-				t.isMenuRendered = true;

-			}

-

-			p2 = DOM.getPos(e);

-

-			m = t.menu;

-			m.settings.offset_x = p2.x;

-			m.settings.offset_y = p2.y;

-			m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus

-

-			// Select in menu

-			if (t.oldID)

-				m.items[t.oldID].setSelected(0);

-

-			each(t.items, function(o) {

-				if (o.value === t.selectedValue) {

-					m.items[o.id].setSelected(1);

-					t.oldID = o.id;

-				}

-			});

-

-			m.showMenu(0, e.clientHeight);

-

-			Event.add(DOM.doc, 'mousedown', t.hideMenu, t);

-			DOM.addClass(t.id, t.classPrefix + 'Selected');

-

-			//DOM.get(t.id + '_text').focus();

-		},

-

-		hideMenu : function(e) {

-			var t = this;

-

-			if (t.menu && t.menu.isMenuVisible) {

-				DOM.removeClass(t.id, t.classPrefix + 'Selected');

-

-				// Prevent double toogles by canceling the mouse click event to the button

-				if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))

-					return;

-

-				if (!e || !DOM.getParent(e.target, '.mceMenu')) {

-					DOM.removeClass(t.id, t.classPrefix + 'Selected');

-					Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);

-					t.menu.hideMenu();

-				}

-			}

-		},

-

-		renderMenu : function() {

-			var t = this, m;

-

-			m = t.settings.control_manager.createDropMenu(t.id + '_menu', {

-				menu_line : 1,

-				'class' : t.classPrefix + 'Menu mceNoIcons',

-				max_width : 150,

-				max_height : 150

-			});

-

-			m.onHideMenu.add(function() {

-				t.hideMenu();

-				t.focus();

-			});

-

-			m.add({

-				title : t.settings.title,

-				'class' : 'mceMenuItemTitle',

-				onclick : function() {

-					if (t.settings.onselect('') !== false)

-						t.select(''); // Must be runned after

-				}

-			});

-

-			each(t.items, function(o) {

-				// No value then treat it as a title

-				if (o.value === undefined) {

-					m.add({

-						title : o.title,

-						role : "option",

-						'class' : 'mceMenuItemTitle',

-						onclick : function() {

-							if (t.settings.onselect('') !== false)

-								t.select(''); // Must be runned after

-						}

-					});

-				} else {

-					o.id = DOM.uniqueId();

-					o.role= "option";

-					o.onclick = function() {

-						if (t.settings.onselect(o.value) !== false)

-							t.select(o.value); // Must be runned after

-					};

-

-					m.add(o);

-				}

-			});

-

-			t.onRenderMenu.dispatch(t, m);

-			t.menu = m;

-		},

-

-		postRender : function() {

-			var t = this, cp = t.classPrefix;

-

-			Event.add(t.id, 'click', t.showMenu, t);

-			Event.add(t.id, 'keydown', function(evt) {

-				if (evt.keyCode == 32) { // Space

-					t.showMenu(evt);

-					Event.cancel(evt);

-				}

-			});

-			Event.add(t.id, 'focus', function() {

-				if (!t._focused) {

-					t.keyDownHandler = Event.add(t.id, 'keydown', function(e) {

-						if (e.keyCode == 40) {

-							t.showMenu();

-							Event.cancel(e);

-						}

-					});

-					t.keyPressHandler = Event.add(t.id, 'keypress', function(e) {

-						var v;

-						if (e.keyCode == 13) {

-							// Fake select on enter

-							v = t.selectedValue;

-							t.selectedValue = null; // Needs to be null to fake change

-							Event.cancel(e);

-							t.settings.onselect(v);

-						}

-					});

-				}

-

-				t._focused = 1;

-			});

-			Event.add(t.id, 'blur', function() {

-				Event.remove(t.id, 'keydown', t.keyDownHandler);

-				Event.remove(t.id, 'keypress', t.keyPressHandler);

-				t._focused = 0;

-			});

-

-			// Old IE doesn't have hover on all elements

-			if (tinymce.isIE6 || !DOM.boxModel) {

-				Event.add(t.id, 'mouseover', function() {

-					if (!DOM.hasClass(t.id, cp + 'Disabled'))

-						DOM.addClass(t.id, cp + 'Hover');

-				});

-

-				Event.add(t.id, 'mouseout', function() {

-					if (!DOM.hasClass(t.id, cp + 'Disabled'))

-						DOM.removeClass(t.id, cp + 'Hover');

-				});

-			}

-

-			t.onPostRender.dispatch(t, DOM.get(t.id));

-		},

-

-		destroy : function() {

-			this.parent();

-

-			Event.clear(this.id + '_text');

-			Event.clear(this.id + '_open');

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;

-

-	tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {

-		NativeListBox : function(id, s) {

-			this.parent(id, s);

-			this.classPrefix = 'mceNativeListBox';

-		},

-

-		setDisabled : function(s) {

-			DOM.get(this.id).disabled = s;

-			this.setAriaProperty('disabled', s);

-		},

-

-		isDisabled : function() {

-			return DOM.get(this.id).disabled;

-		},

-

-		select : function(va) {

-			var t = this, fv, f;

-

-			if (va == undefined)

-				return t.selectByIndex(-1);

-

-			// Is string or number make function selector

-			if (va && va.call)

-				f = va;

-			else {

-				f = function(v) {

-					return v == va;

-				};

-			}

-

-			// Do we need to do something?

-			if (va != t.selectedValue) {

-				// Find item

-				each(t.items, function(o, i) {

-					if (f(o.value)) {

-						fv = 1;

-						t.selectByIndex(i);

-						return false;

-					}

-				});

-

-				if (!fv)

-					t.selectByIndex(-1);

-			}

-		},

-

-		selectByIndex : function(idx) {

-			DOM.get(this.id).selectedIndex = idx + 1;

-			this.selectedValue = this.items[idx] ? this.items[idx].value : null;

-		},

-

-		add : function(n, v, a) {

-			var o, t = this;

-

-			a = a || {};

-			a.value = v;

-

-			if (t.isRendered())

-				DOM.add(DOM.get(this.id), 'option', a, n);

-

-			o = {

-				title : n,

-				value : v,

-				attribs : a

-			};

-

-			t.items.push(o);

-			t.onAdd.dispatch(t, o);

-		},

-

-		getLength : function() {

-			return this.items.length;

-		},

-

-		renderHTML : function() {

-			var h, t = this;

-

-			h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --');

-

-			each(t.items, function(it) {

-				h += DOM.createHTML('option', {value : it.value}, it.title);

-			});

-

-			h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox', 'aria-labelledby': t.id + '_aria'}, h);

-			h += DOM.createHTML('span', {id : t.id + '_aria', 'style': 'display: none'}, t.settings.title);

-			return h;

-		},

-

-		postRender : function() {

-			var t = this, ch, changeListenerAdded = true;

-

-			t.rendered = true;

-

-			function onChange(e) {

-				var v = t.items[e.target.selectedIndex - 1];

-

-				if (v && (v = v.value)) {

-					t.onChange.dispatch(t, v);

-

-					if (t.settings.onselect)

-						t.settings.onselect(v);

-				}

-			};

-

-			Event.add(t.id, 'change', onChange);

-

-			// Accessibility keyhandler

-			Event.add(t.id, 'keydown', function(e) {

-				var bf;

-

-				Event.remove(t.id, 'change', ch);

-				changeListenerAdded = false;

-

-				bf = Event.add(t.id, 'blur', function() {

-					if (changeListenerAdded) return;

-					changeListenerAdded = true;

-					Event.add(t.id, 'change', onChange);

-					Event.remove(t.id, 'blur', bf);

-				});

-

-				//prevent default left and right keys on chrome - so that the keyboard navigation is used.

-				if (tinymce.isWebKit && (e.keyCode==37 ||e.keyCode==39)) {

-					return Event.prevent(e);

-				}

-				

-				if (e.keyCode == 13 || e.keyCode == 32) {

-					onChange(e);

-					return Event.cancel(e);

-				}

-			});

-

-			t.onPostRender.dispatch(t, DOM.get(t.id));

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;

-

-	tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {

-		MenuButton : function(id, s, ed) {

-			this.parent(id, s, ed);

-

-			this.onRenderMenu = new tinymce.util.Dispatcher(this);

-

-			s.menu_container = s.menu_container || DOM.doc.body;

-		},

-

-		showMenu : function() {

-			var t = this, p1, p2, e = DOM.get(t.id), m;

-

-			if (t.isDisabled())

-				return;

-

-			if (!t.isMenuRendered) {

-				t.renderMenu();

-				t.isMenuRendered = true;

-			}

-

-			if (t.isMenuVisible)

-				return t.hideMenu();

-

-			p1 = DOM.getPos(t.settings.menu_container);

-			p2 = DOM.getPos(e);

-

-			m = t.menu;

-			m.settings.offset_x = p2.x;

-			m.settings.offset_y = p2.y;

-			m.settings.vp_offset_x = p2.x;

-			m.settings.vp_offset_y = p2.y;

-			m.settings.keyboard_focus = t._focused;

-			m.showMenu(0, e.clientHeight);

-

-			Event.add(DOM.doc, 'mousedown', t.hideMenu, t);

-			t.setState('Selected', 1);

-

-			t.isMenuVisible = 1;

-		},

-

-		renderMenu : function() {

-			var t = this, m;

-

-			m = t.settings.control_manager.createDropMenu(t.id + '_menu', {

-				menu_line : 1,

-				'class' : this.classPrefix + 'Menu',

-				icons : t.settings.icons

-			});

-

-			m.onHideMenu.add(function() {

-				t.hideMenu();

-				t.focus();

-			});

-

-			t.onRenderMenu.dispatch(t, m);

-			t.menu = m;

-		},

-

-		hideMenu : function(e) {

-			var t = this;

-

-			// Prevent double toogles by canceling the mouse click event to the button

-			if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';}))

-				return;

-

-			if (!e || !DOM.getParent(e.target, '.mceMenu')) {

-				t.setState('Selected', 0);

-				Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);

-				if (t.menu)

-					t.menu.hideMenu();

-			}

-

-			t.isMenuVisible = 0;

-		},

-

-		postRender : function() {

-			var t = this, s = t.settings;

-

-			Event.add(t.id, 'click', function() {

-				if (!t.isDisabled()) {

-					if (s.onclick)

-						s.onclick(t.value);

-

-					t.showMenu();

-				}

-			});

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;

-

-	tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {

-		SplitButton : function(id, s, ed) {

-			this.parent(id, s, ed);

-			this.classPrefix = 'mceSplitButton';

-		},

-

-		renderHTML : function() {

-			var h, t = this, s = t.settings, h1;

-

-			h = '<tbody><tr>';

-

-			if (s.image)

-				h1 = DOM.createHTML('img ', {src : s.image, role: 'presentation', 'class' : 'mceAction ' + s['class']});

-			else

-				h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, '');

-

-			h1 += DOM.createHTML('span', {'class': 'mceVoiceLabel mceIconOnly', id: t.id + '_voice', style: 'display:none;'}, s.title);

-			h += '<td >' + DOM.createHTML('a', {role: 'button', id : t.id + '_action', tabindex: '-1', href : 'javascript:;', 'class' : 'mceAction ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';

-	

-			h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']}, '<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');

-			h += '<td >' + DOM.createHTML('a', {role: 'button', id : t.id + '_open', tabindex: '-1', href : 'javascript:;', 'class' : 'mceOpen ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';

-

-			h += '</tr></tbody>';

-			h = DOM.createHTML('table', { role: 'presentation',   'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', title : s.title}, h);

-			return DOM.createHTML('div', {id : t.id, role: 'button', tabindex: '0', 'aria-labelledby': t.id + '_voice', 'aria-haspopup': 'true'}, h);

-		},

-

-		postRender : function() {

-			var t = this, s = t.settings, activate;

-

-			if (s.onclick) {

-				activate = function(evt) {

-					if (!t.isDisabled()) {

-						s.onclick(t.value);

-						Event.cancel(evt);

-					}

-				};

-				Event.add(t.id + '_action', 'click', activate);

-				Event.add(t.id, ['click', 'keydown'], function(evt) {

-					var DOM_VK_SPACE = 32, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_UP = 38, DOM_VK_DOWN = 40;

-					if ((evt.keyCode === 32 || evt.keyCode === 13 || evt.keyCode === 14) && !evt.altKey && !evt.ctrlKey && !evt.metaKey) {

-						activate();

-						Event.cancel(evt);

-					} else if (evt.type === 'click' || evt.keyCode === DOM_VK_DOWN) {

-						t.showMenu();

-						Event.cancel(evt);

-					}

-				});

-			}

-

-			Event.add(t.id + '_open', 'click', function (evt) {

-				t.showMenu();

-				Event.cancel(evt);

-			});

-			Event.add([t.id, t.id + '_open'], 'focus', function() {t._focused = 1;});

-			Event.add([t.id, t.id + '_open'], 'blur', function() {t._focused = 0;});

-

-			// Old IE doesn't have hover on all elements

-			if (tinymce.isIE6 || !DOM.boxModel) {

-				Event.add(t.id, 'mouseover', function() {

-					if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))

-						DOM.addClass(t.id, 'mceSplitButtonHover');

-				});

-

-				Event.add(t.id, 'mouseout', function() {

-					if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))

-						DOM.removeClass(t.id, 'mceSplitButtonHover');

-				});

-			}

-		},

-

-		destroy : function() {

-			this.parent();

-

-			Event.clear(this.id + '_action');

-			Event.clear(this.id + '_open');

-			Event.clear(this.id);

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;

-

-	tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {

-		ColorSplitButton : function(id, s, ed) {

-			var t = this;

-

-			t.parent(id, s, ed);

-

-			t.settings = s = tinymce.extend({

-				colors : '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',

-				grid_width : 8,

-				default_color : '#888888'

-			}, t.settings);

-

-			t.onShowMenu = new tinymce.util.Dispatcher(t);

-

-			t.onHideMenu = new tinymce.util.Dispatcher(t);

-

-			t.value = s.default_color;

-		},

-

-		showMenu : function() {

-			var t = this, r, p, e, p2;

-

-			if (t.isDisabled())

-				return;

-

-			if (!t.isMenuRendered) {

-				t.renderMenu();

-				t.isMenuRendered = true;

-			}

-

-			if (t.isMenuVisible)

-				return t.hideMenu();

-

-			e = DOM.get(t.id);

-			DOM.show(t.id + '_menu');

-			DOM.addClass(e, 'mceSplitButtonSelected');

-			p2 = DOM.getPos(e);

-			DOM.setStyles(t.id + '_menu', {

-				left : p2.x,

-				top : p2.y + e.clientHeight,

-				zIndex : 200000

-			});

-			e = 0;

-

-			Event.add(DOM.doc, 'mousedown', t.hideMenu, t);

-			t.onShowMenu.dispatch(t);

-

-			if (t._focused) {

-				t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {

-					if (e.keyCode == 27)

-						t.hideMenu();

-				});

-

-				DOM.select('a', t.id + '_menu')[0].focus(); // Select first link

-			}

-

-			t.isMenuVisible = 1;

-		},

-

-		hideMenu : function(e) {

-			var t = this;

-

-			if (t.isMenuVisible) {

-				// Prevent double toogles by canceling the mouse click event to the button

-				if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';}))

-					return;

-

-				if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) {

-					DOM.removeClass(t.id, 'mceSplitButtonSelected');

-					Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);

-					Event.remove(t.id + '_menu', 'keydown', t._keyHandler);

-					DOM.hide(t.id + '_menu');

-				}

-

-				t.isMenuVisible = 0;

-				t.onHideMenu.dispatch();

-			}

-		},

-

-		renderMenu : function() {

-			var t = this, m, i = 0, s = t.settings, n, tb, tr, w, context;

-

-			w = DOM.add(s.menu_container, 'div', {role: 'listbox', id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'});

-			m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'});

-			DOM.add(m, 'span', {'class' : 'mceMenuLine'});

-

-			n = DOM.add(m, 'table', {role: 'presentation', 'class' : 'mceColorSplitMenu'});

-			tb = DOM.add(n, 'tbody');

-

-			// Generate color grid

-			i = 0;

-			each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) {

-				c = c.replace(/^#/, '');

-

-				if (!i--) {

-					tr = DOM.add(tb, 'tr');

-					i = s.grid_width - 1;

-				}

-

-				n = DOM.add(tr, 'td');

-				var settings = {

-					href : 'javascript:;',

-					style : {

-						backgroundColor : '#' + c

-					},

-					'title': t.editor.getLang('colors.' + c, c),

-					'data-mce-color' : '#' + c

-				};

-

-				// adding a proper ARIA role = button causes JAWS to read things incorrectly on IE.

-				if (!tinymce.isIE ) {

-					settings['role']= 'option';

-				}

-

-				n = DOM.add(n, 'a', settings);

-

-				if (t.editor.forcedHighContrastMode) {

-					n = DOM.add(n, 'canvas', { width: 16, height: 16, 'aria-hidden': 'true' });

-					if (n.getContext && (context = n.getContext("2d"))) {

-						context.fillStyle = '#' + c;

-						context.fillRect(0, 0, 16, 16);

-					} else {

-						// No point leaving a canvas element around if it's not supported for drawing on anyway.

-						DOM.remove(n);

-					}

-				}

-			});

-

-			if (s.more_colors_func) {

-				n = DOM.add(tb, 'tr');

-				n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'});

-				n = DOM.add(n, 'a', {role: 'option', id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title);

-

-				Event.add(n, 'click', function(e) {

-					s.more_colors_func.call(s.more_colors_scope || this);

-					return Event.cancel(e); // Cancel to fix onbeforeunload problem

-				});

-			}

-

-			DOM.addClass(m, 'mceColorSplitMenu');

-			

-			new tinymce.ui.KeyboardNavigation({

-				root: t.id + '_menu',

-				items: DOM.select('a', t.id + '_menu'),

-				onCancel: function() {

-					t.hideMenu();

-					t.focus();

-				}

-			});

-

-			// Prevent IE from scrolling and hindering click to occur #4019

-			Event.add(t.id + '_menu', 'mousedown', function(e) {return Event.cancel(e);});

-

-			Event.add(t.id + '_menu', 'click', function(e) {

-				var c;

-

-				e = DOM.getParent(e.target, 'a', tb);

-

-				if (e && e.nodeName.toLowerCase() == 'a' && (c = e.getAttribute('data-mce-color')))

-					t.setColor(c);

-

-				return Event.cancel(e); // Prevent IE auto save warning

-			});

-

-			return w;

-		},

-

-		setColor : function(c) {

-			this.displayColor(c);

-			this.hideMenu();

-			this.settings.onselect(c);

-		},

-		

-		displayColor : function(c) {

-			var t = this;

-

-			DOM.setStyle(t.id + '_preview', 'backgroundColor', c);

-

-			t.value = c;

-		},

-

-		postRender : function() {

-			var t = this, id = t.id;

-

-			t.parent();

-			DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'});

-			DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value);

-		},

-

-		destroy : function() {

-			this.parent();

-

-			Event.clear(this.id + '_menu');

-			Event.clear(this.id + '_more');

-			DOM.remove(this.id + '_menu');

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-// Shorten class names

-var dom = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event;

-tinymce.create('tinymce.ui.ToolbarGroup:tinymce.ui.Container', {

-	renderHTML : function() {

-		var t = this, h = [], controls = t.controls, each = tinymce.each, settings = t.settings;

-

-		h.push('<div id="' + t.id + '" role="group" aria-labelledby="' + t.id + '_voice">');

-		//TODO: ACC test this out - adding a role = application for getting the landmarks working well.

-		h.push("<span role='application'>");

-		h.push('<span id="' + t.id + '_voice" class="mceVoiceLabel" style="display:none;">' + dom.encode(settings.name) + '</span>');

-		each(controls, function(toolbar) {

-			h.push(toolbar.renderHTML());

-		});

-		h.push("</span>");

-		h.push('</div>');

-

-		return h.join('');

-	},

-	

-	focus : function() {

-		var t = this;

-		dom.get(t.id).focus();

-	},

-	

-	postRender : function() {

-		var t = this, items = [];

-

-		each(t.controls, function(toolbar) {

-			each (toolbar.controls, function(control) {

-				if (control.id) {

-					items.push(control);

-				}

-			});

-		});

-

-		t.keyNav = new tinymce.ui.KeyboardNavigation({

-			root: t.id,

-			items: items,

-			onCancel: function() {

-				//Move focus if webkit so that navigation back will read the item.

-				if (tinymce.isWebKit) {

-					dom.get(t.editor.id+"_ifr").focus();

-				}

-				t.editor.focus();

-			},

-			excludeFromTabOrder: !t.settings.tab_focus_toolbar

-		});

-	},

-	

-	destroy : function() {

-		var self = this;

-

-		self.parent();

-		self.keyNav.destroy();

-		Event.clear(self.id);

-	}

-});

-})(tinymce);

-

-(function(tinymce) {

-// Shorten class names

-var dom = tinymce.DOM, each = tinymce.each;

-tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {

-	renderHTML : function() {

-		var t = this, h = '', c, co, s = t.settings, i, pr, nx, cl;

-

-		cl = t.controls;

-		for (i=0; i<cl.length; i++) {

-			// Get current control, prev control, next control and if the control is a list box or not

-			co = cl[i];

-			pr = cl[i - 1];

-			nx = cl[i + 1];

-

-			// Add toolbar start

-			if (i === 0) {

-				c = 'mceToolbarStart';

-

-				if (co.Button)

-					c += ' mceToolbarStartButton';

-				else if (co.SplitButton)

-					c += ' mceToolbarStartSplitButton';

-				else if (co.ListBox)

-					c += ' mceToolbarStartListBox';

-

-				h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));

-			}

-

-			// Add toolbar end before list box and after the previous button

-			// This is to fix the o2k7 editor skins

-			if (pr && co.ListBox) {

-				if (pr.Button || pr.SplitButton)

-					h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->'));

-			}

-

-			// Render control HTML

-

-			// IE 8 quick fix, needed to propertly generate a hit area for anchors

-			if (dom.stdMode)

-				h += '<td style="position: relative">' + co.renderHTML() + '</td>';

-			else

-				h += '<td>' + co.renderHTML() + '</td>';

-

-			// Add toolbar start after list box and before the next button

-			// This is to fix the o2k7 editor skins

-			if (nx && co.ListBox) {

-				if (nx.Button || nx.SplitButton)

-					h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->'));

-			}

-		}

-

-		c = 'mceToolbarEnd';

-

-		if (co.Button)

-			c += ' mceToolbarEndButton';

-		else if (co.SplitButton)

-			c += ' mceToolbarEndSplitButton';

-		else if (co.ListBox)

-			c += ' mceToolbarEndListBox';

-

-		h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));

-

-		return dom.createHTML('table', {id : t.id, 'class' : 'mceToolbar' + (s['class'] ? ' ' + s['class'] : ''), cellpadding : '0', cellspacing : '0', align : t.settings.align || '', role: 'presentation', tabindex: '-1'}, '<tbody><tr>' + h + '</tr></tbody>');

-	}

-});

-})(tinymce);

-

-(function(tinymce) {

-	var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;

-

-	tinymce.create('tinymce.AddOnManager', {

-		AddOnManager : function() {

-			var self = this;

-

-			self.items = [];

-			self.urls = {};

-			self.lookup = {};

-			self.onAdd = new Dispatcher(self);

-		},

-

-		get : function(n) {

-			if (this.lookup[n]) {

-				return this.lookup[n].instance;

-			} else {

-				return undefined;

-			}

-		},

-

-		dependencies : function(n) {

-			var result;

-			if (this.lookup[n]) {

-				result = this.lookup[n].dependencies;

-			}

-			return result || [];

-		},

-

-		requireLangPack : function(n) {

-			var s = tinymce.settings;

-

-			if (s && s.language && s.language_load !== false)

-				tinymce.ScriptLoader.add(this.urls[n] + '/langs/' + s.language + '.js');

-		},

-

-		add : function(id, o, dependencies) {

-			this.items.push(o);

-			this.lookup[id] = {instance:o, dependencies:dependencies};

-			this.onAdd.dispatch(this, id, o);

-

-			return o;

-		},

-		createUrl: function(baseUrl, dep) {

-			if (typeof dep === "object") {

-				return dep

-			} else {

-				return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};

-			}

-		},

-

-		addComponents: function(pluginName, scripts) {

-			var pluginUrl = this.urls[pluginName];

-			tinymce.each(scripts, function(script){

-				tinymce.ScriptLoader.add(pluginUrl+"/"+script);	

-			});

-		},

-

-		load : function(n, u, cb, s) {

-			var t = this, url = u;

-

-			function loadDependencies() {

-				var dependencies = t.dependencies(n);

-				tinymce.each(dependencies, function(dep) {

-					var newUrl = t.createUrl(u, dep);

-					t.load(newUrl.resource, newUrl, undefined, undefined);

-				});

-				if (cb) {

-					if (s) {

-						cb.call(s);

-					} else {

-						cb.call(tinymce.ScriptLoader);

-					}

-				}

-			}

-

-			if (t.urls[n])

-				return;

-			if (typeof u === "object")

-				url = u.prefix + u.resource + u.suffix;

-

-			if (url.indexOf('/') != 0 && url.indexOf('://') == -1)

-				url = tinymce.baseURL + '/' + url;

-

-			t.urls[n] = url.substring(0, url.lastIndexOf('/'));

-

-			if (t.lookup[n]) {

-				loadDependencies();

-			} else {

-				tinymce.ScriptLoader.add(url, loadDependencies, s);

-			}

-		}

-	});

-

-	// Create plugin and theme managers

-	tinymce.PluginManager = new tinymce.AddOnManager();

-	tinymce.ThemeManager = new tinymce.AddOnManager();

-}(tinymce));

-

-(function(tinymce) {

-	// Shorten names

-	var each = tinymce.each, extend = tinymce.extend,

-		DOM = tinymce.DOM, Event = tinymce.dom.Event,

-		ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,

-		explode = tinymce.explode,

-		Dispatcher = tinymce.util.Dispatcher, undefined, instanceCounter = 0;

-

-	// Setup some URLs where the editor API is located and where the document is

-	tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');

-	if (!/[\/\\]$/.test(tinymce.documentBaseURL))

-		tinymce.documentBaseURL += '/';

-

-	tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);

-

-	tinymce.baseURI = new tinymce.util.URI(tinymce.baseURL);

-

-	// Add before unload listener

-	// This was required since IE was leaking memory if you added and removed beforeunload listeners

-	// with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event

-	tinymce.onBeforeUnload = new Dispatcher(tinymce);

-

-	// Must be on window or IE will leak if the editor is placed in frame or iframe

-	Event.add(window, 'beforeunload', function(e) {

-		tinymce.onBeforeUnload.dispatch(tinymce, e);

-	});

-

-	tinymce.onAddEditor = new Dispatcher(tinymce);

-

-	tinymce.onRemoveEditor = new Dispatcher(tinymce);

-

-	tinymce.EditorManager = extend(tinymce, {

-		editors : [],

-

-		i18n : {},

-

-		activeEditor : null,

-

-		init : function(s) {

-			var t = this, pl, sl = tinymce.ScriptLoader, e, el = [], ed;

-

-			function execCallback(se, n, s) {

-				var f = se[n];

-

-				if (!f)

-					return;

-

-				if (tinymce.is(f, 'string')) {

-					s = f.replace(/\.\w+$/, '');

-					s = s ? tinymce.resolve(s) : 0;

-					f = tinymce.resolve(f);

-				}

-

-				return f.apply(s || this, Array.prototype.slice.call(arguments, 2));

-			};

-

-			s = extend({

-				theme : "simple",

-				language : "en"

-			}, s);

-

-			t.settings = s;

-

-			// Legacy call

-			Event.add(document, 'init', function() {

-				var l, co;

-

-				execCallback(s, 'onpageload');

-

-				switch (s.mode) {

-					case "exact":

-						l = s.elements || '';

-

-						if(l.length > 0) {

-							each(explode(l), function(v) {

-								if (DOM.get(v)) {

-									ed = new tinymce.Editor(v, s);

-									el.push(ed);

-									ed.render(1);

-								} else {

-									each(document.forms, function(f) {

-										each(f.elements, function(e) {

-											if (e.name === v) {

-												v = 'mce_editor_' + instanceCounter++;

-												DOM.setAttrib(e, 'id', v);

-

-												ed = new tinymce.Editor(v, s);

-												el.push(ed);

-												ed.render(1);

-											}

-										});

-									});

-								}

-							});

-						}

-						break;

-

-					case "textareas":

-					case "specific_textareas":

-						function hasClass(n, c) {

-							return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);

-						};

-

-						each(DOM.select('textarea'), function(v) {

-							if (s.editor_deselector && hasClass(v, s.editor_deselector))

-								return;

-

-							if (!s.editor_selector || hasClass(v, s.editor_selector)) {

-								// Can we use the name

-								e = DOM.get(v.name);

-								if (!v.id && !e)

-									v.id = v.name;

-

-								// Generate unique name if missing or already exists

-								if (!v.id || t.get(v.id))

-									v.id = DOM.uniqueId();

-

-								ed = new tinymce.Editor(v.id, s);

-								el.push(ed);

-								ed.render(1);

-							}

-						});

-						break;

-				}

-

-				// Call onInit when all editors are initialized

-				if (s.oninit) {

-					l = co = 0;

-

-					each(el, function(ed) {

-						co++;

-

-						if (!ed.initialized) {

-							// Wait for it

-							ed.onInit.add(function() {

-								l++;

-

-								// All done

-								if (l == co)

-									execCallback(s, 'oninit');

-							});

-						} else

-							l++;

-

-						// All done

-						if (l == co)

-							execCallback(s, 'oninit');					

-					});

-				}

-			});

-		},

-

-		get : function(id) {

-			if (id === undefined)

-				return this.editors;

-

-			return this.editors[id];

-		},

-

-		getInstanceById : function(id) {

-			return this.get(id);

-		},

-

-		add : function(editor) {

-			var self = this, editors = self.editors;

-

-			// Add named and index editor instance

-			editors[editor.id] = editor;

-			editors.push(editor);

-

-			self._setActive(editor);

-			self.onAddEditor.dispatch(self, editor);

-

-

-			return editor;

-		},

-

-		remove : function(editor) {

-			var t = this, i, editors = t.editors;

-

-			// Not in the collection

-			if (!editors[editor.id])

-				return null;

-

-			delete editors[editor.id];

-

-			for (i = 0; i < editors.length; i++) {

-				if (editors[i] == editor) {

-					editors.splice(i, 1);

-					break;

-				}

-			}

-

-			// Select another editor since the active one was removed

-			if (t.activeEditor == editor)

-				t._setActive(editors[0]);

-

-			editor.destroy();

-			t.onRemoveEditor.dispatch(t, editor);

-

-			return editor;

-		},

-

-		execCommand : function(c, u, v) {

-			var t = this, ed = t.get(v), w;

-

-			// Manager commands

-			switch (c) {

-				case "mceFocus":

-					ed.focus();

-					return true;

-

-				case "mceAddEditor":

-				case "mceAddControl":

-					if (!t.get(v))

-						new tinymce.Editor(v, t.settings).render();

-

-					return true;

-

-				case "mceAddFrameControl":

-					w = v.window;

-

-					// Add tinyMCE global instance and tinymce namespace to specified window

-					w.tinyMCE = tinyMCE;

-					w.tinymce = tinymce;

-

-					tinymce.DOM.doc = w.document;

-					tinymce.DOM.win = w;

-

-					ed = new tinymce.Editor(v.element_id, v);

-					ed.render();

-

-					// Fix IE memory leaks

-					if (tinymce.isIE) {

-						function clr() {

-							ed.destroy();

-							w.detachEvent('onunload', clr);

-							w = w.tinyMCE = w.tinymce = null; // IE leak

-						};

-

-						w.attachEvent('onunload', clr);

-					}

-

-					v.page_window = null;

-

-					return true;

-

-				case "mceRemoveEditor":

-				case "mceRemoveControl":

-					if (ed)

-						ed.remove();

-

-					return true;

-

-				case 'mceToggleEditor':

-					if (!ed) {

-						t.execCommand('mceAddControl', 0, v);

-						return true;

-					}

-

-					if (ed.isHidden())

-						ed.show();

-					else

-						ed.hide();

-

-					return true;

-			}

-

-			// Run command on active editor

-			if (t.activeEditor)

-				return t.activeEditor.execCommand(c, u, v);

-

-			return false;

-		},

-

-		execInstanceCommand : function(id, c, u, v) {

-			var ed = this.get(id);

-

-			if (ed)

-				return ed.execCommand(c, u, v);

-

-			return false;

-		},

-

-		triggerSave : function() {

-			each(this.editors, function(e) {

-				e.save();

-			});

-		},

-

-		addI18n : function(p, o) {

-			var lo, i18n = this.i18n;

-

-			if (!tinymce.is(p, 'string')) {

-				each(p, function(o, lc) {

-					each(o, function(o, g) {

-						each(o, function(o, k) {

-							if (g === 'common')

-								i18n[lc + '.' + k] = o;

-							else

-								i18n[lc + '.' + g + '.' + k] = o;

-						});

-					});

-				});

-			} else {

-				each(o, function(o, k) {

-					i18n[p + '.' + k] = o;

-				});

-			}

-		},

-

-		// Private methods

-

-		_setActive : function(editor) {

-			this.selectedInstance = this.activeEditor = editor;

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	// Shorten these names

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend,

-		Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isGecko = tinymce.isGecko,

-		isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,

-		ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,

-		inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode, VK = tinymce.VK;

-

-	tinymce.create('tinymce.Editor', {

-		Editor : function(id, s) {

-			var t = this;

-

-			t.id = t.editorId = id;

-

-			t.execCommands = {};

-			t.queryStateCommands = {};

-			t.queryValueCommands = {};

-

-			t.isNotDirty = false;

-

-			t.plugins = {};

-

-			// Add events to the editor

-			each([

-				'onPreInit',

-

-				'onBeforeRenderUI',

-

-				'onPostRender',

-

-				'onLoad',

-

-				'onInit',

-

-				'onRemove',

-

-				'onActivate',

-

-				'onDeactivate',

-

-				'onClick',

-

-				'onEvent',

-

-				'onMouseUp',

-

-				'onMouseDown',

-

-				'onDblClick',

-

-				'onKeyDown',

-

-				'onKeyUp',

-

-				'onKeyPress',

-

-				'onContextMenu',

-

-				'onSubmit',

-

-				'onReset',

-

-				'onPaste',

-

-				'onPreProcess',

-

-				'onPostProcess',

-

-				'onBeforeSetContent',

-

-				'onBeforeGetContent',

-

-				'onSetContent',

-

-				'onGetContent',

-

-				'onLoadContent',

-

-				'onSaveContent',

-

-				'onNodeChange',

-

-				'onChange',

-

-				'onBeforeExecCommand',

-

-				'onExecCommand',

-

-				'onUndo',

-

-				'onRedo',

-

-				'onVisualAid',

-

-				'onSetProgressState',

-

-				'onSetAttrib'

-			], function(e) {

-				t[e] = new Dispatcher(t);

-			});

-

-			t.settings = s = extend({

-				id : id,

-				language : 'en',

-				docs_language : 'en',

-				theme : 'simple',

-				skin : 'default',

-				delta_width : 0,

-				delta_height : 0,

-				popup_css : '',

-				plugins : '',

-				document_base_url : tinymce.documentBaseURL,

-				add_form_submit_trigger : 1,

-				submit_patch : 1,

-				add_unload_trigger : 1,

-				convert_urls : 1,

-				relative_urls : 1,

-				remove_script_host : 1,

-				table_inline_editing : 0,

-				object_resizing : 1,

-				cleanup : 1,

-				accessibility_focus : 1,

-				custom_shortcuts : 1,

-				custom_undo_redo_keyboard_shortcuts : 1,

-				custom_undo_redo_restore_selection : 1,

-				custom_undo_redo : 1,

-				doctype : tinymce.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : '<!DOCTYPE>', // Use old doctype on IE 6 to avoid horizontal scroll

-				visual_table_class : 'mceItemTable',

-				visual : 1,

-				font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',

-				font_size_legacy_values : 'xx-small,small,medium,large,x-large,xx-large,300%', // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size

-				apply_source_formatting : 1,

-				directionality : 'ltr',

-				forced_root_block : 'p',

-				hidden_input : 1,

-				padd_empty_editor : 1,

-				render_ui : 1,

-				init_theme : 1,

-				force_p_newlines : 1,

-				indentation : '30px',

-				keep_styles : 1,

-				fix_table_elements : 1,

-				inline_styles : 1,

-				convert_fonts_to_spans : true,

-				indent : 'simple',

-				indent_before : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr',

-				indent_after : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr',

-				validate : true,

-				entity_encoding : 'named',

-				url_converter : t.convertURL,

-				url_converter_scope : t,

-				ie7_compat : true

-			}, s);

-

-			t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {

-				base_uri : tinyMCE.baseURI

-			});

-

-			t.baseURI = tinymce.baseURI;

-

-			t.contentCSS = [];

-

-			// Call setup

-			t.execCallback('setup', t);

-		},

-

-		render : function(nst) {

-			var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader;

-

-			// Page is not loaded yet, wait for it

-			if (!Event.domLoaded) {

-				Event.add(document, 'init', function() {

-					t.render();

-				});

-				return;

-			}

-

-			tinyMCE.settings = s;

-

-			// Element not found, then skip initialization

-			if (!t.getElement())

-				return;

-

-			// Is a iPad/iPhone and not on iOS5, then skip initialization. We need to sniff 

-			// here since the browser says it has contentEditable support but there is no visible

-			// caret We will remove this check ones Apple implements full contentEditable support

-			if (tinymce.isIDevice && !tinymce.isIOS5)

-				return;

-

-			// Add hidden input for non input elements inside form elements

-			if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))

-				DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);

-

-			if (tinymce.WindowManager)

-				t.windowManager = new tinymce.WindowManager(t);

-

-			if (s.encoding == 'xml') {

-				t.onGetContent.add(function(ed, o) {

-					if (o.save)

-						o.content = DOM.encode(o.content);

-				});

-			}

-

-			if (s.add_form_submit_trigger) {

-				t.onSubmit.addToTop(function() {

-					if (t.initialized) {

-						t.save();

-						t.isNotDirty = 1;

-					}

-				});

-			}

-

-			if (s.add_unload_trigger) {

-				t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {

-					if (t.initialized && !t.destroyed && !t.isHidden())

-						t.save({format : 'raw', no_events : true});

-				});

-			}

-

-			tinymce.addUnload(t.destroy, t);

-

-			if (s.submit_patch) {

-				t.onBeforeRenderUI.add(function() {

-					var n = t.getElement().form;

-

-					if (!n)

-						return;

-

-					// Already patched

-					if (n._mceOldSubmit)

-						return;

-

-					// Check page uses id="submit" or name="submit" for it's submit button

-					if (!n.submit.nodeType && !n.submit.length) {

-						t.formElement = n;

-						n._mceOldSubmit = n.submit;

-						n.submit = function() {

-							// Save all instances

-							tinymce.triggerSave();

-							t.isNotDirty = 1;

-

-							return t.formElement._mceOldSubmit(t.formElement);

-						};

-					}

-

-					n = null;

-				});

-			}

-

-			// Load scripts

-			function loadScripts() {

-				if (s.language && s.language_load !== false)

-					sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');

-

-				if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])

-					ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');

-

-				each(explode(s.plugins), function(p) {

-					if (p &&!PluginManager.urls[p]) {

-						if (p.charAt(0) == '-') {

-							p = p.substr(1, p.length);

-							var dependencies = PluginManager.dependencies(p);

-							each(dependencies, function(dep) {

-								var defaultSettings = {prefix:'plugins/', resource: dep, suffix:'/editor_plugin' + tinymce.suffix + '.js'};

-								var dep = PluginManager.createUrl(defaultSettings, dep);

-								PluginManager.load(dep.resource, dep);

-								

-							});

-						} else {

-							// Skip safari plugin, since it is removed as of 3.3b1

-							if (p == 'safari') {

-								return;

-							}

-							PluginManager.load(p, {prefix:'plugins/', resource: p, suffix:'/editor_plugin' + tinymce.suffix + '.js'});

-						}

-					}

-				});

-

-				// Init when que is loaded

-				sl.loadQueue(function() {

-					if (!t.removed)

-						t.init();

-				});

-			};

-

-			loadScripts();

-		},

-

-		init : function() {

-			var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re, i, initializedPlugins = [];

-

-			tinymce.add(t);

-

-			s.aria_label = s.aria_label || DOM.getAttrib(e, 'aria-label', t.getLang('aria.rich_text_area'));

-

-			if (s.theme) {

-				s.theme = s.theme.replace(/-/, '');

-				o = ThemeManager.get(s.theme);

-				t.theme = new o();

-

-				if (t.theme.init && s.init_theme)

-					t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));

-			}

-			function initPlugin(p) {

-				var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po;

-				if (c && tinymce.inArray(initializedPlugins,p) === -1) {

-					each(PluginManager.dependencies(p), function(dep){

-						initPlugin(dep);

-					});

-					po = new c(t, u);

-

-					t.plugins[p] = po;

-

-					if (po.init) {

-						po.init(t, u);

-						initializedPlugins.push(p);

-					}

-				}

-			}

-			

-			// Create all plugins

-			each(explode(s.plugins.replace(/\-/g, '')), initPlugin);

-

-			// Setup popup CSS path(s)

-			if (s.popup_css !== false) {

-				if (s.popup_css)

-					s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css);

-				else

-					s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css");

-			}

-

-			if (s.popup_css_add)

-				s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);

-

-			t.controlManager = new tinymce.ControlManager(t);

-

-			if (s.custom_undo_redo) {

-				t.onBeforeExecCommand.add(function(ed, cmd, ui, val, a) {

-					if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))

-						t.undoManager.beforeChange();

-				});

-

-				t.onExecCommand.add(function(ed, cmd, ui, val, a) {

-					if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))

-						t.undoManager.add();

-				});

-			}

-

-			t.onExecCommand.add(function(ed, c) {

-				// Don't refresh the select lists until caret move

-				if (!/^(FontName|FontSize)$/.test(c))

-					t.nodeChanged();

-			});

-

-			// Remove ghost selections on images and tables in Gecko

-			if (isGecko) {

-				function repaint(a, o) {

-					if (!o || !o.initial)

-						t.execCommand('mceRepaint');

-				};

-

-				t.onUndo.add(repaint);

-				t.onRedo.add(repaint);

-				t.onSetContent.add(repaint);

-			}

-

-			// Enables users to override the control factory

-			t.onBeforeRenderUI.dispatch(t, t.controlManager);

-

-			// Measure box

-			if (s.render_ui) {

-				w = s.width || e.style.width || e.offsetWidth;

-				h = s.height || e.style.height || e.offsetHeight;

-				t.orgDisplay = e.style.display;

-				re = /^[0-9\.]+(|px)$/i;

-

-				if (re.test('' + w))

-					w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);

-

-				if (re.test('' + h))

-					h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);

-

-				// Render UI

-				o = t.theme.renderUI({

-					targetNode : e,

-					width : w,

-					height : h,

-					deltaWidth : s.delta_width,

-					deltaHeight : s.delta_height

-				});

-

-				t.editorContainer = o.editorContainer;

-			}

-

-

-			// User specified a document.domain value

-			if (document.domain && location.hostname != document.domain)

-				tinymce.relaxedDomain = document.domain;

-

-			// Resize editor

-			DOM.setStyles(o.sizeContainer || o.editorContainer, {

-				width : w,

-				height : h

-			});

-

-			// Load specified content CSS last

-			if (s.content_css) {

-				tinymce.each(explode(s.content_css), function(u) {

-					t.contentCSS.push(t.documentBaseURI.toAbsolute(u));

-				});

-			}

-

-			h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');

-			if (h < 100)

-				h = 100;

-

-			t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';

-

-			// We only need to override paths if we have to

-			// IE has a bug where it remove site absolute urls to relative ones if this is specified

-			if (s.document_base_url != tinymce.documentBaseURL)

-				t.iframeHTML += '<base href="' + t.documentBaseURI.getURI() + '" />';

-

-			// IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode.

-			if (s.ie7_compat)

-				t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" />';

-			else

-				t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=edge" />';

-

-			t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';

-

-			// Load the CSS by injecting them into the HTML this will reduce "flicker"

-			for (i = 0; i < t.contentCSS.length; i++) {

-				t.iframeHTML += '<link type="text/css" rel="stylesheet" href="' + t.contentCSS[i] + '" />';

-			}

-

-			bi = s.body_id || 'tinymce';

-			if (bi.indexOf('=') != -1) {

-				bi = t.getParam('body_id', '', 'hash');

-				bi = bi[t.id] || bi;

-			}

-

-			bc = s.body_class || '';

-			if (bc.indexOf('=') != -1) {

-				bc = t.getParam('body_class', '', 'hash');

-				bc = bc[t.id] || '';

-			}

-

-			t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '" onload="window.parent.tinyMCE.get(\'' + t.id + '\').onLoad.dispatch();"><br></body></html>';

-

-			// Domain relaxing enabled, then set document domain

-			if (tinymce.relaxedDomain && (isIE || (tinymce.isOpera && parseFloat(opera.version()) < 11))) {

-				// We need to write the contents here in IE since multiple writes messes up refresh button and back button

-				u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';

-			}

-

-			// Create iframe

-			// TODO: ACC add the appropriate description on this.

-			n = DOM.add(o.iframeContainer, 'iframe', { 

-				id : t.id + "_ifr",

-				src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7

-				frameBorder : '0',

-				allowTransparency : "true",

-				title : s.aria_label,

-				style : {

-					width : '100%',

-					height : h,

-					display : 'block' // Important for Gecko to render the iframe correctly

-				}

-			});

-

-			t.contentAreaContainer = o.iframeContainer;

-			DOM.get(o.editorContainer).style.display = t.orgDisplay;

-			DOM.get(t.id).style.display = 'none';

-			DOM.setAttrib(t.id, 'aria-hidden', true);

-

-			if (!tinymce.relaxedDomain || !u)

-				t.setupIframe();

-

-			e = n = o = null; // Cleanup

-		},

-

-		setupIframe : function() {

-			var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;

-

-			// Setup iframe body

-			if (!isIE || !tinymce.relaxedDomain) {

-				d.open();

-				d.write(t.iframeHTML);

-				d.close();

-

-				if (tinymce.relaxedDomain)

-					d.domain = tinymce.relaxedDomain;

-			}

-

-			// It will not steal focus while setting contentEditable

-			b = t.getBody();

-			b.disabled = true;

-

-			if (!s.readonly)

-				b.contentEditable = true;

-

-			b.disabled = false;

-

-			t.schema = new tinymce.html.Schema(s);

-

-			t.dom = new tinymce.dom.DOMUtils(t.getDoc(), {

-				keep_values : true,

-				url_converter : t.convertURL,

-				url_converter_scope : t,

-				hex_colors : s.force_hex_style_colors,

-				class_filter : s.class_filter,

-				update_styles : 1,

-				fix_ie_paragraphs : 1,

-				schema : t.schema

-			});

-

-			t.parser = new tinymce.html.DomParser(s, t.schema);

-

-			// Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included.

-			if (!t.settings.allow_html_in_named_anchor) {

-				t.parser.addAttributeFilter('name', function(nodes, name) {

-					var i = nodes.length, sibling, prevSibling, parent, node;

-	

-					while (i--) {

-						node = nodes[i];

-						if (node.name === 'a' && node.firstChild) {

-							parent = node.parent;

-	

-							// Move children after current node

-							sibling = node.lastChild;

-							do {

-								prevSibling = sibling.prev;

-								parent.insert(sibling, node);

-								sibling = prevSibling;

-							} while (sibling);

-						}

-					}

-				});

-			}

-

-			// Convert src and href into data-mce-src, data-mce-href and data-mce-style

-			t.parser.addAttributeFilter('src,href,style', function(nodes, name) {

-				var i = nodes.length, node, dom = t.dom, value, internalName;

-

-				while (i--) {

-					node = nodes[i];

-					value = node.attr(name);

-					internalName = 'data-mce-' + name;

-

-					// Add internal attribute if we need to we don't on a refresh of the document

-					if (!node.attributes.map[internalName]) {	

-						if (name === "style")

-							node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name));

-						else

-							node.attr(internalName, t.convertURL(value, name, node.name));

-					}

-				}

-			});

-

-			// Keep scripts from executing

-			t.parser.addNodeFilter('script', function(nodes, name) {

-				var i = nodes.length, node;

-

-				while (i--) {

-					node = nodes[i];

-					node.attr('type', 'mce-' + (node.attr('type') || 'text/javascript'));

-				}

-			});

-

-			t.parser.addNodeFilter('#cdata', function(nodes, name) {

-				var i = nodes.length, node;

-

-				while (i--) {

-					node = nodes[i];

-					node.type = 8;

-					node.name = '#comment';

-					node.value = '[CDATA[' + node.value + ']]';

-				}

-			});

-

-			t.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) {

-				var i = nodes.length, node, nonEmptyElements = t.schema.getNonEmptyElements();

-

-				while (i--) {

-					node = nodes[i];

-

-					if (node.isEmpty(nonEmptyElements))

-						node.empty().append(new tinymce.html.Node('br', 1)).shortEnded = true;

-				}

-			});

-

-			t.serializer = new tinymce.dom.Serializer(s, t.dom, t.schema);

-

-			t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);

-

-			t.formatter = new tinymce.Formatter(this);

-

-			// Register default formats

-			t.formatter.register({

-				alignleft : [

-					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}},

-					{selector : 'img,table', collapsed : false, styles : {'float' : 'left'}}

-				],

-

-				aligncenter : [

-					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}},

-					{selector : 'img', collapsed : false, styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},

-					{selector : 'table', collapsed : false, styles : {marginLeft : 'auto', marginRight : 'auto'}}

-				],

-

-				alignright : [

-					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}},

-					{selector : 'img,table', collapsed : false, styles : {'float' : 'right'}}

-				],

-

-				alignfull : [

-					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}}

-				],

-

-				bold : [

-					{inline : 'strong', remove : 'all'},

-					{inline : 'span', styles : {fontWeight : 'bold'}},

-					{inline : 'b', remove : 'all'}

-				],

-

-				italic : [

-					{inline : 'em', remove : 'all'},

-					{inline : 'span', styles : {fontStyle : 'italic'}},

-					{inline : 'i', remove : 'all'}

-				],

-

-				underline : [

-					{inline : 'span', styles : {textDecoration : 'underline'}, exact : true},

-					{inline : 'u', remove : 'all'}

-				],

-

-				strikethrough : [

-					{inline : 'span', styles : {textDecoration : 'line-through'}, exact : true},

-					{inline : 'strike', remove : 'all'}

-				],

-

-				forecolor : {inline : 'span', styles : {color : '%value'}, wrap_links : false},

-				hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}, wrap_links : false},

-				fontname : {inline : 'span', styles : {fontFamily : '%value'}},

-				fontsize : {inline : 'span', styles : {fontSize : '%value'}},

-				fontsize_class : {inline : 'span', attributes : {'class' : '%value'}},

-				blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'},

-				subscript : {inline : 'sub'},

-				superscript : {inline : 'sup'},

-

-				link : {inline : 'a', selector : 'a', remove : 'all', split : true, deep : true,

-					onmatch : function(node) {

-						return true;

-					},

-

-					onformat : function(elm, fmt, vars) {

-						each(vars, function(value, key) {

-							t.dom.setAttrib(elm, key, value);

-						});

-					}

-				},

-

-				removeformat : [

-					{selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true},

-					{selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true},

-					{selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true}

-				]

-			});

-

-			// Register default block formats

-			each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {

-				t.formatter.register(name, {block : name, remove : 'all'});

-			});

-

-			// Register user defined formats

-			t.formatter.register(t.settings.formats);

-

-			t.undoManager = new tinymce.UndoManager(t);

-

-			// Pass through

-			t.undoManager.onAdd.add(function(um, l) {

-				if (um.hasUndo())

-					return t.onChange.dispatch(t, l, um);

-			});

-

-			t.undoManager.onUndo.add(function(um, l) {

-				return t.onUndo.dispatch(t, l, um);

-			});

-

-			t.undoManager.onRedo.add(function(um, l) {

-				return t.onRedo.dispatch(t, l, um);

-			});

-

-			t.forceBlocks = new tinymce.ForceBlocks(t, {

-				forced_root_block : s.forced_root_block

-			});

-

-			t.editorCommands = new tinymce.EditorCommands(t);

-

-			// Pass through

-			t.serializer.onPreProcess.add(function(se, o) {

-				return t.onPreProcess.dispatch(t, o, se);

-			});

-

-			t.serializer.onPostProcess.add(function(se, o) {

-				return t.onPostProcess.dispatch(t, o, se);

-			});

-

-			t.onPreInit.dispatch(t);

-

-			if (!s.gecko_spellcheck)

-				t.getBody().spellcheck = 0;

-

-			if (!s.readonly)

-				t._addEvents();

-

-			t.controlManager.onPostRender.dispatch(t, t.controlManager);

-			t.onPostRender.dispatch(t);

-

-			t.quirks = new tinymce.util.Quirks(this);

-

-			if (s.directionality)

-				t.getBody().dir = s.directionality;

-

-			if (s.nowrap)

-				t.getBody().style.whiteSpace = "nowrap";

-

-			if (s.handle_node_change_callback) {

-				t.onNodeChange.add(function(ed, cm, n) {

-					t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed());

-				});

-			}

-

-			if (s.save_callback) {

-				t.onSaveContent.add(function(ed, o) {

-					var h = t.execCallback('save_callback', t.id, o.content, t.getBody());

-

-					if (h)

-						o.content = h;

-				});

-			}

-

-			if (s.onchange_callback) {

-				t.onChange.add(function(ed, l) {

-					t.execCallback('onchange_callback', t, l);

-				});

-			}

-

-			if (s.protect) {

-				t.onBeforeSetContent.add(function(ed, o) {

-					if (s.protect) {

-						each(s.protect, function(pattern) {

-							o.content = o.content.replace(pattern, function(str) {

-								return '<!--mce:protected ' + escape(str) + '-->';

-							});

-						});

-					}

-				});

-			}

-

-			if (s.convert_newlines_to_brs) {

-				t.onBeforeSetContent.add(function(ed, o) {

-					if (o.initial)

-						o.content = o.content.replace(/\r?\n/g, '<br />');

-				});

-			}

-

-			if (s.preformatted) {

-				t.onPostProcess.add(function(ed, o) {

-					o.content = o.content.replace(/^\s*<pre.*?>/, '');

-					o.content = o.content.replace(/<\/pre>\s*$/, '');

-

-					if (o.set)

-						o.content = '<pre class="mceItemHidden">' + o.content + '</pre>';

-				});

-			}

-

-			if (s.verify_css_classes) {

-				t.serializer.attribValueFilter = function(n, v) {

-					var s, cl;

-

-					if (n == 'class') {

-						// Build regexp for classes

-						if (!t.classesRE) {

-							cl = t.dom.getClasses();

-

-							if (cl.length > 0) {

-								s = '';

-

-								each (cl, function(o) {

-									s += (s ? '|' : '') + o['class'];

-								});

-

-								t.classesRE = new RegExp('(' + s + ')', 'gi');

-							}

-						}

-

-						return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : '';

-					}

-

-					return v;

-				};

-			}

-

-			if (s.cleanup_callback) {

-				t.onBeforeSetContent.add(function(ed, o) {

-					o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);

-				});

-

-				t.onPreProcess.add(function(ed, o) {

-					if (o.set)

-						t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);

-

-					if (o.get)

-						t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);

-				});

-

-				t.onPostProcess.add(function(ed, o) {

-					if (o.set)

-						o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);

-

-					if (o.get)						

-						o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o);

-				});

-			}

-

-			if (s.save_callback) {

-				t.onGetContent.add(function(ed, o) {

-					if (o.save)

-						o.content = t.execCallback('save_callback', t.id, o.content, t.getBody());

-				});

-			}

-

-			if (s.handle_event_callback) {

-				t.onEvent.add(function(ed, e, o) {

-					if (t.execCallback('handle_event_callback', e, ed, o) === false)

-						Event.cancel(e);

-				});

-			}

-

-			// Add visual aids when new contents is added

-			t.onSetContent.add(function() {

-				t.addVisual(t.getBody());

-			});

-

-			// Remove empty contents

-			if (s.padd_empty_editor) {

-				t.onPostProcess.add(function(ed, o) {

-					o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');

-				});

-			}

-

-			if (isGecko) {

-				// Fix gecko link bug, when a link is placed at the end of block elements there is

-				// no way to move the caret behind the link. This fix adds a bogus br element after the link

-				function fixLinks(ed, o) {

-					each(ed.dom.select('a'), function(n) {

-						var pn = n.parentNode;

-

-						if (ed.dom.isBlock(pn) && pn.lastChild === n)

-							ed.dom.add(pn, 'br', {'data-mce-bogus' : 1});

-					});

-				};

-

-				t.onExecCommand.add(function(ed, cmd) {

-					if (cmd === 'CreateLink')

-						fixLinks(ed);

-				});

-

-				t.onSetContent.add(t.selection.onSetContent.add(fixLinks));

-			}

-

-			t.load({initial : true, format : 'html'});

-			t.startContent = t.getContent({format : 'raw'});

-			t.undoManager.add();

-			t.initialized = true;

-

-			t.onInit.dispatch(t);

-			t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc());

-			t.execCallback('init_instance_callback', t);

-			t.focus(true);

-			t.nodeChanged({initial : 1});

-

-			// Load specified content CSS last

-			each(t.contentCSS, function(u) {

-				t.dom.loadCSS(u);

-			});

-

-			// Handle auto focus

-			if (s.auto_focus) {

-				setTimeout(function () {

-					var ed = tinymce.get(s.auto_focus);

-

-					ed.selection.select(ed.getBody(), 1);

-					ed.selection.collapse(1);

-					ed.getBody().focus();

-					ed.getWin().focus();

-				}, 100);

-			}

-

-			e = null;

-		},

-

-

-		focus : function(sf) {

-			var oed, t = this, selection = t.selection, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc();

-

-			if (!sf) {

-				// Get selected control element

-				ieRng = selection.getRng();

-				if (ieRng.item) {

-					controlElm = ieRng.item(0);

-				}

-

-				t._refreshContentEditable();

-

-				// Is not content editable

-				if (!ce)

-					t.getWin().focus();

-

-				// Focus the body as well since it's contentEditable

-				if (tinymce.isGecko) {

-					t.getBody().focus();

-				}

-

-				// Restore selected control element

-				// This is needed when for example an image is selected within a

-				// layer a call to focus will then remove the control selection

-				if (controlElm && controlElm.ownerDocument == doc) {

-					ieRng = doc.body.createControlRange();

-					ieRng.addElement(controlElm);

-					ieRng.select();

-				}

-

-			}

-

-			if (tinymce.activeEditor != t) {

-				if ((oed = tinymce.activeEditor) != null)

-					oed.onDeactivate.dispatch(oed, t);

-

-				t.onActivate.dispatch(t, oed);

-			}

-

-			tinymce._setActive(t);

-		},

-

-		execCallback : function(n) {

-			var t = this, f = t.settings[n], s;

-

-			if (!f)

-				return;

-

-			// Look through lookup

-			if (t.callbackLookup && (s = t.callbackLookup[n])) {

-				f = s.func;

-				s = s.scope;

-			}

-

-			if (is(f, 'string')) {

-				s = f.replace(/\.\w+$/, '');

-				s = s ? tinymce.resolve(s) : 0;

-				f = tinymce.resolve(f);

-				t.callbackLookup = t.callbackLookup || {};

-				t.callbackLookup[n] = {func : f, scope : s};

-			}

-

-			return f.apply(s || t, Array.prototype.slice.call(arguments, 1));

-		},

-

-		translate : function(s) {

-			var c = this.settings.language || 'en', i18n = tinymce.i18n;

-

-			if (!s)

-				return '';

-

-			return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {

-				return i18n[c + '.' + b] || '{#' + b + '}';

-			});

-		},

-

-		getLang : function(n, dv) {

-			return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');

-		},

-

-		getParam : function(n, dv, ty) {

-			var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o;

-

-			if (ty === 'hash') {

-				o = {};

-

-				if (is(v, 'string')) {

-					each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) {

-						v = v.split('=');

-

-						if (v.length > 1)

-							o[tr(v[0])] = tr(v[1]);

-						else

-							o[tr(v[0])] = tr(v);

-					});

-				} else

-					o = v;

-

-				return o;

-			}

-

-			return v;

-		},

-

-		nodeChanged : function(o) {

-			var t = this, s = t.selection, n = s.getStart() || t.getBody();

-

-			// Fix for bug #1896577 it seems that this can not be fired while the editor is loading

-			if (t.initialized) {

-				o = o || {};

-				n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state

-

-				// Get parents and add them to object

-				o.parents = [];

-				t.dom.getParent(n, function(node) {

-					if (node.nodeName == 'BODY')

-						return true;

-

-					o.parents.push(node);

-				});

-

-				t.onNodeChange.dispatch(

-					t,

-					o ? o.controlManager || t.controlManager : t.controlManager,

-					n,

-					s.isCollapsed(),

-					o

-				);

-			}

-		},

-

-		addButton : function(n, s) {

-			var t = this;

-

-			t.buttons = t.buttons || {};

-			t.buttons[n] = s;

-		},

-

-		addCommand : function(name, callback, scope) {

-			this.execCommands[name] = {func : callback, scope : scope || this};

-		},

-

-		addQueryStateHandler : function(name, callback, scope) {

-			this.queryStateCommands[name] = {func : callback, scope : scope || this};

-		},

-

-		addQueryValueHandler : function(name, callback, scope) {

-			this.queryValueCommands[name] = {func : callback, scope : scope || this};

-		},

-

-		addShortcut : function(pa, desc, cmd_func, sc) {

-			var t = this, c;

-

-			if (!t.settings.custom_shortcuts)

-				return false;

-

-			t.shortcuts = t.shortcuts || {};

-

-			if (is(cmd_func, 'string')) {

-				c = cmd_func;

-

-				cmd_func = function() {

-					t.execCommand(c, false, null);

-				};

-			}

-

-			if (is(cmd_func, 'object')) {

-				c = cmd_func;

-

-				cmd_func = function() {

-					t.execCommand(c[0], c[1], c[2]);

-				};

-			}

-

-			each(explode(pa), function(pa) {

-				var o = {

-					func : cmd_func,

-					scope : sc || this,

-					desc : desc,

-					alt : false,

-					ctrl : false,

-					shift : false

-				};

-

-				each(explode(pa, '+'), function(v) {

-					switch (v) {

-						case 'alt':

-						case 'ctrl':

-						case 'shift':

-							o[v] = true;

-							break;

-

-						default:

-							o.charCode = v.charCodeAt(0);

-							o.keyCode = v.toUpperCase().charCodeAt(0);

-					}

-				});

-

-				t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o;

-			});

-

-			return true;

-		},

-

-		execCommand : function(cmd, ui, val, a) {

-			var t = this, s = 0, o, st;

-

-			if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus))

-				t.focus();

-

-			o = {};

-			t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o);

-			if (o.terminate)

-				return false;

-

-			// Command callback

-			if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) {

-				t.onExecCommand.dispatch(t, cmd, ui, val, a);

-				return true;

-			}

-

-			// Registred commands

-			if (o = t.execCommands[cmd]) {

-				st = o.func.call(o.scope, ui, val);

-

-				// Fall through on true

-				if (st !== true) {

-					t.onExecCommand.dispatch(t, cmd, ui, val, a);

-					return st;

-				}

-			}

-

-			// Plugin commands

-			each(t.plugins, function(p) {

-				if (p.execCommand && p.execCommand(cmd, ui, val)) {

-					t.onExecCommand.dispatch(t, cmd, ui, val, a);

-					s = 1;

-					return false;

-				}

-			});

-

-			if (s)

-				return true;

-

-			// Theme commands

-			if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {

-				t.onExecCommand.dispatch(t, cmd, ui, val, a);

-				return true;

-			}

-

-			// Editor commands

-			if (t.editorCommands.execCommand(cmd, ui, val)) {

-				t.onExecCommand.dispatch(t, cmd, ui, val, a);

-				return true;

-			}

-

-			// Browser commands

-			t.getDoc().execCommand(cmd, ui, val);

-			t.onExecCommand.dispatch(t, cmd, ui, val, a);

-		},

-

-		queryCommandState : function(cmd) {

-			var t = this, o, s;

-

-			// Is hidden then return undefined

-			if (t._isHidden())

-				return;

-

-			// Registred commands

-			if (o = t.queryStateCommands[cmd]) {

-				s = o.func.call(o.scope);

-

-				// Fall though on true

-				if (s !== true)

-					return s;

-			}

-

-			// Registred commands

-			o = t.editorCommands.queryCommandState(cmd);

-			if (o !== -1)

-				return o;

-

-			// Browser commands

-			try {

-				return this.getDoc().queryCommandState(cmd);

-			} catch (ex) {

-				// Fails sometimes see bug: 1896577

-			}

-		},

-

-		queryCommandValue : function(c) {

-			var t = this, o, s;

-

-			// Is hidden then return undefined

-			if (t._isHidden())

-				return;

-

-			// Registred commands

-			if (o = t.queryValueCommands[c]) {

-				s = o.func.call(o.scope);

-

-				// Fall though on true

-				if (s !== true)

-					return s;

-			}

-

-			// Registred commands

-			o = t.editorCommands.queryCommandValue(c);

-			if (is(o))

-				return o;

-

-			// Browser commands

-			try {

-				return this.getDoc().queryCommandValue(c);

-			} catch (ex) {

-				// Fails sometimes see bug: 1896577

-			}

-		},

-

-		show : function() {

-			var t = this;

-

-			DOM.show(t.getContainer());

-			DOM.hide(t.id);

-			t.load();

-		},

-

-		hide : function() {

-			var t = this, d = t.getDoc();

-

-			// Fixed bug where IE has a blinking cursor left from the editor

-			if (isIE && d)

-				d.execCommand('SelectAll');

-

-			// We must save before we hide so Safari doesn't crash

-			t.save();

-			DOM.hide(t.getContainer());

-			DOM.setStyle(t.id, 'display', t.orgDisplay);

-		},

-

-		isHidden : function() {

-			return !DOM.isHidden(this.id);

-		},

-

-		setProgressState : function(b, ti, o) {

-			this.onSetProgressState.dispatch(this, b, ti, o);

-

-			return b;

-		},

-

-		load : function(o) {

-			var t = this, e = t.getElement(), h;

-

-			if (e) {

-				o = o || {};

-				o.load = true;

-

-				// Double encode existing entities in the value

-				h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);

-				o.element = e;

-

-				if (!o.no_events)

-					t.onLoadContent.dispatch(t, o);

-

-				o.element = e = null;

-

-				return h;

-			}

-		},

-

-		save : function(o) {

-			var t = this, e = t.getElement(), h, f;

-

-			if (!e || !t.initialized)

-				return;

-

-			o = o || {};

-			o.save = true;

-

-			// Add undo level will trigger onchange event

-			if (!o.no_events) {

-				t.undoManager.typing = false;

-				t.undoManager.add();

-			}

-

-			o.element = e;

-			h = o.content = t.getContent(o);

-

-			if (!o.no_events)

-				t.onSaveContent.dispatch(t, o);

-

-			h = o.content;

-

-			if (!/TEXTAREA|INPUT/i.test(e.nodeName)) {

-				e.innerHTML = h;

-

-				// Update hidden form element

-				if (f = DOM.getParent(t.id, 'form')) {

-					each(f.elements, function(e) {

-						if (e.name == t.id) {

-							e.value = h;

-							return false;

-						}

-					});

-				}

-			} else

-				e.value = h;

-

-			o.element = e = null;

-

-			return h;

-		},

-

-		setContent : function(content, args) {

-			var self = this, rootNode, body = self.getBody(), forcedRootBlockName;

-

-			// Setup args object

-			args = args || {};

-			args.format = args.format || 'html';

-			args.set = true;

-			args.content = content;

-

-			// Do preprocessing

-			if (!args.no_events)

-				self.onBeforeSetContent.dispatch(self, args);

-

-			content = args.content;

-

-			// Padd empty content in Gecko and Safari. Commands will otherwise fail on the content

-			// It will also be impossible to place the caret in the editor unless there is a BR element present

-			if (!tinymce.isIE && (content.length === 0 || /^\s+$/.test(content))) {

-				forcedRootBlockName = self.settings.forced_root_block;

-				if (forcedRootBlockName)

-					content = '<' + forcedRootBlockName + '><br data-mce-bogus="1"></' + forcedRootBlockName + '>';

-				else

-					content = '<br data-mce-bogus="1">';

-

-				body.innerHTML = content;

-				self.selection.select(body, true);

-				self.selection.collapse(true);

-				return;

-			}

-

-			// Parse and serialize the html

-			if (args.format !== 'raw') {

-				content = new tinymce.html.Serializer({}, self.schema).serialize(

-					self.parser.parse(content)

-				);

-			}

-

-			// Set the new cleaned contents to the editor

-			args.content = tinymce.trim(content);

-			self.dom.setHTML(body, args.content);

-

-			// Do post processing

-			if (!args.no_events)

-				self.onSetContent.dispatch(self, args);

-

-			self.selection.normalize();

-

-			return args.content;

-		},

-

-		getContent : function(args) {

-			var self = this, content;

-

-			// Setup args object

-			args = args || {};

-			args.format = args.format || 'html';

-			args.get = true;

-

-			// Do preprocessing

-			if (!args.no_events)

-				self.onBeforeGetContent.dispatch(self, args);

-

-			// Get raw contents or by default the cleaned contents

-			if (args.format == 'raw')

-				content = self.getBody().innerHTML;

-			else

-				content = self.serializer.serialize(self.getBody(), args);

-

-			args.content = tinymce.trim(content);

-

-			// Do post processing

-			if (!args.no_events)

-				self.onGetContent.dispatch(self, args);

-

-			return args.content;

-		},

-

-		isDirty : function() {

-			var self = this;

-

-			return tinymce.trim(self.startContent) != tinymce.trim(self.getContent({format : 'raw', no_events : 1})) && !self.isNotDirty;

-		},

-

-		getContainer : function() {

-			var t = this;

-

-			if (!t.container)

-				t.container = DOM.get(t.editorContainer || t.id + '_parent');

-

-			return t.container;

-		},

-

-		getContentAreaContainer : function() {

-			return this.contentAreaContainer;

-		},

-

-		getElement : function() {

-			return DOM.get(this.settings.content_element || this.id);

-		},

-

-		getWin : function() {

-			var t = this, e;

-

-			if (!t.contentWindow) {

-				e = DOM.get(t.id + "_ifr");

-

-				if (e)

-					t.contentWindow = e.contentWindow;

-			}

-

-			return t.contentWindow;

-		},

-

-		getDoc : function() {

-			var t = this, w;

-

-			if (!t.contentDocument) {

-				w = t.getWin();

-

-				if (w)

-					t.contentDocument = w.document;

-			}

-

-			return t.contentDocument;

-		},

-

-		getBody : function() {

-			return this.bodyElement || this.getDoc().body;

-		},

-

-		convertURL : function(u, n, e) {

-			var t = this, s = t.settings;

-

-			// Use callback instead

-			if (s.urlconverter_callback)

-				return t.execCallback('urlconverter_callback', u, e, true, n);

-

-			// Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs

-			if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)

-				return u;

-

-			// Convert to relative

-			if (s.relative_urls)

-				return t.documentBaseURI.toRelative(u);

-

-			// Convert to absolute

-			u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);

-

-			return u;

-		},

-

-		addVisual : function(e) {

-			var t = this, s = t.settings;

-

-			e = e || t.getBody();

-

-			if (!is(t.hasVisual))

-				t.hasVisual = s.visual;

-

-			each(t.dom.select('table,a', e), function(e) {

-				var v;

-

-				switch (e.nodeName) {

-					case 'TABLE':

-						v = t.dom.getAttrib(e, 'border');

-

-						if (!v || v == '0') {

-							if (t.hasVisual)

-								t.dom.addClass(e, s.visual_table_class);

-							else

-								t.dom.removeClass(e, s.visual_table_class);

-						}

-

-						return;

-

-					case 'A':

-						v = t.dom.getAttrib(e, 'name');

-

-						if (v) {

-							if (t.hasVisual)

-								t.dom.addClass(e, 'mceItemAnchor');

-							else

-								t.dom.removeClass(e, 'mceItemAnchor');

-						}

-

-						return;

-				}

-			});

-

-			t.onVisualAid.dispatch(t, e, t.hasVisual);

-		},

-

-		remove : function() {

-			var t = this, e = t.getContainer();

-

-			t.removed = 1; // Cancels post remove event execution

-			t.hide();

-

-			t.execCallback('remove_instance_callback', t);

-			t.onRemove.dispatch(t);

-

-			// Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command

-			t.onExecCommand.listeners = [];

-

-			tinymce.remove(t);

-			DOM.remove(e);

-		},

-

-		destroy : function(s) {

-			var t = this;

-

-			// One time is enough

-			if (t.destroyed)

-				return;

-

-			if (!s) {

-				tinymce.removeUnload(t.destroy);

-				tinyMCE.onBeforeUnload.remove(t._beforeUnload);

-

-				// Manual destroy

-				if (t.theme && t.theme.destroy)

-					t.theme.destroy();

-

-				// Destroy controls, selection and dom

-				t.controlManager.destroy();

-				t.selection.destroy();

-				t.dom.destroy();

-

-				// Remove all events

-

-				// Don't clear the window or document if content editable

-				// is enabled since other instances might still be present

-				if (!t.settings.content_editable) {

-					Event.clear(t.getWin());

-					Event.clear(t.getDoc());

-				}

-

-				Event.clear(t.getBody());

-				Event.clear(t.formElement);

-			}

-

-			if (t.formElement) {

-				t.formElement.submit = t.formElement._mceOldSubmit;

-				t.formElement._mceOldSubmit = null;

-			}

-

-			t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null;

-

-			if (t.selection)

-				t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null;

-

-			t.destroyed = 1;

-		},

-

-		// Internal functions

-

-		_addEvents : function() {

-			// 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset

-			var t = this, i, s = t.settings, dom = t.dom, lo = {

-				mouseup : 'onMouseUp',

-				mousedown : 'onMouseDown',

-				click : 'onClick',

-				keyup : 'onKeyUp',

-				keydown : 'onKeyDown',

-				keypress : 'onKeyPress',

-				submit : 'onSubmit',

-				reset : 'onReset',

-				contextmenu : 'onContextMenu',

-				dblclick : 'onDblClick',

-				paste : 'onPaste' // Doesn't work in all browsers yet

-			};

-

-			function eventHandler(e, o) {

-				var ty = e.type;

-

-				// Don't fire events when it's removed

-				if (t.removed)

-					return;

-

-				// Generic event handler

-				if (t.onEvent.dispatch(t, e, o) !== false) {

-					// Specific event handler

-					t[lo[e.fakeType || e.type]].dispatch(t, e, o);

-				}

-			};

-

-			// Add DOM events

-			each(lo, function(v, k) {

-				switch (k) {

-					case 'contextmenu':

-						dom.bind(t.getDoc(), k, eventHandler);

-						break;

-

-					case 'paste':

-						dom.bind(t.getBody(), k, function(e) {

-							eventHandler(e);

-						});

-						break;

-

-					case 'submit':

-					case 'reset':

-						dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);

-						break;

-

-					default:

-						dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);

-				}

-			});

-

-			dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {

-				t.focus(true);

-			});

-

-

-			// Fixes bug where a specified document_base_uri could result in broken images

-			// This will also fix drag drop of images in Gecko

-			if (tinymce.isGecko) {

-				dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {

-					var v;

-

-					e = e.target;

-

-					if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('data-mce-src')))

-						e.src = t.documentBaseURI.toAbsolute(v);

-				});

-			}

-

-			// Set various midas options in Gecko

-			if (isGecko) {

-				function setOpts() {

-					var t = this, d = t.getDoc(), s = t.settings;

-

-					if (isGecko && !s.readonly) {

-						t._refreshContentEditable();

-

-						try {

-							// Try new Gecko method

-							d.execCommand("styleWithCSS", 0, false);

-						} catch (ex) {

-							// Use old method

-							if (!t._isHidden())

-								try {d.execCommand("useCSS", 0, true);} catch (ex) {}

-						}

-

-						if (!s.table_inline_editing)

-							try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}

-

-						if (!s.object_resizing)

-							try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}

-					}

-				};

-

-				t.onBeforeExecCommand.add(setOpts);

-				t.onMouseDown.add(setOpts);

-			}

-

-			// Add node change handlers

-			t.onMouseUp.add(t.nodeChanged);

-			//t.onClick.add(t.nodeChanged);

-			t.onKeyUp.add(function(ed, e) {

-				var c = e.keyCode;

-

-				if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)

-					t.nodeChanged();

-			});

-

-

-			// Add block quote deletion handler

-			t.onKeyDown.add(function(ed, e) {

-				if (e.keyCode != VK.BACKSPACE)

-					return;

-

-				var rng = ed.selection.getRng();

-				if (!rng.collapsed)

-					return;

-

-				var n = rng.startContainer;

-				var offset = rng.startOffset;

-

-				while (n && n.nodeType && n.nodeType != 1 && n.parentNode)

-					n = n.parentNode;

-

-				// Is the cursor at the beginning of a blockquote?

-				if (n && n.parentNode && n.parentNode.tagName === 'BLOCKQUOTE' && n.parentNode.firstChild == n && offset == 0) {

-					// Remove the blockquote

-					ed.formatter.toggle('blockquote', null, n.parentNode);

-

-					// Move the caret to the beginning of n

-					rng.setStart(n, 0);

-					rng.setEnd(n, 0);

-					ed.selection.setRng(rng);

-					ed.selection.collapse(false);

-				}

-			});

-

-

-

-			// Add reset handler

-			t.onReset.add(function() {

-				t.setContent(t.startContent, {format : 'raw'});

-			});

-

-			// Add shortcuts

-			if (s.custom_shortcuts) {

-				if (s.custom_undo_redo_keyboard_shortcuts) {

-					t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo');

-					t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo');

-				}

-

-				// Add default shortcuts for gecko

-				t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');

-				t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');

-				t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');

-

-				// BlockFormat shortcuts keys

-				for (i=1; i<=6; i++)

-					t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);

-

-				t.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']);

-				t.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']);

-				t.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']);

-

-				function find(e) {

-					var v = null;

-

-					if (!e.altKey && !e.ctrlKey && !e.metaKey)

-						return v;

-

-					each(t.shortcuts, function(o) {

-						if (tinymce.isMac && o.ctrl != e.metaKey)

-							return;

-						else if (!tinymce.isMac && o.ctrl != e.ctrlKey)

-							return;

-

-						if (o.alt != e.altKey)

-							return;

-

-						if (o.shift != e.shiftKey)

-							return;

-

-						if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {

-							v = o;

-							return false;

-						}

-					});

-

-					return v;

-				};

-

-				t.onKeyUp.add(function(ed, e) {

-					var o = find(e);

-

-					if (o)

-						return Event.cancel(e);

-				});

-

-				t.onKeyPress.add(function(ed, e) {

-					var o = find(e);

-

-					if (o)

-						return Event.cancel(e);

-				});

-

-				t.onKeyDown.add(function(ed, e) {

-					var o = find(e);

-

-					if (o) {

-						o.func.call(o.scope);

-						return Event.cancel(e);

-					}

-				});

-			}

-

-			if (tinymce.isIE) {

-				// Fix so resize will only update the width and height attributes not the styles of an image

-				// It will also block mceItemNoResize items

-				dom.bind(t.getDoc(), 'controlselect', function(e) {

-					var re = t.resizeInfo, cb;

-

-					e = e.target;

-

-					// Don't do this action for non image elements

-					if (e.nodeName !== 'IMG')

-						return;

-

-					if (re)

-						dom.unbind(re.node, re.ev, re.cb);

-

-					if (!dom.hasClass(e, 'mceItemNoResize')) {

-						ev = 'resizeend';

-						cb = dom.bind(e, ev, function(e) {

-							var v;

-

-							e = e.target;

-

-							if (v = dom.getStyle(e, 'width')) {

-								dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));

-								dom.setStyle(e, 'width', '');

-							}

-

-							if (v = dom.getStyle(e, 'height')) {

-								dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));

-								dom.setStyle(e, 'height', '');

-							}

-						});

-					} else {

-						ev = 'resizestart';

-						cb = dom.bind(e, 'resizestart', Event.cancel, Event);

-					}

-

-					re = t.resizeInfo = {

-						node : e,

-						ev : ev,

-						cb : cb

-					};

-				});

-			}

-

-			if (tinymce.isOpera) {

-				t.onClick.add(function(ed, e) {

-					Event.prevent(e);

-				});

-			}

-

-			// Add custom undo/redo handlers

-			if (s.custom_undo_redo) {

-				function addUndo() {

-					t.undoManager.typing = false;

-					t.undoManager.add();

-				};

-

-				dom.bind(t.getDoc(), 'focusout', function(e) {

-					if (!t.removed && t.undoManager.typing)

-						addUndo();

-				});

-

-				// Add undo level when contents is drag/dropped within the editor

-				t.dom.bind(t.dom.getRoot(), 'dragend', function(e) {

-					addUndo();

-				});

-

-				t.onKeyUp.add(function(ed, e) {

-					var keyCode = e.keyCode;

-

-					if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || e.ctrlKey)

-						addUndo();

-				});

-

-				t.onKeyDown.add(function(ed, e) {

-					var keyCode = e.keyCode, sel;

-

-					if (keyCode == 8) {

-						sel = t.getDoc().selection;

-

-						// Fix IE control + backspace browser bug

-						if (sel && sel.createRange && sel.createRange().item) {

-							t.undoManager.beforeChange();

-							ed.dom.remove(sel.createRange().item(0));

-							addUndo();

-

-							return Event.cancel(e);

-						}

-					}

-

-					// Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter

-					if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45) {

-						// Add position before enter key is pressed, used by IE since it still uses the default browser behavior

-						// Todo: Remove this once we normalize enter behavior on IE

-						if (tinymce.isIE && keyCode == 13)

-							t.undoManager.beforeChange();

-

-						if (t.undoManager.typing)

-							addUndo();

-

-						return;

-					}

-

-					// If key isn't shift,ctrl,alt,capslock,metakey

-					if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !t.undoManager.typing) {

-						t.undoManager.beforeChange();

-						t.undoManager.typing = true;

-						t.undoManager.add();

-					}

-				});

-

-				t.onMouseDown.add(function() {

-					if (t.undoManager.typing)

-						addUndo();

-				});

-			}

-

-			// Bug fix for FireFox keeping styles from end of selection instead of start.

-			if (tinymce.isGecko) {

-				function getAttributeApplyFunction() {

-					var template = t.dom.getAttribs(t.selection.getStart().cloneNode(false));

-

-					return function() {

-						var target = t.selection.getStart();

-

-						if (target !== t.getBody()) {

-							t.dom.setAttrib(target, "style", null);

-

-						each(template, function(attr) {

-							target.setAttributeNode(attr.cloneNode(true));

-						});

-						}

-					};

-				}

-

-				function isSelectionAcrossElements() {

-					var s = t.selection;

-

-					return !s.isCollapsed() && s.getStart() != s.getEnd();

-				}

-

-				t.onKeyPress.add(function(ed, e) {

-					var applyAttributes;

-

-					if ((e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) {

-						applyAttributes = getAttributeApplyFunction();

-						t.getDoc().execCommand('delete', false, null);

-						applyAttributes();

-

-						return Event.cancel(e);

-					}

-				});

-

-				t.dom.bind(t.getDoc(), 'cut', function(e) {

-					var applyAttributes;

-

-					if (isSelectionAcrossElements()) {

-						applyAttributes = getAttributeApplyFunction();

-						t.onKeyUp.addToTop(Event.cancel, Event);

-

-						setTimeout(function() {

-							applyAttributes();

-							t.onKeyUp.remove(Event.cancel, Event);

-						}, 0);

-					}

-				});

-			}

-		},

-

-		_refreshContentEditable : function() {

-			var self = this, body, parent;

-

-			// Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again

-			if (self._isHidden()) {

-				body = self.getBody();

-				parent = body.parentNode;

-

-				parent.removeChild(body);

-				parent.appendChild(body);

-

-				body.focus();

-			}

-		},

-

-		_isHidden : function() {

-			var s;

-

-			if (!isGecko)

-				return 0;

-

-			// Weird, wheres that cursor selection?

-			s = this.selection.getSel();

-			return (!s || !s.rangeCount || s.rangeCount == 0);

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	// Added for compression purposes

-	var each = tinymce.each, undefined, TRUE = true, FALSE = false;

-

-	tinymce.EditorCommands = function(editor) {

-		var dom = editor.dom,

-			selection = editor.selection,

-			commands = {state: {}, exec : {}, value : {}},

-			settings = editor.settings,

-			formatter = editor.formatter,

-			bookmark;

-

-		function execCommand(command, ui, value) {

-			var func;

-

-			command = command.toLowerCase();

-			if (func = commands.exec[command]) {

-				func(command, ui, value);

-				return TRUE;

-			}

-

-			return FALSE;

-		};

-

-		function queryCommandState(command) {

-			var func;

-

-			command = command.toLowerCase();

-			if (func = commands.state[command])

-				return func(command);

-

-			return -1;

-		};

-

-		function queryCommandValue(command) {

-			var func;

-

-			command = command.toLowerCase();

-			if (func = commands.value[command])

-				return func(command);

-

-			return FALSE;

-		};

-

-		function addCommands(command_list, type) {

-			type = type || 'exec';

-

-			each(command_list, function(callback, command) {

-				each(command.toLowerCase().split(','), function(command) {

-					commands[type][command] = callback;

-				});

-			});

-		};

-

-		// Expose public methods

-		tinymce.extend(this, {

-			execCommand : execCommand,

-			queryCommandState : queryCommandState,

-			queryCommandValue : queryCommandValue,

-			addCommands : addCommands

-		});

-

-		// Private methods

-

-		function execNativeCommand(command, ui, value) {

-			if (ui === undefined)

-				ui = FALSE;

-

-			if (value === undefined)

-				value = null;

-

-			return editor.getDoc().execCommand(command, ui, value);

-		};

-

-		function isFormatMatch(name) {

-			return formatter.match(name);

-		};

-

-		function toggleFormat(name, value) {

-			formatter.toggle(name, value ? {value : value} : undefined);

-		};

-

-		function storeSelection(type) {

-			bookmark = selection.getBookmark(type);

-		};

-

-		function restoreSelection() {

-			selection.moveToBookmark(bookmark);

-		};

-

-		// Add execCommand overrides

-		addCommands({

-			// Ignore these, added for compatibility

-			'mceResetDesignMode,mceBeginUndoLevel' : function() {},

-

-			// Add undo manager logic

-			'mceEndUndoLevel,mceAddUndoLevel' : function() {

-				editor.undoManager.add();

-			},

-

-			'Cut,Copy,Paste' : function(command) {

-				var doc = editor.getDoc(), failed;

-

-				// Try executing the native command

-				try {

-					execNativeCommand(command);

-				} catch (ex) {

-					// Command failed

-					failed = TRUE;

-				}

-

-				// Present alert message about clipboard access not being available

-				if (failed || !doc.queryCommandSupported(command)) {

-					if (tinymce.isGecko) {

-						editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) {

-							if (state)

-								open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank');

-						});

-					} else

-						editor.windowManager.alert(editor.getLang('clipboard_no_support'));

-				}

-			},

-

-			// Override unlink command

-			unlink : function(command) {

-				if (selection.isCollapsed())

-					selection.select(selection.getNode());

-

-				execNativeCommand(command);

-				selection.collapse(FALSE);

-			},

-

-			// Override justify commands to use the text formatter engine

-			'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {

-				var align = command.substring(7);

-

-				// Remove all other alignments first

-				each('left,center,right,full'.split(','), function(name) {

-					if (align != name)

-						formatter.remove('align' + name);

-				});

-

-				toggleFormat('align' + align);

-				execCommand('mceRepaint');

-			},

-

-			// Override list commands to fix WebKit bug

-			'InsertUnorderedList,InsertOrderedList' : function(command) {

-				var listElm, listParent;

-

-				execNativeCommand(command);

-

-				// WebKit produces lists within block elements so we need to split them

-				// we will replace the native list creation logic to custom logic later on

-				// TODO: Remove this when the list creation logic is removed

-				listElm = dom.getParent(selection.getNode(), 'ol,ul');

-				if (listElm) {

-					listParent = listElm.parentNode;

-

-					// If list is within a text block then split that block

-					if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {

-						storeSelection();

-						dom.split(listParent, listElm);

-						restoreSelection();

-					}

-				}

-			},

-

-			// Override commands to use the text formatter engine

-			'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {

-				toggleFormat(command);

-			},

-

-			// Override commands to use the text formatter engine

-			'ForeColor,HiliteColor,FontName' : function(command, ui, value) {

-				toggleFormat(command, value);

-			},

-

-			FontSize : function(command, ui, value) {

-				var fontClasses, fontSizes;

-

-				// Convert font size 1-7 to styles

-				if (value >= 1 && value <= 7) {

-					fontSizes = tinymce.explode(settings.font_size_style_values);

-					fontClasses = tinymce.explode(settings.font_size_classes);

-

-					if (fontClasses)

-						value = fontClasses[value - 1] || value;

-					else

-						value = fontSizes[value - 1] || value;

-				}

-

-				toggleFormat(command, value);

-			},

-

-			RemoveFormat : function(command) {

-				formatter.remove(command);

-			},

-

-			mceBlockQuote : function(command) {

-				toggleFormat('blockquote');

-			},

-

-			FormatBlock : function(command, ui, value) {

-				return toggleFormat(value || 'p');

-			},

-

-			mceCleanup : function() {

-				var bookmark = selection.getBookmark();

-

-				editor.setContent(editor.getContent({cleanup : TRUE}), {cleanup : TRUE});

-

-				selection.moveToBookmark(bookmark);

-			},

-

-			mceRemoveNode : function(command, ui, value) {

-				var node = value || selection.getNode();

-

-				// Make sure that the body node isn't removed

-				if (node != editor.getBody()) {

-					storeSelection();

-					editor.dom.remove(node, TRUE);

-					restoreSelection();

-				}

-			},

-

-			mceSelectNodeDepth : function(command, ui, value) {

-				var counter = 0;

-

-				dom.getParent(selection.getNode(), function(node) {

-					if (node.nodeType == 1 && counter++ == value) {

-						selection.select(node);

-						return FALSE;

-					}

-				}, editor.getBody());

-			},

-

-			mceSelectNode : function(command, ui, value) {

-				selection.select(value);

-			},

-

-			mceInsertContent : function(command, ui, value) {

-				var parser, serializer, parentNode, rootNode, fragment, args,

-					marker, nodeRect, viewPortRect, rng, node, node2, bookmarkHtml, viewportBodyElement;

-

-				//selection.normalize();

-

-				// Setup parser and serializer

-				parser = editor.parser;

-				serializer = new tinymce.html.Serializer({}, editor.schema);

-				bookmarkHtml = '<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';

-

-				// Run beforeSetContent handlers on the HTML to be inserted

-				args = {content: value, format: 'html'};

-				selection.onBeforeSetContent.dispatch(selection, args);

-				value = args.content;

-

-				// Add caret at end of contents if it's missing

-				if (value.indexOf('{$caret}') == -1)

-					value += '{$caret}';

-

-				// Replace the caret marker with a span bookmark element

-				value = value.replace(/\{\$caret\}/, bookmarkHtml);

-

-				// Insert node maker where we will insert the new HTML and get it's parent

-				if (!selection.isCollapsed())

-					editor.getDoc().execCommand('Delete', false, null);

-

-				parentNode = selection.getNode();

-

-				// Parse the fragment within the context of the parent node

-				args = {context : parentNode.nodeName.toLowerCase()};

-				fragment = parser.parse(value, args);

-

-				// Move the caret to a more suitable location

-				node = fragment.lastChild;

-				if (node.attr('id') == 'mce_marker') {

-					marker = node;

-

-					for (node = node.prev; node; node = node.walk(true)) {

-						if (node.type == 3 || !dom.isBlock(node.name)) {

-							node.parent.insert(marker, node, node.name === 'br');

-							break;

-						}

-					}

-				}

-

-				// If parser says valid we can insert the contents into that parent

-				if (!args.invalid) {

-					value = serializer.serialize(fragment);

-

-					// Check if parent is empty or only has one BR element then set the innerHTML of that parent

-					node = parentNode.firstChild;

-					node2 = parentNode.lastChild;

-					if (!node || (node === node2 && node.nodeName === 'BR'))

-						dom.setHTML(parentNode, value);

-					else

-						selection.setContent(value);

-				} else {

-					// If the fragment was invalid within that context then we need

-					// to parse and process the parent it's inserted into

-

-					// Insert bookmark node and get the parent

-					selection.setContent(bookmarkHtml);

-					parentNode = editor.selection.getNode();

-					rootNode = editor.getBody();

-

-					// Opera will return the document node when selection is in root

-					if (parentNode.nodeType == 9)

-						parentNode = node = rootNode;

-					else

-						node = parentNode;

-

-					// Find the ancestor just before the root element

-					while (node !== rootNode) {

-						parentNode = node;

-						node = node.parentNode;

-					}

-

-					// Get the outer/inner HTML depending on if we are in the root and parser and serialize that

-					value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);

-					value = serializer.serialize(

-						parser.parse(

-							// Need to replace by using a function since $ in the contents would otherwise be a problem

-							value.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i, function() {

-								return serializer.serialize(fragment);

-							})

-						)

-					);

-

-					// Set the inner/outer HTML depending on if we are in the root or not

-					if (parentNode == rootNode)

-						dom.setHTML(rootNode, value);

-					else

-						dom.setOuterHTML(parentNode, value);

-				}

-

-				marker = dom.get('mce_marker');

-

-				// Scroll range into view scrollIntoView on element can't be used since it will scroll the main view port as well

-				nodeRect = dom.getRect(marker);

-				viewPortRect = dom.getViewPort(editor.getWin());

-

-				// Check if node is out side the viewport if it is then scroll to it

-				if ((nodeRect.y + nodeRect.h > viewPortRect.y + viewPortRect.h || nodeRect.y < viewPortRect.y) ||

-					(nodeRect.x > viewPortRect.x + viewPortRect.w || nodeRect.x < viewPortRect.x)) {

-					viewportBodyElement = tinymce.isIE ? editor.getDoc().documentElement : editor.getBody();

-					viewportBodyElement.scrollLeft = nodeRect.x;

-					viewportBodyElement.scrollTop = nodeRect.y - viewPortRect.h + 25;

-				}

-

-				// Move selection before marker and remove it

-				rng = dom.createRng();

-

-				// If previous sibling is a text node set the selection to the end of that node

-				node = marker.previousSibling;

-				if (node && node.nodeType == 3) {

-					rng.setStart(node, node.nodeValue.length);

-				} else {

-					// If the previous sibling isn't a text node or doesn't exist set the selection before the marker node

-					rng.setStartBefore(marker);

-					rng.setEndBefore(marker);

-				}

-

-				// Remove the marker node and set the new range

-				dom.remove(marker);

-				selection.setRng(rng);

-

-				// Dispatch after event and add any visual elements needed

-				selection.onSetContent.dispatch(selection, args);

-				editor.addVisual();

-			},

-

-			mceInsertRawHTML : function(command, ui, value) {

-				selection.setContent('tiny_mce_marker');

-				editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, function() { return value }));

-			},

-

-			mceSetContent : function(command, ui, value) {

-				editor.setContent(value);

-			},

-

-			'Indent,Outdent' : function(command) {

-				var intentValue, indentUnit, value;

-

-				// Setup indent level

-				intentValue = settings.indentation;

-				indentUnit = /[a-z%]+$/i.exec(intentValue);

-				intentValue = parseInt(intentValue);

-

-				if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) {

-					each(selection.getSelectedBlocks(), function(element) {

-						if (command == 'outdent') {

-							value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue);

-							dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : '');

-						} else

-							dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit);

-					});

-				} else

-					execNativeCommand(command);

-			},

-

-			mceRepaint : function() {

-				var bookmark;

-

-				if (tinymce.isGecko) {

-					try {

-						storeSelection(TRUE);

-

-						if (selection.getSel())

-							selection.getSel().selectAllChildren(editor.getBody());

-

-						selection.collapse(TRUE);

-						restoreSelection();

-					} catch (ex) {

-						// Ignore

-					}

-				}

-			},

-

-			mceToggleFormat : function(command, ui, value) {

-				formatter.toggle(value);

-			},

-

-			InsertHorizontalRule : function() {

-				editor.execCommand('mceInsertContent', false, '<hr />');

-			},

-

-			mceToggleVisualAid : function() {

-				editor.hasVisual = !editor.hasVisual;

-				editor.addVisual();

-			},

-

-			mceReplaceContent : function(command, ui, value) {

-				editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'})));

-			},

-

-			mceInsertLink : function(command, ui, value) {

-				var anchor;

-

-				if (typeof(value) == 'string')

-					value = {href : value};

-

-				anchor = dom.getParent(selection.getNode(), 'a');

-

-				// Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here.

-				value.href = value.href.replace(' ', '%20');

-

-				// Remove existing links if there could be child links or that the href isn't specified

-				if (!anchor || !value.href) {

-					formatter.remove('link');

-				}		

-

-				// Apply new link to selection

-				if (value.href) {

-					formatter.apply('link', value, anchor);

-				}

-			},

-

-			selectAll : function() {

-				var root = dom.getRoot(), rng = dom.createRng();

-

-				rng.setStart(root, 0);

-				rng.setEnd(root, root.childNodes.length);

-

-				editor.selection.setRng(rng);

-			}

-		});

-

-		// Add queryCommandState overrides

-		addCommands({

-			// Override justify commands

-			'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {

-				var name = 'align' + command.substring(7);

-				// Use Formatter.matchNode instead of Formatter.match so that we don't match on parent node. This fixes bug where for both left

-				// and right align buttons can be active. This could occur when selected nodes have align right and the parent has align left.

-				var nodes = selection.isCollapsed() ? [selection.getNode()] : selection.getSelectedBlocks();

-				var matches = tinymce.map(nodes, function(node) {

-					return !!formatter.matchNode(node, name);

-				});

-				return tinymce.inArray(matches, TRUE) !== -1;

-			},

-

-			'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {

-				return isFormatMatch(command);

-			},

-

-			mceBlockQuote : function() {

-				return isFormatMatch('blockquote');

-			},

-

-			Outdent : function() {

-				var node;

-

-				if (settings.inline_styles) {

-					if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)

-						return TRUE;

-

-					if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)

-						return TRUE;

-				}

-

-				return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE'));

-			},

-

-			'InsertUnorderedList,InsertOrderedList' : function(command) {

-				return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : 'OL');

-			}

-		}, 'state');

-

-		// Add queryCommandValue overrides

-		addCommands({

-			'FontSize,FontName' : function(command) {

-				var value = 0, parent;

-

-				if (parent = dom.getParent(selection.getNode(), 'span')) {

-					if (command == 'fontsize')

-						value = parent.style.fontSize;

-					else

-						value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();

-				}

-

-				return value;

-			}

-		}, 'value');

-

-		// Add undo manager logic

-		if (settings.custom_undo_redo) {

-			addCommands({

-				Undo : function() {

-					editor.undoManager.undo();

-				},

-

-				Redo : function() {

-					editor.undoManager.redo();

-				}

-			});

-		}

-	};

-})(tinymce);

-

-(function(tinymce) {

-	var Dispatcher = tinymce.util.Dispatcher;

-

-	tinymce.UndoManager = function(editor) {

-		var self, index = 0, data = [], beforeBookmark;

-

-		function getContent() {

-			return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}));

-		};

-

-		return self = {

-			typing : false,

-

-			onAdd : new Dispatcher(self),

-

-			onUndo : new Dispatcher(self),

-

-			onRedo : new Dispatcher(self),

-

-			beforeChange : function() {

-				beforeBookmark = editor.selection.getBookmark(2, true);

-			},

-

-			add : function(level) {

-				var i, settings = editor.settings, lastLevel;

-

-				level = level || {};

-				level.content = getContent();

-

-				// Add undo level if needed

-				lastLevel = data[index];

-				if (lastLevel && lastLevel.content == level.content)

-					return null;

-

-				// Set before bookmark on previous level

-				if (data[index])

-					data[index].beforeBookmark = beforeBookmark;

-

-				// Time to compress

-				if (settings.custom_undo_redo_levels) {

-					if (data.length > settings.custom_undo_redo_levels) {

-						for (i = 0; i < data.length - 1; i++)

-							data[i] = data[i + 1];

-

-						data.length--;

-						index = data.length;

-					}

-				}

-

-				// Get a non intrusive normalized bookmark

-				level.bookmark = editor.selection.getBookmark(2, true);

-

-				// Crop array if needed

-				if (index < data.length - 1)

-					data.length = index + 1;

-

-				data.push(level);

-				index = data.length - 1;

-

-				self.onAdd.dispatch(self, level);

-				editor.isNotDirty = 0;

-

-				return level;

-			},

-

-			undo : function() {

-				var level, i;

-

-				if (self.typing) {

-					self.add();

-					self.typing = false;

-				}

-

-				if (index > 0) {

-					level = data[--index];

-

-					editor.setContent(level.content, {format : 'raw'});

-					editor.selection.moveToBookmark(level.beforeBookmark);

-

-					self.onUndo.dispatch(self, level);

-				}

-

-				return level;

-			},

-

-			redo : function() {

-				var level;

-

-				if (index < data.length - 1) {

-					level = data[++index];

-

-					editor.setContent(level.content, {format : 'raw'});

-					editor.selection.moveToBookmark(level.bookmark);

-

-					self.onRedo.dispatch(self, level);

-				}

-

-				return level;

-			},

-

-			clear : function() {

-				data = [];

-				index = 0;

-				self.typing = false;

-			},

-

-			hasUndo : function() {

-				return index > 0 || this.typing;

-			},

-

-			hasRedo : function() {

-				return index < data.length - 1 && !this.typing;

-			}

-		};

-	};

-})(tinymce);

-

-(function(tinymce) {

-	// Shorten names

-	var Event = tinymce.dom.Event,

-		isIE = tinymce.isIE,

-		isGecko = tinymce.isGecko,

-		isOpera = tinymce.isOpera,

-		each = tinymce.each,

-		extend = tinymce.extend,

-		TRUE = true,

-		FALSE = false;

-

-	function cloneFormats(node) {

-		var clone, temp, inner;

-

-		do {

-			if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {

-				if (clone) {

-					temp = node.cloneNode(false);

-					temp.appendChild(clone);

-					clone = temp;

-				} else {

-					clone = inner = node.cloneNode(false);

-				}

-

-				clone.removeAttribute('id');

-			}

-		} while (node = node.parentNode);

-

-		if (clone)

-			return {wrapper : clone, inner : inner};

-	};

-

-	// Checks if the selection/caret is at the end of the specified block element

-	function isAtEnd(rng, par) {

-		var rng2 = par.ownerDocument.createRange();

-

-		rng2.setStart(rng.endContainer, rng.endOffset);

-		rng2.setEndAfter(par);

-

-		// Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element

-		return rng2.cloneContents().textContent.length == 0;

-	};

-

-	function splitList(selection, dom, li) {

-		var listBlock, block;

-

-		if (dom.isEmpty(li)) {

-			listBlock = dom.getParent(li, 'ul,ol');

-

-			if (!dom.getParent(listBlock.parentNode, 'ul,ol')) {

-				dom.split(listBlock, li);

-				block = dom.create('p', 0, '<br data-mce-bogus="1" />');

-				dom.replace(block, li);

-				selection.select(block, 1);

-			}

-

-			return FALSE;

-		}

-

-		return TRUE;

-	};

-

-	tinymce.create('tinymce.ForceBlocks', {

-		ForceBlocks : function(ed) {

-			var t = this, s = ed.settings, elm;

-

-			t.editor = ed;

-			t.dom = ed.dom;

-			elm = (s.forced_root_block || 'p').toLowerCase();

-			s.element = elm.toUpperCase();

-

-			ed.onPreInit.add(t.setup, t);

-		},

-

-		setup : function() {

-			var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection, blockElements = ed.schema.getBlockElements();

-

-			// Force root blocks

-			if (s.forced_root_block) {

-				function addRootBlocks() {

-					var node = selection.getStart(), rootNode = ed.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF;

-

-					if (!node || node.nodeType !== 1)

-						return;

-

-					// Check if node is wrapped in block

-					while (node != rootNode) {

-						if (blockElements[node.nodeName])

-							return;

-

-						node = node.parentNode;

-					}

-

-					// Get current selection

-					rng = selection.getRng();

-					if (rng.setStart) {

-						startContainer = rng.startContainer;

-						startOffset = rng.startOffset;

-						endContainer = rng.endContainer;

-						endOffset = rng.endOffset;

-					} else {

-						// Force control range into text range

-						if (rng.item) {

-							rng = ed.getDoc().body.createTextRange();

-							rng.moveToElementText(rng.item(0));

-						}

-

-						tmpRng = rng.duplicate();

-						tmpRng.collapse(true);

-						startOffset = tmpRng.move('character', offset) * -1;

-

-						if (!tmpRng.collapsed) {

-							tmpRng = rng.duplicate();

-							tmpRng.collapse(false);

-							endOffset = (tmpRng.move('character', offset) * -1) - startOffset;

-						}

-					}

-

-					// Wrap non block elements and text nodes

-					for (node = rootNode.firstChild; node; node) {

-						if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) {

-							if (!rootBlockNode) {

-								rootBlockNode = dom.create(s.forced_root_block);

-								node.parentNode.insertBefore(rootBlockNode, node);

-							}

-

-							tempNode = node;

-							node = node.nextSibling;

-							rootBlockNode.appendChild(tempNode);

-						} else {

-							rootBlockNode = null;

-							node = node.nextSibling;

-						}

-					}

-

-					if (rng.setStart) {

-						rng.setStart(startContainer, startOffset);

-						rng.setEnd(endContainer, endOffset);

-						selection.setRng(rng);

-					} else {

-						try {

-							rng = ed.getDoc().body.createTextRange();

-							rng.moveToElementText(rootNode);

-							rng.collapse(true);

-							rng.moveStart('character', startOffset);

-

-							if (endOffset > 0)

-								rng.moveEnd('character', endOffset);

-

-							rng.select();

-						} catch (ex) {

-							// Ignore

-						}

-					}

-

-					ed.nodeChanged();

-				};

-

-				ed.onKeyUp.add(addRootBlocks);

-				ed.onClick.add(addRootBlocks);

-			}

-

-			if (s.force_br_newlines) {

-				// Force IE to produce BRs on enter

-				if (isIE) {

-					ed.onKeyPress.add(function(ed, e) {

-						var n;

-

-						if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') {

-							selection.setContent('<br id="__" /> ', {format : 'raw'});

-							n = dom.get('__');

-							n.removeAttribute('id');

-							selection.select(n);

-							selection.collapse();

-							return Event.cancel(e);

-						}

-					});

-				}

-			}

-

-			if (s.force_p_newlines) {

-				if (!isIE) {

-					ed.onKeyPress.add(function(ed, e) {

-						if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e))

-							Event.cancel(e);

-					});

-				} else {

-					// Ungly hack to for IE to preserve the formatting when you press

-					// enter at the end of a block element with formatted contents

-					// This logic overrides the browsers default logic with

-					// custom logic that enables us to control the output

-					tinymce.addUnload(function() {

-						t._previousFormats = 0; // Fix IE leak

-					});

-

-					ed.onKeyPress.add(function(ed, e) {

-						t._previousFormats = 0;

-

-						// Clone the current formats, this will later be applied to the new block contents

-						if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles)

-							t._previousFormats = cloneFormats(ed.selection.getStart());

-					});

-

-					ed.onKeyUp.add(function(ed, e) {

-						// Let IE break the element and the wrap the new caret location in the previous formats

-						if (e.keyCode == 13 && !e.shiftKey) {

-							var parent = ed.selection.getStart(), fmt = t._previousFormats;

-

-							// Parent is an empty block

-							if (!parent.hasChildNodes() && fmt) {

-								parent = dom.getParent(parent, dom.isBlock);

-

-								if (parent && parent.nodeName != 'LI') {

-									parent.innerHTML = '';

-

-									if (t._previousFormats) {

-										parent.appendChild(fmt.wrapper);

-										fmt.inner.innerHTML = '\uFEFF';

-									} else

-										parent.innerHTML = '\uFEFF';

-

-									selection.select(parent, 1);

-									selection.collapse(true);

-									ed.getDoc().execCommand('Delete', false, null);

-									t._previousFormats = 0;

-								}

-							}

-						}

-					});

-				}

-

-				if (isGecko) {

-					ed.onKeyDown.add(function(ed, e) {

-						if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)

-							t.backspaceDelete(e, e.keyCode == 8);

-					});

-				}

-			}

-

-			// Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973

-			if (tinymce.isWebKit) {

-				function insertBr(ed) {

-					var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h;

-

-					// Insert BR element

-					rng.insertNode(br = dom.create('br'));

-

-					// Place caret after BR

-					rng.setStartAfter(br);

-					rng.setEndAfter(br);

-					selection.setRng(rng);

-

-					// Could not place caret after BR then insert an nbsp entity and move the caret

-					if (selection.getSel().focusNode == br.previousSibling) {

-						selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));

-						selection.collapse(TRUE);

-					}

-

-					// Create a temporary DIV after the BR and get the position as it

-					// seems like getPos() returns 0 for text nodes and BR elements.

-					dom.insertAfter(div, br);

-					divYPos = dom.getPos(div).y;

-					dom.remove(div);

-

-					// Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117

-					if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port.

-						ed.getWin().scrollTo(0, divYPos);

-				};

-

-				ed.onKeyPress.add(function(ed, e) {

-					if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) {

-						insertBr(ed);

-						Event.cancel(e);

-					}

-				});

-			}

-

-			// IE specific fixes

-			if (isIE) {

-				// Replaces IE:s auto generated paragraphs with the specified element name

-				if (s.element != 'P') {

-					ed.onKeyPress.add(function(ed, e) {

-						t.lastElm = selection.getNode().nodeName;

-					});

-

-					ed.onKeyUp.add(function(ed, e) {

-						var bl, n = selection.getNode(), b = ed.getBody();

-

-						if (b.childNodes.length === 1 && n.nodeName == 'P') {

-							n = dom.rename(n, s.element);

-							selection.select(n);

-							selection.collapse();

-							ed.nodeChanged();

-						} else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {

-							bl = dom.getParent(n, 'p');

-

-							if (bl) {

-								dom.rename(bl, s.element);

-								ed.nodeChanged();

-							}

-						}

-					});

-				}

-			}

-		},

-

-		getParentBlock : function(n) {

-			var d = this.dom;

-

-			return d.getParent(n, d.isBlock);

-		},

-

-		insertPara : function(e) {

-			var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;

-			var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;

-

-			ed.undoManager.beforeChange();

-

-			// If root blocks are forced then use Operas default behavior since it's really good

-// Removed due to bug: #1853816

-//			if (se.forced_root_block && isOpera)

-//				return TRUE;

-

-			// Setup before range

-			rb = d.createRange();

-

-			// If is before the first block element and in body, then move it into first block element

-			rb.setStart(s.anchorNode, s.anchorOffset);

-			rb.collapse(TRUE);

-

-			// Setup after range

-			ra = d.createRange();

-

-			// If is before the first block element and in body, then move it into first block element

-			ra.setStart(s.focusNode, s.focusOffset);

-			ra.collapse(TRUE);

-

-			// Setup start/end points

-			dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;

-			sn = dir ? s.anchorNode : s.focusNode;

-			so = dir ? s.anchorOffset : s.focusOffset;

-			en = dir ? s.focusNode : s.anchorNode;

-			eo = dir ? s.focusOffset : s.anchorOffset;

-

-			// If selection is in empty table cell

-			if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {

-				if (sn.firstChild.nodeName == 'BR')

-					dom.remove(sn.firstChild); // Remove BR

-

-				// Create two new block elements

-				if (sn.childNodes.length == 0) {

-					ed.dom.add(sn, se.element, null, '<br />');

-					aft = ed.dom.add(sn, se.element, null, '<br />');

-				} else {

-					n = sn.innerHTML;

-					sn.innerHTML = '';

-					ed.dom.add(sn, se.element, null, n);

-					aft = ed.dom.add(sn, se.element, null, '<br />');

-				}

-

-				// Move caret into the last one

-				r = d.createRange();

-				r.selectNodeContents(aft);

-				r.collapse(1);

-				ed.selection.setRng(r);

-

-				return FALSE;

-			}

-

-			// If the caret is in an invalid location in FF we need to move it into the first block

-			if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {

-				sn = en = sn.firstChild;

-				so = eo = 0;

-				rb = d.createRange();

-				rb.setStart(sn, 0);

-				ra = d.createRange();

-				ra.setStart(en, 0);

-			}

-

-			// If the body is totally empty add a BR element this might happen on webkit

-			if (!d.body.hasChildNodes()) {

-				d.body.appendChild(dom.create('br'));

-			}

-

-			// Never use body as start or end node

-			sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes

-			sn = sn.nodeName == "BODY" ? sn.firstChild : sn;

-			en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes

-			en = en.nodeName == "BODY" ? en.firstChild : en;

-

-			// Get start and end blocks

-			sb = t.getParentBlock(sn);

-			eb = t.getParentBlock(en);

-			bn = sb ? sb.nodeName : se.element; // Get block name to create

-

-			// Return inside list use default browser behavior

-			if (n = t.dom.getParent(sb, 'li,pre')) {

-				if (n.nodeName == 'LI')

-					return splitList(ed.selection, t.dom, n);

-

-				return TRUE;

-			}

-

-			// If caption or absolute layers then always generate new blocks within

-			if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {

-				bn = se.element;

-				sb = null;

-			}

-

-			// If caption or absolute layers then always generate new blocks within

-			if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {

-				bn = se.element;

-				eb = null;

-			}

-

-			// Use P instead

-			if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) {

-				bn = se.element;

-				sb = eb = null;

-			}

-

-			// Setup new before and after blocks

-			bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);

-			aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);

-

-			// Remove id from after clone

-			aft.removeAttribute('id');

-

-			// Is header and cursor is at the end, then force paragraph under

-			if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb))

-				aft = ed.dom.create(se.element);

-

-			// Find start chop node

-			n = sc = sn;

-			do {

-				if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))

-					break;

-

-				sc = n;

-			} while ((n = n.previousSibling ? n.previousSibling : n.parentNode));

-

-			// Find end chop node

-			n = ec = en;

-			do {

-				if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))

-					break;

-

-				ec = n;

-			} while ((n = n.nextSibling ? n.nextSibling : n.parentNode));

-

-			// Place first chop part into before block element

-			if (sc.nodeName == bn)

-				rb.setStart(sc, 0);

-			else

-				rb.setStartBefore(sc);

-

-			rb.setEnd(sn, so);

-			bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari

-

-			// Place secnd chop part within new block element

-			try {

-				ra.setEndAfter(ec);

-			} catch(ex) {

-				//console.debug(s.focusNode, s.focusOffset);

-			}

-

-			ra.setStart(en, eo);

-			aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari

-

-			// Create range around everything

-			r = d.createRange();

-			if (!sc.previousSibling && sc.parentNode.nodeName == bn) {

-				r.setStartBefore(sc.parentNode);

-			} else {

-				if (rb.startContainer.nodeName == bn && rb.startOffset == 0)

-					r.setStartBefore(rb.startContainer);

-				else

-					r.setStart(rb.startContainer, rb.startOffset);

-			}

-

-			if (!ec.nextSibling && ec.parentNode.nodeName == bn)

-				r.setEndAfter(ec.parentNode);

-			else

-				r.setEnd(ra.endContainer, ra.endOffset);

-

-			// Delete and replace it with new block elements

-			r.deleteContents();

-

-			if (isOpera)

-				ed.getWin().scrollTo(0, vp.y);

-

-			// Never wrap blocks in blocks

-			if (bef.firstChild && bef.firstChild.nodeName == bn)

-				bef.innerHTML = bef.firstChild.innerHTML;

-

-			if (aft.firstChild && aft.firstChild.nodeName == bn)

-				aft.innerHTML = aft.firstChild.innerHTML;

-

-			function appendStyles(e, en) {

-				var nl = [], nn, n, i;

-

-				e.innerHTML = '';

-

-				// Make clones of style elements

-				if (se.keep_styles) {

-					n = en;

-					do {

-						// We only want style specific elements

-						if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {

-							nn = n.cloneNode(FALSE);

-							dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique

-							nl.push(nn);

-						}

-					} while (n = n.parentNode);

-				}

-

-				// Append style elements to aft

-				if (nl.length > 0) {

-					for (i = nl.length - 1, nn = e; i >= 0; i--)

-						nn = nn.appendChild(nl[i]);

-

-					// Padd most inner style element

-					nl[0].innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there

-					return nl[0]; // Move caret to most inner element

-				} else

-					e.innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there

-			};

-				

-			// Padd empty blocks

-			if (dom.isEmpty(bef))

-				appendStyles(bef, sn);

-

-			// Fill empty afterblook with current style

-			if (dom.isEmpty(aft))

-				car = appendStyles(aft, en);

-

-			// Opera needs this one backwards for older versions

-			if (isOpera && parseFloat(opera.version()) < 9.5) {

-				r.insertNode(bef);

-				r.insertNode(aft);

-			} else {

-				r.insertNode(aft);

-				r.insertNode(bef);

-			}

-

-			// Normalize

-			aft.normalize();

-			bef.normalize();

-

-			// Move cursor and scroll into view

-			ed.selection.select(aft, true);

-			ed.selection.collapse(true);

-

-			// scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs

-			y = ed.dom.getPos(aft).y;

-			//ch = aft.clientHeight;

-

-			// Is element within viewport

-			if (y < vp.y || y + 25 > vp.y + vp.h) {

-				ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks

-

-				/*console.debug(

-					'Element: y=' + y + ', h=' + ch + ', ' +

-					'Viewport: y=' + vp.y + ", h=" + vp.h + ', bottom=' + (vp.y + vp.h)

-				);*/

-			}

-

-			ed.undoManager.add();

-

-			return FALSE;

-		},

-

-		backspaceDelete : function(e, bs) {

-			var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn, walker;

-

-			// Delete when caret is behind a element doesn't work correctly on Gecko see #3011651

-			if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) {

-				walker = new tinymce.dom.TreeWalker(sc.lastChild, sc);

-

-				// Walk the dom backwards until we find a text node

-				for (n = sc.lastChild; n; n = walker.prev()) {

-					if (n.nodeType == 3) {

-						r.setStart(n, n.nodeValue.length);

-						r.collapse(true);

-						se.setRng(r);

-						return;

-					}

-				}

-			}

-

-			// The caret sometimes gets stuck in Gecko if you delete empty paragraphs

-			// This workaround removes the element by hand and moves the caret to the previous element

-			if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {

-				if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {

-					// Find previous block element

-					n = sc;

-					while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;

-

-					if (n) {

-						if (sc != b.firstChild) {

-							// Find last text node

-							w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE);

-							while (tn = w.nextNode())

-								n = tn;

-

-							// Place caret at the end of last text node

-							r = ed.getDoc().createRange();

-							r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);

-							r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);

-							se.setRng(r);

-

-							// Remove the target container

-							ed.dom.remove(sc);

-						}

-

-						return Event.cancel(e);

-					}

-				}

-			}

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	// Shorten names

-	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;

-

-	tinymce.create('tinymce.ControlManager', {

-		ControlManager : function(ed, s) {

-			var t = this, i;

-

-			s = s || {};

-			t.editor = ed;

-			t.controls = {};

-			t.onAdd = new tinymce.util.Dispatcher(t);

-			t.onPostRender = new tinymce.util.Dispatcher(t);

-			t.prefix = s.prefix || ed.id + '_';

-			t._cls = {};

-

-			t.onPostRender.add(function() {

-				each(t.controls, function(c) {

-					c.postRender();

-				});

-			});

-		},

-

-		get : function(id) {

-			return this.controls[this.prefix + id] || this.controls[id];

-		},

-

-		setActive : function(id, s) {

-			var c = null;

-

-			if (c = this.get(id))

-				c.setActive(s);

-

-			return c;

-		},

-

-		setDisabled : function(id, s) {

-			var c = null;

-

-			if (c = this.get(id))

-				c.setDisabled(s);

-

-			return c;

-		},

-

-		add : function(c) {

-			var t = this;

-

-			if (c) {

-				t.controls[c.id] = c;

-				t.onAdd.dispatch(c, t);

-			}

-

-			return c;

-		},

-

-		createControl : function(n) {

-			var c, t = this, ed = t.editor;

-

-			each(ed.plugins, function(p) {

-				if (p.createControl) {

-					c = p.createControl(n, t);

-

-					if (c)

-						return false;

-				}

-			});

-

-			switch (n) {

-				case "|":

-				case "separator":

-					return t.createSeparator();

-			}

-

-			if (!c && ed.buttons && (c = ed.buttons[n]))

-				return t.createButton(n, c);

-

-			return t.add(c);

-		},

-

-		createDropMenu : function(id, s, cc) {

-			var t = this, ed = t.editor, c, bm, v, cls;

-

-			s = extend({

-				'class' : 'mceDropDown',

-				constrain : ed.settings.constrain_menus

-			}, s);

-

-			s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';

-			if (v = ed.getParam('skin_variant'))

-				s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);

-

-			id = t.prefix + id;

-			cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;

-			c = t.controls[id] = new cls(id, s);

-			c.onAddItem.add(function(c, o) {

-				var s = o.settings;

-

-				s.title = ed.getLang(s.title, s.title);

-

-				if (!s.onclick) {

-					s.onclick = function(v) {

-						if (s.cmd)

-							ed.execCommand(s.cmd, s.ui || false, s.value);

-					};

-				}

-			});

-

-			ed.onRemove.add(function() {

-				c.destroy();

-			});

-

-			// Fix for bug #1897785, #1898007

-			if (tinymce.isIE) {

-				c.onShowMenu.add(function() {

-					// IE 8 needs focus in order to store away a range with the current collapsed caret location

-					ed.focus();

-

-					bm = ed.selection.getBookmark(1);

-				});

-

-				c.onHideMenu.add(function() {

-					if (bm) {

-						ed.selection.moveToBookmark(bm);

-						bm = 0;

-					}

-				});

-			}

-

-			return t.add(c);

-		},

-

-		createListBox : function(id, s, cc) {

-			var t = this, ed = t.editor, cmd, c, cls;

-

-			if (t.get(id))

-				return null;

-

-			s.title = ed.translate(s.title);

-			s.scope = s.scope || ed;

-

-			if (!s.onselect) {

-				s.onselect = function(v) {

-					ed.execCommand(s.cmd, s.ui || false, v || s.value);

-				};

-			}

-

-			s = extend({

-				title : s.title,

-				'class' : 'mce_' + id,

-				scope : s.scope,

-				control_manager : t

-			}, s);

-

-			id = t.prefix + id;

-

-

-			function useNativeListForAccessibility(ed) {

-				return ed.settings.use_accessible_selects && !tinymce.isGecko

-			}

-

-			if (ed.settings.use_native_selects || useNativeListForAccessibility(ed))

-				c = new tinymce.ui.NativeListBox(id, s);

-			else {

-				cls = cc || t._cls.listbox || tinymce.ui.ListBox;

-				c = new cls(id, s, ed);

-			}

-

-			t.controls[id] = c;

-

-			// Fix focus problem in Safari

-			if (tinymce.isWebKit) {

-				c.onPostRender.add(function(c, n) {

-					// Store bookmark on mousedown

-					Event.add(n, 'mousedown', function() {

-						ed.bookmark = ed.selection.getBookmark(1);

-					});

-

-					// Restore on focus, since it might be lost

-					Event.add(n, 'focus', function() {

-						ed.selection.moveToBookmark(ed.bookmark);

-						ed.bookmark = null;

-					});

-				});

-			}

-

-			if (c.hideMenu)

-				ed.onMouseDown.add(c.hideMenu, c);

-

-			return t.add(c);

-		},

-

-		createButton : function(id, s, cc) {

-			var t = this, ed = t.editor, o, c, cls;

-

-			if (t.get(id))

-				return null;

-

-			s.title = ed.translate(s.title);

-			s.label = ed.translate(s.label);

-			s.scope = s.scope || ed;

-

-			if (!s.onclick && !s.menu_button) {

-				s.onclick = function() {

-					ed.execCommand(s.cmd, s.ui || false, s.value);

-				};

-			}

-

-			s = extend({

-				title : s.title,

-				'class' : 'mce_' + id,

-				unavailable_prefix : ed.getLang('unavailable', ''),

-				scope : s.scope,

-				control_manager : t

-			}, s);

-

-			id = t.prefix + id;

-

-			if (s.menu_button) {

-				cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;

-				c = new cls(id, s, ed);

-				ed.onMouseDown.add(c.hideMenu, c);

-			} else {

-				cls = t._cls.button || tinymce.ui.Button;

-				c = new cls(id, s, ed);

-			}

-

-			return t.add(c);

-		},

-

-		createMenuButton : function(id, s, cc) {

-			s = s || {};

-			s.menu_button = 1;

-

-			return this.createButton(id, s, cc);

-		},

-

-		createSplitButton : function(id, s, cc) {

-			var t = this, ed = t.editor, cmd, c, cls;

-

-			if (t.get(id))

-				return null;

-

-			s.title = ed.translate(s.title);

-			s.scope = s.scope || ed;

-

-			if (!s.onclick) {

-				s.onclick = function(v) {

-					ed.execCommand(s.cmd, s.ui || false, v || s.value);

-				};

-			}

-

-			if (!s.onselect) {

-				s.onselect = function(v) {

-					ed.execCommand(s.cmd, s.ui || false, v || s.value);

-				};

-			}

-

-			s = extend({

-				title : s.title,

-				'class' : 'mce_' + id,

-				scope : s.scope,

-				control_manager : t

-			}, s);

-

-			id = t.prefix + id;

-			cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;

-			c = t.add(new cls(id, s, ed));

-			ed.onMouseDown.add(c.hideMenu, c);

-

-			return c;

-		},

-

-		createColorSplitButton : function(id, s, cc) {

-			var t = this, ed = t.editor, cmd, c, cls, bm;

-

-			if (t.get(id))

-				return null;

-

-			s.title = ed.translate(s.title);

-			s.scope = s.scope || ed;

-

-			if (!s.onclick) {

-				s.onclick = function(v) {

-					if (tinymce.isIE)

-						bm = ed.selection.getBookmark(1);

-

-					ed.execCommand(s.cmd, s.ui || false, v || s.value);

-				};

-			}

-

-			if (!s.onselect) {

-				s.onselect = function(v) {

-					ed.execCommand(s.cmd, s.ui || false, v || s.value);

-				};

-			}

-

-			s = extend({

-				title : s.title,

-				'class' : 'mce_' + id,

-				'menu_class' : ed.getParam('skin') + 'Skin',

-				scope : s.scope,

-				more_colors_title : ed.getLang('more_colors')

-			}, s);

-

-			id = t.prefix + id;

-			cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;

-			c = new cls(id, s, ed);

-			ed.onMouseDown.add(c.hideMenu, c);

-

-			// Remove the menu element when the editor is removed

-			ed.onRemove.add(function() {

-				c.destroy();

-			});

-

-			// Fix for bug #1897785, #1898007

-			if (tinymce.isIE) {

-				c.onShowMenu.add(function() {

-					// IE 8 needs focus in order to store away a range with the current collapsed caret location

-					ed.focus();

-					bm = ed.selection.getBookmark(1);

-				});

-

-				c.onHideMenu.add(function() {

-					if (bm) {

-						ed.selection.moveToBookmark(bm);

-						bm = 0;

-					}

-				});

-			}

-

-			return t.add(c);

-		},

-

-		createToolbar : function(id, s, cc) {

-			var c, t = this, cls;

-

-			id = t.prefix + id;

-			cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;

-			c = new cls(id, s, t.editor);

-

-			if (t.get(id))

-				return null;

-

-			return t.add(c);

-		},

-		

-		createToolbarGroup : function(id, s, cc) {

-			var c, t = this, cls;

-			id = t.prefix + id;

-			cls = cc || this._cls.toolbarGroup || tinymce.ui.ToolbarGroup;

-			c = new cls(id, s, t.editor);

-			

-			if (t.get(id))

-				return null;

-			

-			return t.add(c);

-		},

-

-		createSeparator : function(cc) {

-			var cls = cc || this._cls.separator || tinymce.ui.Separator;

-

-			return new cls();

-		},

-

-		setControlType : function(n, c) {

-			return this._cls[n.toLowerCase()] = c;

-		},

-	

-		destroy : function() {

-			each(this.controls, function(c) {

-				c.destroy();

-			});

-

-			this.controls = null;

-		}

-	});

-})(tinymce);

-

-(function(tinymce) {

-	var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;

-

-	tinymce.create('tinymce.WindowManager', {

-		WindowManager : function(ed) {

-			var t = this;

-

-			t.editor = ed;

-			t.onOpen = new Dispatcher(t);

-			t.onClose = new Dispatcher(t);

-			t.params = {};

-			t.features = {};

-		},

-

-		open : function(s, p) {

-			var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;

-

-			// Default some options

-			s = s || {};

-			p = p || {};

-			sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window

-			sh = isOpera ? vp.h : screen.height;

-			s.name = s.name || 'mc_' + new Date().getTime();

-			s.width = parseInt(s.width || 320);

-			s.height = parseInt(s.height || 240);

-			s.resizable = true;

-			s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);

-			s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);

-			p.inline = false;

-			p.mce_width = s.width;

-			p.mce_height = s.height;

-			p.mce_auto_focus = s.auto_focus;

-

-			if (mo) {

-				if (isIE) {

-					s.center = true;

-					s.help = false;

-					s.dialogWidth = s.width + 'px';

-					s.dialogHeight = s.height + 'px';

-					s.scroll = s.scrollbars || false;

-				}

-			}

-

-			// Build features string

-			each(s, function(v, k) {

-				if (tinymce.is(v, 'boolean'))

-					v = v ? 'yes' : 'no';

-

-				if (!/^(name|url)$/.test(k)) {

-					if (isIE && mo)

-						f += (f ? ';' : '') + k + ':' + v;

-					else

-						f += (f ? ',' : '') + k + '=' + v;

-				}

-			});

-

-			t.features = s;

-			t.params = p;

-			t.onOpen.dispatch(t, s, p);

-

-			u = s.url || s.file;

-			u = tinymce._addVer(u);

-

-			try {

-				if (isIE && mo) {

-					w = 1;

-					window.showModalDialog(u, window, f);

-				} else

-					w = window.open(u, s.name, f);

-			} catch (ex) {

-				// Ignore

-			}

-

-			if (!w)

-				alert(t.editor.getLang('popup_blocked'));

-		},

-

-		close : function(w) {

-			w.close();

-			this.onClose.dispatch(this);

-		},

-

-		createInstance : function(cl, a, b, c, d, e) {

-			var f = tinymce.resolve(cl);

-

-			return new f(a, b, c, d, e);

-		},

-

-		confirm : function(t, cb, s, w) {

-			w = w || window;

-

-			cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));

-		},

-

-		alert : function(tx, cb, s, w) {

-			var t = this;

-

-			w = w || window;

-			w.alert(t._decode(t.editor.getLang(tx, tx)));

-

-			if (cb)

-				cb.call(s || t);

-		},

-

-		resizeBy : function(dw, dh, win) {

-			win.resizeBy(dw, dh);

-		},

-

-		// Internal functions

-

-		_decode : function(s) {

-			return tinymce.DOM.decode(s).replace(/\\n/g, '\n');

-		}

-	});

-}(tinymce));

-(function(tinymce) {

-	tinymce.Formatter = function(ed) {

-		var formats = {},

-			each = tinymce.each,

-			dom = ed.dom,

-			selection = ed.selection,

-			TreeWalker = tinymce.dom.TreeWalker,

-			rangeUtils = new tinymce.dom.RangeUtils(dom),

-			isValid = ed.schema.isValidChild,

-			isBlock = dom.isBlock,

-			forcedRootBlock = ed.settings.forced_root_block,

-			nodeIndex = dom.nodeIndex,

-			INVISIBLE_CHAR = '\uFEFF',

-			MCE_ATTR_RE = /^(src|href|style)$/,

-			FALSE = false,

-			TRUE = true,

-			undefined;

-

-		function isArray(obj) {

-			return obj instanceof Array;

-		};

-

-		function getParents(node, selector) {

-			return dom.getParents(node, selector, dom.getRoot());

-		};

-

-		function isCaretNode(node) {

-			return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline');

-		};

-

-		// Public functions

-

-		function get(name) {

-			return name ? formats[name] : formats;

-		};

-

-		function register(name, format) {

-			if (name) {

-				if (typeof(name) !== 'string') {

-					each(name, function(format, name) {

-						register(name, format);

-					});

-				} else {

-					// Force format into array and add it to internal collection

-					format = format.length ? format : [format];

-

-					each(format, function(format) {

-						// Set deep to false by default on selector formats this to avoid removing

-						// alignment on images inside paragraphs when alignment is changed on paragraphs

-						if (format.deep === undefined)

-							format.deep = !format.selector;

-

-						// Default to true

-						if (format.split === undefined)

-							format.split = !format.selector || format.inline;

-

-						// Default to true

-						if (format.remove === undefined && format.selector && !format.inline)

-							format.remove = 'none';

-

-						// Mark format as a mixed format inline + block level

-						if (format.selector && format.inline) {

-							format.mixed = true;

-							format.block_expand = true;

-						}

-

-						// Split classes if needed

-						if (typeof(format.classes) === 'string')

-							format.classes = format.classes.split(/\s+/);

-					});

-

-					formats[name] = format;

-				}

-			}

-		};

-

-		var getTextDecoration = function(node) {

-			var decoration;

-

-			ed.dom.getParent(node, function(n) {

-				decoration = ed.dom.getStyle(n, 'text-decoration');

-				return decoration && decoration !== 'none';

-			});

-

-			return decoration;

-		};

-

-		var processUnderlineAndColor = function(node) {

-			var textDecoration;

-			if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {

-				textDecoration = getTextDecoration(node.parentNode);

-				if (ed.dom.getStyle(node, 'color') && textDecoration) {

-					ed.dom.setStyle(node, 'text-decoration', textDecoration);

-				} else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) {

-					ed.dom.setStyle(node, 'text-decoration', null);

-				}

-			}

-		};

-

-		function apply(name, vars, node) {

-			var formatList = get(name), format = formatList[0], bookmark, rng, i, isCollapsed = selection.isCollapsed();

-

-			function setElementFormat(elm, fmt) {

-				fmt = fmt || format;

-

-				if (elm) {

-					if (fmt.onformat) {

-						fmt.onformat(elm, fmt, vars, node);

-					}

-

-					each(fmt.styles, function(value, name) {

-						dom.setStyle(elm, name, replaceVars(value, vars));

-					});

-

-					each(fmt.attributes, function(value, name) {

-						dom.setAttrib(elm, name, replaceVars(value, vars));

-					});

-

-					each(fmt.classes, function(value) {

-						value = replaceVars(value, vars);

-

-						if (!dom.hasClass(elm, value))

-							dom.addClass(elm, value);

-					});

-				}

-			};

-			function adjustSelectionToVisibleSelection() {

-				function findSelectionEnd(start, end) {

-					var walker = new TreeWalker(end);

-					for (node = walker.current(); node; node = walker.prev()) {

-						if (node.childNodes.length > 1 || node == start) {

-							return node;

-						}

-					}

-				};

-

-				// Adjust selection so that a end container with a end offset of zero is not included in the selection

-				// as this isn't visible to the user.

-				var rng = ed.selection.getRng();

-				var start = rng.startContainer;

-				var end = rng.endContainer;

-

-				if (start != end && rng.endOffset == 0) {

-					var newEnd = findSelectionEnd(start, end);

-					var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length;

-

-					rng.setEnd(newEnd, endOffset);

-				}

-

-				return rng;

-			}

-			

-			function applyStyleToList(node, bookmark, wrapElm, newWrappers, process){

-				var nodes = [], listIndex = -1, list, startIndex = -1, endIndex = -1, currentWrapElm;

-				

-				// find the index of the first child list.

-				each(node.childNodes, function(n, index) {

-					if (n.nodeName === "UL" || n.nodeName === "OL") {

-						listIndex = index;

-						list = n;

-						return false;

-					}

-				});

-				

-				// get the index of the bookmarks

-				each(node.childNodes, function(n, index) {

-					if (n.nodeName === "SPAN" && dom.getAttrib(n, "data-mce-type") == "bookmark") {

-						if (n.id == bookmark.id + "_start") {

-							startIndex = index;

-						} else if (n.id == bookmark.id + "_end") {

-							endIndex = index;

-						}

-					}

-				});

-				

-				// if the selection spans across an embedded list, or there isn't an embedded list - handle processing normally

-				if (listIndex <= 0 || (startIndex < listIndex && endIndex > listIndex)) {

-					each(tinymce.grep(node.childNodes), process);

-					return 0;

-				} else {

-					currentWrapElm = wrapElm.cloneNode(FALSE);

-					

-					// create a list of the nodes on the same side of the list as the selection

-					each(tinymce.grep(node.childNodes), function(n, index) {

-						if ((startIndex < listIndex && index < listIndex) || (startIndex > listIndex && index > listIndex)) {

-							nodes.push(n); 

-							n.parentNode.removeChild(n);

-						}

-					});

-					

-					// insert the wrapping element either before or after the list.

-					if (startIndex < listIndex) {

-						node.insertBefore(currentWrapElm, list);

-					} else if (startIndex > listIndex) {

-						node.insertBefore(currentWrapElm, list.nextSibling);

-					}

-					

-					// add the new nodes to the list.

-					newWrappers.push(currentWrapElm);

-

-					each(nodes, function(node) {

-						currentWrapElm.appendChild(node);

-					});

-

-					return currentWrapElm;

-				}

-			};

-			

-			function applyRngStyle(rng, bookmark, node_specific) {

-				var newWrappers = [], wrapName, wrapElm;

-

-				// Setup wrapper element

-				wrapName = format.inline || format.block;

-				wrapElm = dom.create(wrapName);

-				setElementFormat(wrapElm);

-

-				rangeUtils.walk(rng, function(nodes) {

-					var currentWrapElm;

-

-					function process(node) {

-						var nodeName = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found;

-

-						// Stop wrapping on br elements

-						if (isEq(nodeName, 'br')) {

-							currentWrapElm = 0;

-

-							// Remove any br elements when we wrap things

-							if (format.block)

-								dom.remove(node);

-

-							return;

-						}

-

-						// If node is wrapper type

-						if (format.wrapper && matchNode(node, name, vars)) {

-							currentWrapElm = 0;

-							return;

-						}

-

-						// Can we rename the block

-						if (format.block && !format.wrapper && isTextBlock(nodeName)) {

-							node = dom.rename(node, wrapName);

-							setElementFormat(node);

-							newWrappers.push(node);

-							currentWrapElm = 0;

-							return;

-						}

-

-						// Handle selector patterns

-						if (format.selector) {

-							// Look for matching formats

-							each(formatList, function(format) {

-								// Check collapsed state if it exists

-								if ('collapsed' in format && format.collapsed !== isCollapsed) {

-									return;

-								}

-

-								if (dom.is(node, format.selector) && !isCaretNode(node)) {

-									setElementFormat(node, format);

-									found = true;

-								}

-							});

-

-							// Continue processing if a selector match wasn't found and a inline element is defined

-							if (!format.inline || found) {

-								currentWrapElm = 0;

-								return;

-							}

-						}

-

-						// Is it valid to wrap this item

-						if (isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&

-								!(!node_specific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && node.id !== '_mce_caret') {

-							// Start wrapping

-							if (!currentWrapElm) {

-								// Wrap the node

-								currentWrapElm = wrapElm.cloneNode(FALSE);

-								node.parentNode.insertBefore(currentWrapElm, node);

-								newWrappers.push(currentWrapElm);

-							}

-

-							currentWrapElm.appendChild(node);

-						} else if (nodeName == 'li' && bookmark) {

-							// Start wrapping - if we are in a list node and have a bookmark, then we will always begin by wrapping in a new element.

-							currentWrapElm = applyStyleToList(node, bookmark, wrapElm, newWrappers, process);

-						} else {

-							// Start a new wrapper for possible children

-							currentWrapElm = 0;

-

-							each(tinymce.grep(node.childNodes), process);

-

-							// End the last wrapper

-							currentWrapElm = 0;

-						}

-					};

-

-					// Process siblings from range

-					each(nodes, process);

-				});

-

-				// Wrap links inside as well, for example color inside a link when the wrapper is around the link

-				if (format.wrap_links === false) {

-					each(newWrappers, function(node) {

-						function process(node) {

-							var i, currentWrapElm, children;

-

-							if (node.nodeName === 'A') {

-								currentWrapElm = wrapElm.cloneNode(FALSE);

-								newWrappers.push(currentWrapElm);

-

-								children = tinymce.grep(node.childNodes);

-								for (i = 0; i < children.length; i++)

-									currentWrapElm.appendChild(children[i]);

-

-								node.appendChild(currentWrapElm);

-							}

-

-							each(tinymce.grep(node.childNodes), process);

-						};

-

-						process(node);

-					});

-				}

-

-				// Cleanup

-				each(newWrappers, function(node) {

-					var childCount;

-

-					function getChildCount(node) {

-						var count = 0;

-

-						each(node.childNodes, function(node) {

-							if (!isWhiteSpaceNode(node) && !isBookmarkNode(node))

-								count++;

-						});

-

-						return count;

-					};

-

-					function mergeStyles(node) {

-						var child, clone;

-

-						each(node.childNodes, function(node) {

-							if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) {

-								child = node;

-								return FALSE; // break loop

-							}

-						});

-

-						// If child was found and of the same type as the current node

-						if (child && matchName(child, format)) {

-							clone = child.cloneNode(FALSE);

-							setElementFormat(clone);

-

-							dom.replace(clone, node, TRUE);

-							dom.remove(child, 1);

-						}

-

-						return clone || node;

-					};

-

-					childCount = getChildCount(node);

-

-					// Remove empty nodes but only if there is multiple wrappers and they are not block

-					// elements so never remove single <h1></h1> since that would remove the currrent empty block element where the caret is at

-					if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {

-						dom.remove(node, 1);

-						return;

-					}

-

-					if (format.inline || format.wrapper) {

-						// Merges the current node with it's children of similar type to reduce the number of elements

-						if (!format.exact && childCount === 1)

-							node = mergeStyles(node);

-

-						// Remove/merge children

-						each(formatList, function(format) {

-							// Merge all children of similar type will move styles from child to parent

-							// this: <span style="color:red"><b><span style="color:red; font-size:10px">text</span></b></span>

-							// will become: <span style="color:red"><b><span style="font-size:10px">text</span></b></span>

-							each(dom.select(format.inline, node), function(child) {

-								var parent;

-

-								// When wrap_links is set to false we don't want

-								// to remove the format on children within links

-								if (format.wrap_links === false) {

-									parent = child.parentNode;

-

-									do {

-										if (parent.nodeName === 'A')

-											return;

-									} while (parent = parent.parentNode);

-								}

-

-								removeFormat(format, vars, child, format.exact ? child : null);

-							});

-						});

-

-						// Remove child if direct parent is of same type

-						if (matchNode(node.parentNode, name, vars)) {

-							dom.remove(node, 1);

-							node = 0;

-							return TRUE;

-						}

-

-						// Look for parent with similar style format

-						if (format.merge_with_parents) {

-							dom.getParent(node.parentNode, function(parent) {

-								if (matchNode(parent, name, vars)) {

-									dom.remove(node, 1);

-									node = 0;

-									return TRUE;

-								}

-							});

-						}

-

-						// Merge next and previous siblings if they are similar <b>text</b><b>text</b> becomes <b>texttext</b>

-						if (node && format.merge_siblings !== false) {

-							node = mergeSiblings(getNonWhiteSpaceSibling(node), node);

-							node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE));

-						}

-					}

-				});

-			};

-

-			if (format) {

-				if (node) {

-					if (node.nodeType) {

-						rng = dom.createRng();

-						rng.setStartBefore(node);

-						rng.setEndAfter(node);

-						applyRngStyle(expandRng(rng, formatList), null, true);

-					} else {

-						applyRngStyle(node, null, true);

-					}

-				} else {

-					if (!isCollapsed || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {

-						// Obtain selection node before selection is unselected by applyRngStyle()

-						var curSelNode = ed.selection.getNode();

-

-						// Apply formatting to selection

-						ed.selection.setRng(adjustSelectionToVisibleSelection());

-						bookmark = selection.getBookmark();

-						applyRngStyle(expandRng(selection.getRng(TRUE), formatList), bookmark);

-

-						// Colored nodes should be underlined so that the color of the underline matches the text color.

-						if (format.styles && (format.styles.color || format.styles.textDecoration)) {

-							tinymce.walk(curSelNode, processUnderlineAndColor, 'childNodes');

-							processUnderlineAndColor(curSelNode);

-						}

-

-						selection.moveToBookmark(bookmark);

-						moveStart(selection.getRng(TRUE));

-						ed.nodeChanged();

-					} else

-						performCaretAction('apply', name, vars);

-				}

-			}

-		};

-

-		function remove(name, vars, node) {

-			var formatList = get(name), format = formatList[0], bookmark, i, rng;

-

-			// Merges the styles for each node

-			function process(node) {

-				var children, i, l;

-

-				// Grab the children first since the nodelist might be changed

-				children = tinymce.grep(node.childNodes);

-

-				// Process current node

-				for (i = 0, l = formatList.length; i < l; i++) {

-					if (removeFormat(formatList[i], vars, node, node))

-						break;

-				}

-

-				// Process the children

-				if (format.deep) {

-					for (i = 0, l = children.length; i < l; i++)

-						process(children[i]);

-				}

-			};

-

-			function findFormatRoot(container) {

-				var formatRoot;

-

-				// Find format root

-				each(getParents(container.parentNode).reverse(), function(parent) {

-					var format;

-

-					// Find format root element

-					if (!formatRoot && parent.id != '_start' && parent.id != '_end') {

-						// Is the node matching the format we are looking for

-						format = matchNode(parent, name, vars);

-						if (format && format.split !== false)

-							formatRoot = parent;

-					}

-				});

-

-				return formatRoot;

-			};

-

-			function wrapAndSplit(format_root, container, target, split) {

-				var parent, clone, lastClone, firstClone, i, formatRootParent;

-

-				// Format root found then clone formats and split it

-				if (format_root) {

-					formatRootParent = format_root.parentNode;

-

-					for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) {

-						clone = parent.cloneNode(FALSE);

-

-						for (i = 0; i < formatList.length; i++) {

-							if (removeFormat(formatList[i], vars, clone, clone)) {

-								clone = 0;

-								break;

-							}

-						}

-

-						// Build wrapper node

-						if (clone) {

-							if (lastClone)

-								clone.appendChild(lastClone);

-

-							if (!firstClone)

-								firstClone = clone;

-

-							lastClone = clone;

-						}

-					}

-

-					// Never split block elements if the format is mixed

-					if (split && (!format.mixed || !isBlock(format_root)))

-						container = dom.split(format_root, container);

-

-					// Wrap container in cloned formats

-					if (lastClone) {

-						target.parentNode.insertBefore(lastClone, target);

-						firstClone.appendChild(target);

-					}

-				}

-

-				return container;

-			};

-

-			function splitToFormatRoot(container) {

-				return wrapAndSplit(findFormatRoot(container), container, container, true);

-			};

-

-			function unwrap(start) {

-				var node = dom.get(start ? '_start' : '_end'),

-					out = node[start ? 'firstChild' : 'lastChild'];

-

-				// If the end is placed within the start the result will be removed

-				// So this checks if the out node is a bookmark node if it is it

-				// checks for another more suitable node

-				if (isBookmarkNode(out))

-					out = out[start ? 'firstChild' : 'lastChild'];

-

-				dom.remove(node, true);

-

-				return out;

-			};

-

-			function removeRngStyle(rng) {

-				var startContainer, endContainer;

-

-				rng = expandRng(rng, formatList, TRUE);

-

-				if (format.split) {

-					startContainer = getContainer(rng, TRUE);

-					endContainer = getContainer(rng);

-

-					if (startContainer != endContainer) {

-						// Wrap start/end nodes in span element since these might be cloned/moved

-						startContainer = wrap(startContainer, 'span', {id : '_start', 'data-mce-type' : 'bookmark'});

-						endContainer = wrap(endContainer, 'span', {id : '_end', 'data-mce-type' : 'bookmark'});

-

-						// Split start/end

-						splitToFormatRoot(startContainer);

-						splitToFormatRoot(endContainer);

-

-						// Unwrap start/end to get real elements again

-						startContainer = unwrap(TRUE);

-						endContainer = unwrap();

-					} else

-						startContainer = endContainer = splitToFormatRoot(startContainer);

-

-					// Update range positions since they might have changed after the split operations

-					rng.startContainer = startContainer.parentNode;

-					rng.startOffset = nodeIndex(startContainer);

-					rng.endContainer = endContainer.parentNode;

-					rng.endOffset = nodeIndex(endContainer) + 1;

-				}

-

-				// Remove items between start/end

-				rangeUtils.walk(rng, function(nodes) {

-					each(nodes, function(node) {

-						process(node);

-

-						// Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined.

-						if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && getTextDecoration(node.parentNode) === 'underline') {

-							removeFormat({'deep': false, 'exact': true, 'inline': 'span', 'styles': {'textDecoration' : 'underline'}}, null, node);

-						}

-					});

-				});

-			};

-

-			// Handle node

-			if (node) {

-				if (node.nodeType) {

-					rng = dom.createRng();

-					rng.setStartBefore(node);

-					rng.setEndAfter(node);

-					removeRngStyle(rng);

-				} else {

-					removeRngStyle(node);

-				}

-

-				return;

-			}

-

-			if (!selection.isCollapsed() || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {

-				bookmark = selection.getBookmark();

-				removeRngStyle(selection.getRng(TRUE));

-				selection.moveToBookmark(bookmark);

-

-				// Check if start element still has formatting then we are at: "<b>text|</b>text" and need to move the start into the next text node

-				if (format.inline && match(name, vars, selection.getStart())) {

-					moveStart(selection.getRng(true));

-				}

-

-				ed.nodeChanged();

-			} else

-				performCaretAction('remove', name, vars);

-

-			// When you remove formatting from a table cell in WebKit (cell, not the contents of a cell) there is a rendering issue with column width

-			if (tinymce.isWebKit) {

-				ed.execCommand('mceCleanup');

-			}

-		};

-

-		function toggle(name, vars, node) {

-			var fmt = get(name);

-

-			if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0]['toggle']))

-				remove(name, vars, node);

-			else

-				apply(name, vars, node);

-		};

-

-		function matchNode(node, name, vars, similar) {

-			var formatList = get(name), format, i, classes;

-

-			function matchItems(node, format, item_name) {

-				var key, value, items = format[item_name], i;

-

-				// Custom match

-				if (format.onmatch) {

-					return format.onmatch(node, format, item_name);

-				}

-

-				// Check all items

-				if (items) {

-					// Non indexed object

-					if (items.length === undefined) {

-						for (key in items) {

-							if (items.hasOwnProperty(key)) {

-								if (item_name === 'attributes')

-									value = dom.getAttrib(node, key);

-								else

-									value = getStyle(node, key);

-

-								if (similar && !value && !format.exact)

-									return;

-

-								if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars)))

-									return;

-							}

-						}

-					} else {

-						// Only one match needed for indexed arrays

-						for (i = 0; i < items.length; i++) {

-							if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i]))

-								return format;

-						}

-					}

-				}

-

-				return format;

-			};

-

-			if (formatList && node) {

-				// Check each format in list

-				for (i = 0; i < formatList.length; i++) {

-					format = formatList[i];

-

-					// Name name, attributes, styles and classes

-					if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) {

-						// Match classes

-						if (classes = format.classes) {

-							for (i = 0; i < classes.length; i++) {

-								if (!dom.hasClass(node, classes[i]))

-									return;

-							}

-						}

-

-						return format;

-					}

-				}

-			}

-		};

-

-		function match(name, vars, node) {

-			var startNode;

-

-			function matchParents(node) {

-				// Find first node with similar format settings

-				node = dom.getParent(node, function(node) {

-					return !!matchNode(node, name, vars, true);

-				});

-

-				// Do an exact check on the similar format element

-				return matchNode(node, name, vars);

-			};

-

-			// Check specified node

-			if (node)

-				return matchParents(node);

-

-			// Check selected node

-			node = selection.getNode();

-			if (matchParents(node))

-				return TRUE;

-

-			// Check start node if it's different

-			startNode = selection.getStart();

-			if (startNode != node) {

-				if (matchParents(startNode))

-					return TRUE;

-			}

-

-			return FALSE;

-		};

-

-		function matchAll(names, vars) {

-			var startElement, matchedFormatNames = [], checkedMap = {}, i, ni, name;

-

-			// Check start of selection for formats

-			startElement = selection.getStart();

-			dom.getParent(startElement, function(node) {

-				var i, name;

-

-				for (i = 0; i < names.length; i++) {

-					name = names[i];

-

-					if (!checkedMap[name] && matchNode(node, name, vars)) {

-						checkedMap[name] = true;

-						matchedFormatNames.push(name);

-					}

-				}

-			});

-

-			return matchedFormatNames;

-		};

-

-		function canApply(name) {

-			var formatList = get(name), startNode, parents, i, x, selector;

-

-			if (formatList) {

-				startNode = selection.getStart();

-				parents = getParents(startNode);

-

-				for (x = formatList.length - 1; x >= 0; x--) {

-					selector = formatList[x].selector;

-

-					// Format is not selector based, then always return TRUE

-					if (!selector)

-						return TRUE;

-

-					for (i = parents.length - 1; i >= 0; i--) {

-						if (dom.is(parents[i], selector))

-							return TRUE;

-					}

-				}

-			}

-

-			return FALSE;

-		};

-

-		// Expose to public

-		tinymce.extend(this, {

-			get : get,

-			register : register,

-			apply : apply,

-			remove : remove,

-			toggle : toggle,

-			match : match,

-			matchAll : matchAll,

-			matchNode : matchNode,

-			canApply : canApply

-		});

-

-		// Private functions

-

-		function matchName(node, format) {

-			// Check for inline match

-			if (isEq(node, format.inline))

-				return TRUE;

-

-			// Check for block match

-			if (isEq(node, format.block))

-				return TRUE;

-

-			// Check for selector match

-			if (format.selector)

-				return dom.is(node, format.selector);

-		};

-

-		function isEq(str1, str2) {

-			str1 = str1 || '';

-			str2 = str2 || '';

-

-			str1 = '' + (str1.nodeName || str1);

-			str2 = '' + (str2.nodeName || str2);

-

-			return str1.toLowerCase() == str2.toLowerCase();

-		};

-

-		function getStyle(node, name) {

-			var styleVal = dom.getStyle(node, name);

-

-			// Force the format to hex

-			if (name == 'color' || name == 'backgroundColor')

-				styleVal = dom.toHex(styleVal);

-

-			// Opera will return bold as 700

-			if (name == 'fontWeight' && styleVal == 700)

-				styleVal = 'bold';

-

-			return '' + styleVal;

-		};

-

-		function replaceVars(value, vars) {

-			if (typeof(value) != "string")

-				value = value(vars);

-			else if (vars) {

-				value = value.replace(/%(\w+)/g, function(str, name) {

-					return vars[name] || str;

-				});

-			}

-

-			return value;

-		};

-

-		function isWhiteSpaceNode(node) {

-			return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue);

-		};

-

-		function wrap(node, name, attrs) {

-			var wrapper = dom.create(name, attrs);

-

-			node.parentNode.insertBefore(wrapper, node);

-			wrapper.appendChild(node);

-

-			return wrapper;

-		};

-

-		function expandRng(rng, format, remove) {

-			var startContainer = rng.startContainer,

-				startOffset = rng.startOffset,

-				endContainer = rng.endContainer,

-				endOffset = rng.endOffset, sibling, lastIdx, leaf, endPoint;

-

-			// This function walks up the tree if there is no siblings before/after the node

-			function findParentContainer(start) {

-				var container, parent, child, sibling, siblingName;

-

-				container = parent = start ? startContainer : endContainer;

-				siblingName = start ? 'previousSibling' : 'nextSibling';

-				root = dom.getRoot();

-

-				// If it's a text node and the offset is inside the text

-				if (container.nodeType == 3 && !isWhiteSpaceNode(container)) {

-					if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {

-						return container;

-					}

-				}

-

-				for (;;) {

-					// Stop expanding on block elements or root depending on format

-					if (parent == root || (!format[0].block_expand && isBlock(parent)))

-						return parent;

-

-					// Walk left/right

-					for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {

-						if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling)) {

-							return parent;

-						}

-					}

-

-					// Check if we can move up are we at root level or body level

-					parent = parent.parentNode;

-				}

-

-				return container;

-			};

-

-			// This function walks down the tree to find the leaf at the selection.

-			// The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node.

-			function findLeaf(node, offset) {

-				if (offset === undefined)

-					offset = node.nodeType === 3 ? node.length : node.childNodes.length;

-				while (node && node.hasChildNodes()) {

-					node = node.childNodes[offset];

-					if (node)

-						offset = node.nodeType === 3 ? node.length : node.childNodes.length;

-				}

-				return { node: node, offset: offset };

-			}

-

-			// If index based start position then resolve it

-			if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) {

-				lastIdx = startContainer.childNodes.length - 1;

-				startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset];

-

-				if (startContainer.nodeType == 3)

-					startOffset = 0;

-			}

-

-			// If index based end position then resolve it

-			if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) {

-				lastIdx = endContainer.childNodes.length - 1;

-				endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1];

-

-				if (endContainer.nodeType == 3)

-					endOffset = endContainer.nodeValue.length;

-			}

-

-			// Exclude bookmark nodes if possible

-			if (isBookmarkNode(startContainer.parentNode) || isBookmarkNode(startContainer)) {

-				startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;

-				startContainer = startContainer.nextSibling || startContainer;

-

-				if (startContainer.nodeType == 3)

-					startOffset = 0;

-			}

-

-			if (isBookmarkNode(endContainer.parentNode) || isBookmarkNode(endContainer)) {

-				endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;

-				endContainer = endContainer.previousSibling || endContainer;

-

-				if (endContainer.nodeType == 3)

-					endOffset = endContainer.length;

-			}

-

-			if (format[0].inline) {

-				if (rng.collapsed) {

-					function findWordEndPoint(container, offset, start) {

-						var walker, node, pos, lastTextNode;

-

-						function findSpace(node, offset) {

-							var pos, pos2, str = node.nodeValue;

-

-							if (typeof(offset) == "undefined") {

-								offset = start ? str.length : 0;

-							}

-

-							if (start) {

-								pos = str.lastIndexOf(' ', offset);

-								pos2 = str.lastIndexOf('\u00a0', offset);

-								pos = pos > pos2 ? pos : pos2;

-

-								// Include the space on remove to avoid tag soup

-								if (pos !== -1 && !remove) {

-									pos++;

-								}

-							} else {

-								pos = str.indexOf(' ', offset);

-								pos2 = str.indexOf('\u00a0', offset);

-								pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;

-							}

-

-							return pos;

-						};

-

-						if (container.nodeType === 3) {

-							pos = findSpace(container, offset);

-

-							if (pos !== -1) {

-								return {container : container, offset : pos};

-							}

-

-							lastTextNode = container;

-						}

-

-						// Walk the nodes inside the block

-						walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody());

-						while (node = walker[start ? 'prev' : 'next']()) {

-							if (node.nodeType === 3) {

-								lastTextNode = node;

-								pos = findSpace(node);

-

-								if (pos !== -1) {

-									return {container : node, offset : pos};

-								}

-							} else if (isBlock(node)) {

-								break;

-							}

-						}

-

-						if (lastTextNode) {

-							if (start) {

-								offset = 0;

-							} else {

-								offset = lastTextNode.length;

-							}

-

-							return {container: lastTextNode, offset: offset};

-						}

-					}

-

-					// Expand left to closest word boundery

-					endPoint = findWordEndPoint(startContainer, startOffset, true);

-					if (endPoint) {

-						startContainer = endPoint.container;

-						startOffset = endPoint.offset;

-					}

-

-					// Expand right to closest word boundery

-					endPoint = findWordEndPoint(endContainer, endOffset);

-					if (endPoint) {

-						endContainer = endPoint.container;

-						endOffset = endPoint.offset;

-					}

-				}

-

-				// Avoid applying formatting to a trailing space.

-				leaf = findLeaf(endContainer, endOffset);

-				if (leaf.node) {

-					while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling)

-						leaf = findLeaf(leaf.node.previousSibling);

-

-					if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 &&

-							leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {

-

-						if (leaf.offset > 1) {

-							endContainer = leaf.node;

-							endContainer.splitText(leaf.offset - 1);

-						} else if (leaf.node.previousSibling) {

-							// TODO: Figure out why this is in here

-							//endContainer = leaf.node.previousSibling;

-						}

-					}

-				}

-			}

-

-			// Move start/end point up the tree if the leaves are sharp and if we are in different containers

-			// Example * becomes !: !<p><b><i>*text</i><i>text*</i></b></p>!

-			// This will reduce the number of wrapper elements that needs to be created

-			// Move start point up the tree

-			if (format[0].inline || format[0].block_expand) {

-				if (!format[0].inline || (startContainer.nodeType != 3 || startOffset === 0)) {

-					startContainer = findParentContainer(true);

-				}

-

-				if (!format[0].inline || (endContainer.nodeType != 3 || endOffset === endContainer.nodeValue.length)) {

-					endContainer = findParentContainer();

-				}

-			}

-

-			// Expand start/end container to matching selector

-			if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) {

-				function findSelectorEndPoint(container, sibling_name) {

-					var parents, i, y, curFormat;

-

-					if (container.nodeType == 3 && container.nodeValue.length == 0 && container[sibling_name])

-						container = container[sibling_name];

-

-					parents = getParents(container);

-					for (i = 0; i < parents.length; i++) {

-						for (y = 0; y < format.length; y++) {

-							curFormat = format[y];

-

-							// If collapsed state is set then skip formats that doesn't match that

-							if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed)

-								continue;

-

-							if (dom.is(parents[i], curFormat.selector))

-								return parents[i];

-						}

-					}

-

-					return container;

-				};

-

-				// Find new startContainer/endContainer if there is better one

-				startContainer = findSelectorEndPoint(startContainer, 'previousSibling');

-				endContainer = findSelectorEndPoint(endContainer, 'nextSibling');

-			}

-

-			// Expand start/end container to matching block element or text node

-			if (format[0].block || format[0].selector) {

-				function findBlockEndPoint(container, sibling_name, sibling_name2) {

-					var node;

-

-					// Expand to block of similar type

-					if (!format[0].wrapper)

-						node = dom.getParent(container, format[0].block);

-

-					// Expand to first wrappable block element or any block element

-					if (!node)

-						node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);

-

-					// Exclude inner lists from wrapping

-					if (node && format[0].wrapper)

-						node = getParents(node, 'ul,ol').reverse()[0] || node;

-

-					// Didn't find a block element look for first/last wrappable element

-					if (!node) {

-						node = container;

-

-						while (node[sibling_name] && !isBlock(node[sibling_name])) {

-							node = node[sibling_name];

-

-							// Break on BR but include it will be removed later on

-							// we can't remove it now since we need to check if it can be wrapped

-							if (isEq(node, 'br'))

-								break;

-						}

-					}

-

-					return node || container;

-				};

-

-				// Find new startContainer/endContainer if there is better one

-				startContainer = findBlockEndPoint(startContainer, 'previousSibling');

-				endContainer = findBlockEndPoint(endContainer, 'nextSibling');

-

-				// Non block element then try to expand up the leaf

-				if (format[0].block) {

-					if (!isBlock(startContainer))

-						startContainer = findParentContainer(true);

-

-					if (!isBlock(endContainer))

-						endContainer = findParentContainer();

-				}

-			}

-

-			// Setup index for startContainer

-			if (startContainer.nodeType == 1) {

-				startOffset = nodeIndex(startContainer);

-				startContainer = startContainer.parentNode;

-			}

-

-			// Setup index for endContainer

-			if (endContainer.nodeType == 1) {

-				endOffset = nodeIndex(endContainer) + 1;

-				endContainer = endContainer.parentNode;

-			}

-

-			// Return new range like object

-			return {

-				startContainer : startContainer,

-				startOffset : startOffset,

-				endContainer : endContainer,

-				endOffset : endOffset

-			};

-		}

-

-		function removeFormat(format, vars, node, compare_node) {

-			var i, attrs, stylesModified;

-

-			// Check if node matches format

-			if (!matchName(node, format))

-				return FALSE;

-

-			// Should we compare with format attribs and styles

-			if (format.remove != 'all') {

-				// Remove styles

-				each(format.styles, function(value, name) {

-					value = replaceVars(value, vars);

-

-					// Indexed array

-					if (typeof(name) === 'number') {

-						name = value;

-						compare_node = 0;

-					}

-

-					if (!compare_node || isEq(getStyle(compare_node, name), value))

-						dom.setStyle(node, name, '');

-

-					stylesModified = 1;

-				});

-

-				// Remove style attribute if it's empty

-				if (stylesModified && dom.getAttrib(node, 'style') == '') {

-					node.removeAttribute('style');

-					node.removeAttribute('data-mce-style');

-				}

-

-				// Remove attributes

-				each(format.attributes, function(value, name) {

-					var valueOut;

-

-					value = replaceVars(value, vars);

-

-					// Indexed array

-					if (typeof(name) === 'number') {

-						name = value;

-						compare_node = 0;

-					}

-

-					if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) {

-						// Keep internal classes

-						if (name == 'class') {

-							value = dom.getAttrib(node, name);

-							if (value) {

-								// Build new class value where everything is removed except the internal prefixed classes

-								valueOut = '';

-								each(value.split(/\s+/), function(cls) {

-									if (/mce\w+/.test(cls))

-										valueOut += (valueOut ? ' ' : '') + cls;

-								});

-

-								// We got some internal classes left

-								if (valueOut) {

-									dom.setAttrib(node, name, valueOut);

-									return;

-								}

-							}

-						}

-

-						// IE6 has a bug where the attribute doesn't get removed correctly

-						if (name == "class")

-							node.removeAttribute('className');

-

-						// Remove mce prefixed attributes

-						if (MCE_ATTR_RE.test(name))

-							node.removeAttribute('data-mce-' + name);

-

-						node.removeAttribute(name);

-					}

-				});

-

-				// Remove classes

-				each(format.classes, function(value) {

-					value = replaceVars(value, vars);

-

-					if (!compare_node || dom.hasClass(compare_node, value))

-						dom.removeClass(node, value);

-				});

-

-				// Check for non internal attributes

-				attrs = dom.getAttribs(node);

-				for (i = 0; i < attrs.length; i++) {

-					if (attrs[i].nodeName.indexOf('_') !== 0)

-						return FALSE;

-				}

-			}

-

-			// Remove the inline child if it's empty for example <b> or <span>

-			if (format.remove != 'none') {

-				removeNode(node, format);

-				return TRUE;

-			}

-		};

-

-		function removeNode(node, format) {

-			var parentNode = node.parentNode, rootBlockElm;

-

-			if (format.block) {

-				if (!forcedRootBlock) {

-					function find(node, next, inc) {

-						node = getNonWhiteSpaceSibling(node, next, inc);

-

-						return !node || (node.nodeName == 'BR' || isBlock(node));

-					};

-

-					// Append BR elements if needed before we remove the block

-					if (isBlock(node) && !isBlock(parentNode)) {

-						if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1))

-							node.insertBefore(dom.create('br'), node.firstChild);

-

-						if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1))

-							node.appendChild(dom.create('br'));

-					}

-				} else {

-					// Wrap the block in a forcedRootBlock if we are at the root of document

-					if (parentNode == dom.getRoot()) {

-						if (!format.list_block || !isEq(node, format.list_block)) {

-							each(tinymce.grep(node.childNodes), function(node) {

-								if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) {

-									if (!rootBlockElm)

-										rootBlockElm = wrap(node, forcedRootBlock);

-									else

-										rootBlockElm.appendChild(node);

-								} else

-									rootBlockElm = 0;

-							});

-						}

-					}

-				}

-			}

-

-			// Never remove nodes that isn't the specified inline element if a selector is specified too

-			if (format.selector && format.inline && !isEq(format.inline, node))

-				return;

-

-			dom.remove(node, 1);

-		};

-

-		function getNonWhiteSpaceSibling(node, next, inc) {

-			if (node) {

-				next = next ? 'nextSibling' : 'previousSibling';

-

-				for (node = inc ? node : node[next]; node; node = node[next]) {

-					if (node.nodeType == 1 || !isWhiteSpaceNode(node))

-						return node;

-				}

-			}

-		};

-

-		function isBookmarkNode(node) {

-			return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark';

-		};

-

-		function mergeSiblings(prev, next) {

-			var marker, sibling, tmpSibling;

-

-			function compareElements(node1, node2) {

-				// Not the same name

-				if (node1.nodeName != node2.nodeName)

-					return FALSE;

-

-				function getAttribs(node) {

-					var attribs = {};

-

-					each(dom.getAttribs(node), function(attr) {

-						var name = attr.nodeName.toLowerCase();

-

-						// Don't compare internal attributes or style

-						if (name.indexOf('_') !== 0 && name !== 'style')

-							attribs[name] = dom.getAttrib(node, name);

-					});

-

-					return attribs;

-				};

-

-				function compareObjects(obj1, obj2) {

-					var value, name;

-

-					for (name in obj1) {

-						// Obj1 has item obj2 doesn't have

-						if (obj1.hasOwnProperty(name)) {

-							value = obj2[name];

-

-							// Obj2 doesn't have obj1 item

-							if (value === undefined)

-								return FALSE;

-

-							// Obj2 item has a different value

-							if (obj1[name] != value)

-								return FALSE;

-

-							// Delete similar value

-							delete obj2[name];

-						}

-					}

-

-					// Check if obj 2 has something obj 1 doesn't have

-					for (name in obj2) {

-						// Obj2 has item obj1 doesn't have

-						if (obj2.hasOwnProperty(name))

-							return FALSE;

-					}

-

-					return TRUE;

-				};

-

-				// Attribs are not the same

-				if (!compareObjects(getAttribs(node1), getAttribs(node2)))

-					return FALSE;

-

-				// Styles are not the same

-				if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style'))))

-					return FALSE;

-

-				return TRUE;

-			};

-

-			// Check if next/prev exists and that they are elements

-			if (prev && next) {

-				function findElementSibling(node, sibling_name) {

-					for (sibling = node; sibling; sibling = sibling[sibling_name]) {

-						if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0)

-							return node;

-

-						if (sibling.nodeType == 1 && !isBookmarkNode(sibling))

-							return sibling;

-					}

-

-					return node;

-				};

-

-				// If previous sibling is empty then jump over it

-				prev = findElementSibling(prev, 'previousSibling');

-				next = findElementSibling(next, 'nextSibling');

-

-				// Compare next and previous nodes

-				if (compareElements(prev, next)) {

-					// Append nodes between

-					for (sibling = prev.nextSibling; sibling && sibling != next;) {

-						tmpSibling = sibling;

-						sibling = sibling.nextSibling;

-						prev.appendChild(tmpSibling);

-					}

-

-					// Remove next node

-					dom.remove(next);

-

-					// Move children into prev node

-					each(tinymce.grep(next.childNodes), function(node) {

-						prev.appendChild(node);

-					});

-

-					return prev;

-				}

-			}

-

-			return next;

-		};

-

-		function isTextBlock(name) {

-			return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name);

-		};

-

-		function getContainer(rng, start) {

-			var container, offset, lastIdx, walker;

-

-			container = rng[start ? 'startContainer' : 'endContainer'];

-			offset = rng[start ? 'startOffset' : 'endOffset'];

-

-			if (container.nodeType == 1) {

-				lastIdx = container.childNodes.length - 1;

-

-				if (!start && offset)

-					offset--;

-

-				container = container.childNodes[offset > lastIdx ? lastIdx : offset];

-			}

-

-			// If start text node is excluded then walk to the next node

-			if (container.nodeType === 3 && start && offset >= container.nodeValue.length) {

-				container = new TreeWalker(container, ed.getBody()).next() || container;

-			}

-

-			// If end text node is excluded then walk to the previous node

-			if (container.nodeType === 3 && !start && offset == 0) {

-				container = new TreeWalker(container, ed.getBody()).prev() || container;

-			}

-

-			return container;

-		};

-

-		function performCaretAction(type, name, vars) {

-			var invisibleChar, caretContainerId = '_mce_caret', debug = ed.settings.caret_debug;

-

-			// Setup invisible character use zero width space on Gecko since it doesn't change the heigt of the container

-			invisibleChar = tinymce.isGecko ? '\u200B' : INVISIBLE_CHAR;

-

-			// Creates a caret container bogus element

-			function createCaretContainer(fill) {

-				var caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style: debug ? 'color:red' : ''});

-

-				if (fill) {

-					caretContainer.appendChild(ed.getDoc().createTextNode(invisibleChar));

-				}

-

-				return caretContainer;

-			};

-

-			function isCaretContainerEmpty(node, nodes) {

-				while (node) {

-					if ((node.nodeType === 3 && node.nodeValue !== invisibleChar) || node.childNodes.length > 1) {

-						return false;

-					}

-

-					// Collect nodes

-					if (nodes && node.nodeType === 1) {

-						nodes.push(node);

-					}

-

-					node = node.firstChild;

-				}

-

-				return true;

-			};

-			

-			// Returns any parent caret container element

-			function getParentCaretContainer(node) {

-				while (node) {

-					if (node.id === caretContainerId) {

-						return node;

-					}

-

-					node = node.parentNode;

-				}

-			};

-

-			// Finds the first text node in the specified node

-			function findFirstTextNode(node) {

-				var walker;

-

-				if (node) {

-					walker = new TreeWalker(node, node);

-

-					for (node = walker.current(); node; node = walker.next()) {

-						if (node.nodeType === 3) {

-							return node;

-						}

-					}

-				}

-			};

-

-			// Removes the caret container for the specified node or all on the current document

-			function removeCaretContainer(node, move_caret) {

-				var child, rng;

-

-				if (!node) {

-					node = getParentCaretContainer(selection.getStart());

-

-					if (!node) {

-						while (node = dom.get(caretContainerId)) {

-							removeCaretContainer(node, false);

-						}

-					}

-				} else {

-					rng = selection.getRng(true);

-

-					if (isCaretContainerEmpty(node)) {

-						if (move_caret !== false) {

-							rng.setStartBefore(node);

-							rng.setEndBefore(node);

-						}

-

-						dom.remove(node);

-					} else {

-						child = findFirstTextNode(node);

-

-						if (child.nodeValue.charAt(0) === INVISIBLE_CHAR) {

-							child = child.deleteData(0, 1);

-						}

-

-						dom.remove(node, 1);

-					}

-

-					selection.setRng(rng);

-				}

-			};

-			

-			// Applies formatting to the caret postion

-			function applyCaretFormat() {

-				var rng, caretContainer, textNode, offset, bookmark, container, text;

-

-				rng = selection.getRng(true);

-				offset = rng.startOffset;

-				container = rng.startContainer;

-				text = container.nodeValue;

-

-				caretContainer = getParentCaretContainer(selection.getStart());

-				if (caretContainer) {

-					textNode = findFirstTextNode(caretContainer);

-				}

-

-				// Expand to word is caret is in the middle of a text node and the char before/after is a alpha numeric character

-				if (text && offset > 0 && offset < text.length && /\w/.test(text.charAt(offset)) && /\w/.test(text.charAt(offset - 1))) {

-					// Get bookmark of caret position

-					bookmark = selection.getBookmark();

-

-					// Collapse bookmark range (WebKit)

-					rng.collapse(true);

-

-					// Expand the range to the closest word and split it at those points

-					rng = expandRng(rng, get(name));

-					rng = rangeUtils.split(rng);

-

-					// Apply the format to the range

-					apply(name, vars, rng);

-

-					// Move selection back to caret position

-					selection.moveToBookmark(bookmark);

-				} else {

-					if (!caretContainer || textNode.nodeValue !== invisibleChar) {

-						caretContainer = createCaretContainer(true);

-						textNode = caretContainer.firstChild;

-

-						rng.insertNode(caretContainer);

-						offset = 1;

-

-						apply(name, vars, caretContainer);

-					} else {

-						apply(name, vars, caretContainer);

-					}

-

-					// Move selection to text node

-					selection.setCursorLocation(textNode, offset);

-				}

-			};

-

-			function removeCaretFormat() {

-				var rng = selection.getRng(true), container, offset, bookmark,

-					hasContentAfter, node, formatNode, parents = [], i, caretContainer;

-

-				container = rng.startContainer;

-				offset = rng.startOffset;

-				node = container;

-

-				if (container.nodeType == 3) {

-					if (offset != container.nodeValue.length || container.nodeValue === invisibleChar) {

-						hasContentAfter = true;

-					}

-

-					node = node.parentNode;

-				}

-

-				while (node) {

-					if (matchNode(node, name, vars)) {

-						formatNode = node;

-						break;

-					}

-

-					if (node.nextSibling) {

-						hasContentAfter = true;

-					}

-

-					parents.push(node);

-					node = node.parentNode;

-				}

-

-				// Node doesn't have the specified format

-				if (!formatNode) {

-					return;

-				}

-

-				// Is there contents after the caret then remove the format on the element

-				if (hasContentAfter) {

-					// Get bookmark of caret position

-					bookmark = selection.getBookmark();

-

-					// Collapse bookmark range (WebKit)

-					rng.collapse(true);

-

-					// Expand the range to the closest word and split it at those points

-					rng = expandRng(rng, get(name), true);

-					rng = rangeUtils.split(rng);

-

-					// Remove the format from the range

-					remove(name, vars, rng);

-

-					// Move selection back to caret position

-					selection.moveToBookmark(bookmark);

-				} else {

-					caretContainer = createCaretContainer();

-

-					node = caretContainer;

-					for (i = parents.length - 1; i >= 0; i--) {

-						node.appendChild(parents[i].cloneNode(false));

-						node = node.firstChild;

-					}

-

-					// Insert invisible character into inner most format element

-					node.appendChild(dom.doc.createTextNode(invisibleChar));

-					node = node.firstChild;

-

-					// Insert caret container after the formated node

-					dom.insertAfter(caretContainer, formatNode);

-

-					// Move selection to text node

-					selection.setCursorLocation(node, 1);

-				}

-			};

-

-			// Only bind the caret events once

-			if (!self._hasCaretEvents) {

-				// Mark current caret container elements as bogus when getting the contents so we don't end up with empty elements

-				ed.onBeforeGetContent.addToTop(function() {

-					var nodes = [], i;

-

-					if (isCaretContainerEmpty(getParentCaretContainer(selection.getStart()), nodes)) {

-						// Mark children

-						i = nodes.length;

-						while (i--) {

-							dom.setAttrib(nodes[i], 'data-mce-bogus', '1');

-						}

-					}

-				});

-

-				// Remove caret container on mouse up and on key up

-				tinymce.each('onMouseUp onKeyUp'.split(' '), function(name) {

-					ed[name].addToTop(function() {

-						removeCaretContainer();

-					});

-				});

-

-				// Remove caret container on keydown and it's a backspace, enter or left/right arrow keys

-				ed.onKeyDown.addToTop(function(ed, e) {

-					var keyCode = e.keyCode;

-

-					if (keyCode == 8 || keyCode == 37 || keyCode == 39) {

-						removeCaretContainer(getParentCaretContainer(selection.getStart()));

-					}

-				});

-

-				self._hasCaretEvents = true;

-			}

-

-			// Do apply or remove caret format

-			if (type == "apply") {

-				applyCaretFormat();

-			} else {

-				removeCaretFormat();

-			}

-		};

-

-		function moveStart(rng) {

-			var container = rng.startContainer,

-					offset = rng.startOffset,

-					walker, node, nodes, tmpNode;

-

-			// Convert text node into index if possible

-			if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) {

-				container = container.parentNode;

-				offset = nodeIndex(container) + 1;

-			}

-

-			// Move startContainer/startOffset in to a suitable node

-			if (container.nodeType == 1) {

-				nodes = container.childNodes;

-				container = nodes[Math.min(offset, nodes.length - 1)];

-				walker = new TreeWalker(container);

-

-				// If offset is at end of the parent node walk to the next one

-				if (offset > nodes.length - 1)

-					walker.next();

-

-				for (node = walker.current(); node; node = walker.next()) {

-					if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {

-						// IE has a "neat" feature where it moves the start node into the closest element

-						// we can avoid this by inserting an element before it and then remove it after we set the selection

-						tmpNode = dom.create('a', null, INVISIBLE_CHAR);

-						node.parentNode.insertBefore(tmpNode, node);

-

-						// Set selection and remove tmpNode

-						rng.setStart(node, 0);

-						selection.setRng(rng);

-						dom.remove(tmpNode);

-

-						return;

-					}

-				}

-			}

-		};

-

-	};

-})(tinymce);

-

-tinymce.onAddEditor.add(function(tinymce, ed) {

-	var filters, fontSizes, dom, settings = ed.settings;

-

-	if (settings.inline_styles) {

-		fontSizes = tinymce.explode(settings.font_size_legacy_values);

-

-		function replaceWithSpan(node, styles) {

-			tinymce.each(styles, function(value, name) {

-				if (value)

-					dom.setStyle(node, name, value);

-			});

-

-			dom.rename(node, 'span');

-		};

-

-		filters = {

-			font : function(dom, node) {

-				replaceWithSpan(node, {

-					backgroundColor : node.style.backgroundColor,

-					color : node.color,

-					fontFamily : node.face,

-					fontSize : fontSizes[parseInt(node.size) - 1]

-				});

-			},

-

-			u : function(dom, node) {

-				replaceWithSpan(node, {

-					textDecoration : 'underline'

-				});

-			},

-

-			strike : function(dom, node) {

-				replaceWithSpan(node, {

-					textDecoration : 'line-through'

-				});

-			}

-		};

-

-		function convert(editor, params) {

-			dom = editor.dom;

-

-			if (settings.convert_fonts_to_spans) {

-				tinymce.each(dom.select('font,u,strike', params.node), function(node) {

-					filters[node.nodeName.toLowerCase()](ed.dom, node);

-				});

-			}

-		};

-

-		ed.onPreProcess.add(convert);

-		ed.onSetContent.add(convert);

-

-		ed.onInit.add(function() {

-			ed.selection.onSetContent.add(convert);

-		});

-	}

-});

-

 

--- a/tinymce/jscripts/tiny_mce/utils/editable_selects.js
+++ /dev/null
@@ -1,71 +1,1 @@
-/**

- * editable_selects.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-var TinyMCE_EditableSelects = {

-	editSelectElm : null,

-

-	init : function() {

-		var nl = document.getElementsByTagName("select"), i, d = document, o;

-

-		for (i=0; i<nl.length; i++) {

-			if (nl[i].className.indexOf('mceEditableSelect') != -1) {

-				o = new Option(tinyMCEPopup.editor.translate('value'), '__mce_add_custom__');

-

-				o.className = 'mceAddSelectValue';

-

-				nl[i].options[nl[i].options.length] = o;

-				nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;

-			}

-		}

-	},

-

-	onChangeEditableSelect : function(e) {

-		var d = document, ne, se = window.event ? window.event.srcElement : e.target;

-

-		if (se.options[se.selectedIndex].value == '__mce_add_custom__') {

-			ne = d.createElement("input");

-			ne.id = se.id + "_custom";

-			ne.name = se.name + "_custom";

-			ne.type = "text";

-

-			ne.style.width = se.offsetWidth + 'px';

-			se.parentNode.insertBefore(ne, se);

-			se.style.display = 'none';

-			ne.focus();

-			ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;

-			ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;

-			TinyMCE_EditableSelects.editSelectElm = se;

-		}

-	},

-

-	onBlurEditableSelectInput : function() {

-		var se = TinyMCE_EditableSelects.editSelectElm;

-

-		if (se) {

-			if (se.previousSibling.value != '') {

-				addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);

-				selectByValue(document.forms[0], se.id, se.previousSibling.value);

-			} else

-				selectByValue(document.forms[0], se.id, '');

-

-			se.style.display = 'inline';

-			se.parentNode.removeChild(se.previousSibling);

-			TinyMCE_EditableSelects.editSelectElm = null;

-		}

-	},

-

-	onKeyDown : function(e) {

-		e = e || window.event;

-

-		if (e.keyCode == 13)

-			TinyMCE_EditableSelects.onBlurEditableSelectInput();

-	}

-};

 

--- a/tinymce/jscripts/tiny_mce/utils/form_utils.js
+++ /dev/null
@@ -1,211 +1,1 @@
-/**

- * form_utils.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));

-

-function getColorPickerHTML(id, target_form_element) {

-	var h = "", dom = tinyMCEPopup.dom;

-

-	if (label = dom.select('label[for=' + target_form_element + ']')[0]) {

-		label.id = label.id || dom.uniqueId();

-	}

-

-	h += '<a role="button" aria-labelledby="' + id + '_label" id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';

-	h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;<span id="' + id + '_label" class="mceVoiceLabel mceIconOnly" style="display:none;">' + tinyMCEPopup.getLang('browse') + '</span></span></a>';

-

-	return h;

-}

-

-function updateColor(img_id, form_element_id) {

-	document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;

-}

-

-function setBrowserDisabled(id, state) {

-	var img = document.getElementById(id);

-	var lnk = document.getElementById(id + "_link");

-

-	if (lnk) {

-		if (state) {

-			lnk.setAttribute("realhref", lnk.getAttribute("href"));

-			lnk.removeAttribute("href");

-			tinyMCEPopup.dom.addClass(img, 'disabled');

-		} else {

-			if (lnk.getAttribute("realhref"))

-				lnk.setAttribute("href", lnk.getAttribute("realhref"));

-

-			tinyMCEPopup.dom.removeClass(img, 'disabled');

-		}

-	}

-}

-

-function getBrowserHTML(id, target_form_element, type, prefix) {

-	var option = prefix + "_" + type + "_browser_callback", cb, html;

-

-	cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));

-

-	if (!cb)

-		return "";

-

-	html = "";

-	html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';

-	html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';

-

-	return html;

-}

-

-function openBrowser(img_id, target_form_element, type, option) {

-	var img = document.getElementById(img_id);

-

-	if (img.className != "mceButtonDisabled")

-		tinyMCEPopup.openBrowser(target_form_element, type, option);

-}

-

-function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {

-	if (!form_obj || !form_obj.elements[field_name])

-		return;

-

-	if (!value)

-		value = "";

-

-	var sel = form_obj.elements[field_name];

-

-	var found = false;

-	for (var i=0; i<sel.options.length; i++) {

-		var option = sel.options[i];

-

-		if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {

-			option.selected = true;

-			found = true;

-		} else

-			option.selected = false;

-	}

-

-	if (!found && add_custom && value != '') {

-		var option = new Option(value, value);

-		option.selected = true;

-		sel.options[sel.options.length] = option;

-		sel.selectedIndex = sel.options.length - 1;

-	}

-

-	return found;

-}

-

-function getSelectValue(form_obj, field_name) {

-	var elm = form_obj.elements[field_name];

-

-	if (elm == null || elm.options == null || elm.selectedIndex === -1)

-		return "";

-

-	return elm.options[elm.selectedIndex].value;

-}

-

-function addSelectValue(form_obj, field_name, name, value) {

-	var s = form_obj.elements[field_name];

-	var o = new Option(name, value);

-	s.options[s.options.length] = o;

-}

-

-function addClassesToList(list_id, specific_option) {

-	// Setup class droplist

-	var styleSelectElm = document.getElementById(list_id);

-	var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);

-	styles = tinyMCEPopup.getParam(specific_option, styles);

-

-	if (styles) {

-		var stylesAr = styles.split(';');

-

-		for (var i=0; i<stylesAr.length; i++) {

-			if (stylesAr != "") {

-				var key, value;

-

-				key = stylesAr[i].split('=')[0];

-				value = stylesAr[i].split('=')[1];

-

-				styleSelectElm.options[styleSelectElm.length] = new Option(key, value);

-			}

-		}

-	} else {

-		tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {

-			styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);

-		});

-	}

-}

-

-function isVisible(element_id) {

-	var elm = document.getElementById(element_id);

-

-	return elm && elm.style.display != "none";

-}

-

-function convertRGBToHex(col) {

-	var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");

-

-	var rgb = col.replace(re, "$1,$2,$3").split(',');

-	if (rgb.length == 3) {

-		r = parseInt(rgb[0]).toString(16);

-		g = parseInt(rgb[1]).toString(16);

-		b = parseInt(rgb[2]).toString(16);

-

-		r = r.length == 1 ? '0' + r : r;

-		g = g.length == 1 ? '0' + g : g;

-		b = b.length == 1 ? '0' + b : b;

-

-		return "#" + r + g + b;

-	}

-

-	return col;

-}

-

-function convertHexToRGB(col) {

-	if (col.indexOf('#') != -1) {

-		col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');

-

-		r = parseInt(col.substring(0, 2), 16);

-		g = parseInt(col.substring(2, 4), 16);

-		b = parseInt(col.substring(4, 6), 16);

-

-		return "rgb(" + r + "," + g + "," + b + ")";

-	}

-

-	return col;

-}

-

-function trimSize(size) {

-	return size.replace(/([0-9\.]+)(px|%|in|cm|mm|em|ex|pt|pc)/i, '$1$2');

-}

-

-function getCSSSize(size) {

-	size = trimSize(size);

-

-	if (size == "")

-		return "";

-

-	// Add px

-	if (/^[0-9]+$/.test(size))

-		size += 'px';

-	// Sanity check, IE doesn't like broken values

-	else if (!(/^[0-9\.]+(px|%|in|cm|mm|em|ex|pt|pc)$/i.test(size)))

-		return "";

-

-	return size;

-}

-

-function getStyle(elm, attrib, style) {

-	var val = tinyMCEPopup.dom.getAttrib(elm, attrib);

-

-	if (val != '')

-		return '' + val;

-

-	if (typeof(style) == 'undefined')

-		style = attrib;

-

-	return tinyMCEPopup.dom.getStyle(elm, style);

-}

 

--- a/tinymce/jscripts/tiny_mce/utils/mctabs.js
+++ /dev/null
@@ -1,162 +1,1 @@
-/**

- * mctabs.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-function MCTabs() {

-	this.settings = [];

-	this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');

-};

-

-MCTabs.prototype.init = function(settings) {

-	this.settings = settings;

-};

-

-MCTabs.prototype.getParam = function(name, default_value) {

-	var value = null;

-

-	value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];

-

-	// Fix bool values

-	if (value == "true" || value == "false")

-		return (value == "true");

-

-	return value;

-};

-

-MCTabs.prototype.showTab =function(tab){

-	tab.className = 'current';

-	tab.setAttribute("aria-selected", true);

-	tab.setAttribute("aria-expanded", true);

-	tab.tabIndex = 0;

-};

-

-MCTabs.prototype.hideTab =function(tab){

-	var t=this;

-

-	tab.className = '';

-	tab.setAttribute("aria-selected", false);

-	tab.setAttribute("aria-expanded", false);

-	tab.tabIndex = -1;

-};

-

-MCTabs.prototype.showPanel = function(panel) {

-	panel.className = 'current'; 

-	panel.setAttribute("aria-hidden", false);

-};

-

-MCTabs.prototype.hidePanel = function(panel) {

-	panel.className = 'panel';

-	panel.setAttribute("aria-hidden", true);

-}; 

-

-MCTabs.prototype.getPanelForTab = function(tabElm) {

-	return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");

-};

-

-MCTabs.prototype.displayTab = function(tab_id, panel_id, avoid_focus) {

-	var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;

-

-	tabElm = document.getElementById(tab_id);

-

-	if (panel_id === undefined) {

-		panel_id = t.getPanelForTab(tabElm);

-	}

-

-	panelElm= document.getElementById(panel_id);

-	panelContainerElm = panelElm ? panelElm.parentNode : null;

-	tabContainerElm = tabElm ? tabElm.parentNode : null;

-	selectionClass = t.getParam('selection_class', 'current');

-

-	if (tabElm && tabContainerElm) {

-		nodes = tabContainerElm.childNodes;

-

-		// Hide all other tabs

-		for (i = 0; i < nodes.length; i++) {

-			if (nodes[i].nodeName == "LI") {

-				t.hideTab(nodes[i]);

-			}

-		}

-

-		// Show selected tab

-		t.showTab(tabElm);

-	}

-

-	if (panelElm && panelContainerElm) {

-		nodes = panelContainerElm.childNodes;

-

-		// Hide all other panels

-		for (i = 0; i < nodes.length; i++) {

-			if (nodes[i].nodeName == "DIV")

-				t.hidePanel(nodes[i]);

-		}

-

-		if (!avoid_focus) { 

-			tabElm.focus();

-		}

-

-		// Show selected panel

-		t.showPanel(panelElm);

-	}

-};

-

-MCTabs.prototype.getAnchor = function() {

-	var pos, url = document.location.href;

-

-	if ((pos = url.lastIndexOf('#')) != -1)

-		return url.substring(pos + 1);

-

-	return "";

-};

-

-

-//Global instance

-var mcTabs = new MCTabs();

-

-tinyMCEPopup.onInit.add(function() {

-	var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;

-

-	each(dom.select('div.tabs'), function(tabContainerElm) {

-		var keyNav;

-

-		dom.setAttrib(tabContainerElm, "role", "tablist"); 

-

-		var items = tinyMCEPopup.dom.select('li', tabContainerElm);

-		var action = function(id) {

-			mcTabs.displayTab(id, mcTabs.getPanelForTab(id));

-			mcTabs.onChange.dispatch(id);

-		};

-

-		each(items, function(item) {

-			dom.setAttrib(item, 'role', 'tab');

-			dom.bind(item, 'click', function(evt) {

-				action(item.id);

-			});

-		});

-

-		dom.bind(dom.getRoot(), 'keydown', function(evt) {

-			if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab

-				keyNav.moveFocus(evt.shiftKey ? -1 : 1);

-				tinymce.dom.Event.cancel(evt);

-			}

-		});

-

-		each(dom.select('a', tabContainerElm), function(a) {

-			dom.setAttrib(a, 'tabindex', '-1');

-		});

-

-		keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {

-			root: tabContainerElm,

-			items: items,

-			onAction: action,

-			actOnFocus: true,

-			enableLeftRight: true,

-			enableUpDown: true

-		}, tinyMCEPopup.dom);

-	});

-});
+

--- a/tinymce/jscripts/tiny_mce/utils/validate.js
+++ /dev/null
@@ -1,253 +1,1 @@
-/**

- * validate.js

- *

- * Copyright 2009, Moxiecode Systems AB

- * Released under LGPL License.

- *

- * License: http://tinymce.moxiecode.com/license

- * Contributing: http://tinymce.moxiecode.com/contributing

- */

-

-/**

-	// String validation:

-

-	if (!Validator.isEmail('myemail'))

-		alert('Invalid email.');

-

-	// Form validation:

-

-	var f = document.forms['myform'];

-

-	if (!Validator.isEmail(f.myemail))

-		alert('Invalid email.');

-*/

-

-var Validator = {

-	isEmail : function(s) {

-		return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');

-	},

-

-	isAbsUrl : function(s) {

-		return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');

-	},

-

-	isSize : function(s) {

-		return this.test(s, '^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)?$');

-	},

-

-	isId : function(s) {

-		return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');

-	},

-

-	isEmpty : function(s) {

-		var nl, i;

-

-		if (s.nodeName == 'SELECT' && s.selectedIndex < 1)

-			return true;

-

-		if (s.type == 'checkbox' && !s.checked)

-			return true;

-

-		if (s.type == 'radio') {

-			for (i=0, nl = s.form.elements; i<nl.length; i++) {

-				if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)

-					return false;

-			}

-

-			return true;

-		}

-

-		return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);

-	},

-

-	isNumber : function(s, d) {

-		return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));

-	},

-

-	test : function(s, p) {

-		s = s.nodeType == 1 ? s.value : s;

-

-		return s == '' || new RegExp(p).test(s);

-	}

-};

-

-var AutoValidator = {

-	settings : {

-		id_cls : 'id',

-		int_cls : 'int',

-		url_cls : 'url',

-		number_cls : 'number',

-		email_cls : 'email',

-		size_cls : 'size',

-		required_cls : 'required',

-		invalid_cls : 'invalid',

-		min_cls : 'min',

-		max_cls : 'max'

-	},

-

-	init : function(s) {

-		var n;

-

-		for (n in s)

-			this.settings[n] = s[n];

-	},

-

-	validate : function(f) {

-		var i, nl, s = this.settings, c = 0;

-

-		nl = this.tags(f, 'label');

-		for (i=0; i<nl.length; i++) {

-			this.removeClass(nl[i], s.invalid_cls);

-			nl[i].setAttribute('aria-invalid', false);

-		}

-

-		c += this.validateElms(f, 'input');

-		c += this.validateElms(f, 'select');

-		c += this.validateElms(f, 'textarea');

-

-		return c == 3;

-	},

-

-	invalidate : function(n) {

-		this.mark(n.form, n);

-	},

-	

-	getErrorMessages : function(f) {

-		var nl, i, s = this.settings, field, msg, values, messages = [], ed = tinyMCEPopup.editor;

-		nl = this.tags(f, "label");

-		for (i=0; i<nl.length; i++) {

-			if (this.hasClass(nl[i], s.invalid_cls)) {

-				field = document.getElementById(nl[i].getAttribute("for"));

-				values = { field: nl[i].textContent };

-				if (this.hasClass(field, s.min_cls, true)) {

-					message = ed.getLang('invalid_data_min');

-					values.min = this.getNum(field, s.min_cls);

-				} else if (this.hasClass(field, s.number_cls)) {

-					message = ed.getLang('invalid_data_number');

-				} else if (this.hasClass(field, s.size_cls)) {

-					message = ed.getLang('invalid_data_size');

-				} else {

-					message = ed.getLang('invalid_data');

-				}

-				

-				message = message.replace(/{\#([^}]+)\}/g, function(a, b) {

-					return values[b] || '{#' + b + '}';

-				});

-				messages.push(message);

-			}

-		}

-		return messages;

-	},

-

-	reset : function(e) {

-		var t = ['label', 'input', 'select', 'textarea'];

-		var i, j, nl, s = this.settings;

-

-		if (e == null)

-			return;

-

-		for (i=0; i<t.length; i++) {

-			nl = this.tags(e.form ? e.form : e, t[i]);

-			for (j=0; j<nl.length; j++) {

-				this.removeClass(nl[j], s.invalid_cls);

-				nl[j].setAttribute('aria-invalid', false);

-			}

-		}

-	},

-

-	validateElms : function(f, e) {

-		var nl, i, n, s = this.settings, st = true, va = Validator, v;

-

-		nl = this.tags(f, e);

-		for (i=0; i<nl.length; i++) {

-			n = nl[i];

-

-			this.removeClass(n, s.invalid_cls);

-

-			if (this.hasClass(n, s.required_cls) && va.isEmpty(n))

-				st = this.mark(f, n);

-

-			if (this.hasClass(n, s.number_cls) && !va.isNumber(n))

-				st = this.mark(f, n);

-

-			if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))

-				st = this.mark(f, n);

-

-			if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))

-				st = this.mark(f, n);

-

-			if (this.hasClass(n, s.email_cls) && !va.isEmail(n))

-				st = this.mark(f, n);

-

-			if (this.hasClass(n, s.size_cls) && !va.isSize(n))

-				st = this.mark(f, n);

-

-			if (this.hasClass(n, s.id_cls) && !va.isId(n))

-				st = this.mark(f, n);

-

-			if (this.hasClass(n, s.min_cls, true)) {

-				v = this.getNum(n, s.min_cls);

-

-				if (isNaN(v) || parseInt(n.value) < parseInt(v))

-					st = this.mark(f, n);

-			}

-

-			if (this.hasClass(n, s.max_cls, true)) {

-				v = this.getNum(n, s.max_cls);

-

-				if (isNaN(v) || parseInt(n.value) > parseInt(v))

-					st = this.mark(f, n);

-			}

-		}

-

-		return st;

-	},

-

-	hasClass : function(n, c, d) {

-		return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);

-	},

-

-	getNum : function(n, c) {

-		c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];

-		c = c.replace(/[^0-9]/g, '');

-

-		return c;

-	},

-

-	addClass : function(n, c, b) {

-		var o = this.removeClass(n, c);

-		n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;

-	},

-

-	removeClass : function(n, c) {

-		c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');

-		return n.className = c != ' ' ? c : '';

-	},

-

-	tags : function(f, s) {

-		return f.getElementsByTagName(s);

-	},

-

-	mark : function(f, n) {

-		var s = this.settings;

-

-		this.addClass(n, s.invalid_cls);

-		n.setAttribute('aria-invalid', 'true');

-		this.markLabels(f, n, s.invalid_cls);

-

-		return false;

-	},

-

-	markLabels : function(f, n, ic) {

-		var nl, i;

-

-		nl = this.tags(f, "label");

-		for (i=0; i<nl.length; i++) {

-			if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)

-				this.addClass(nl[i], ic);

-		}

-

-		return null;

-	}

-};

 

--- /dev/null
+++ b/tinymce3/changelog.txt
@@ -1,1 +1,1484 @@
+Version 3.4.8 (2012-02-02)
+	Fixed bug in IE where selected text ending with space cannot be formatted then formatted again to get original text.
+	Fixed bug in IE where images larger than editor area were being deselected when toolbar buttons are clicked.
+	Fixed bug where wrong text align buttons are active when multiple block elements are selected.
+	Fixed bug where selected link not showing in target field of link dialog in some selection cases.
+	Use settings for remove_trailing_br so this can be turned off instead of hard coding the value.
+	Fixed bug in IE where the media plugin displayed null text when some values aren't filled in.
+	Added API method 'onSetAttrib' that fires when the attribute value on a node changes.
+	Fix font size dropdown value not being updated when text already has a font size in the advanced template.
+	Fixed bug in IE where IE doesn't use ARIA attributes properly on options - causing labels to be read out 2 times.
+	Fixed bug where caret cannot be placed after table if table is at end of document in IE.
+	Fixed bug where adding range isn't always successful so we need to check range count otherwise an exception can occur.
+	Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly.
+	Fixed bug where a stranded bullet point would get created in WebKit.
+	Fixed bug where selecting text in a blockquote and pressing backspace toggles the style.
+	Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property. 
+	Fix white space in between spans from being deleted. 
+	Fixed bug where scrollbars where visible in the character map dialog on Gecko.
+	Fixed issue with missing translation for one of the emoticons.
+	Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev.
+	Fixed bug where urls with an at sign in the path wouldn't be parsed correctly. Patch contributed by Jason Grout.
+	Fixed bug where Opera would remove the first character of a inline formatted word if you pressed backspace.
+	Fixed bugs with the autoresize plugin on various browsers and removed the need for the throbber.
+	Fixed performance issue where the contextmenu plugin would try to remove the menu even if it was removed. Patch contributed by mhu.
+Version 3.4.7 (2011-11-03)
+	Modified the caret formatting behavior to word similar to common desktop wordprocessors like Word or Libre Office.
+	Fixed bug in Webkit - Cursor positioning does not work vertically within a table cell with multiple lines of text.
+	Fixed bug in IE where Inserting a table in IE8 places cursor in the second cell of the first row.
+	Fixed bug in IE where editor in a frame doesn't give focus to the toolbar using ALT-F10.
+	Fix for webkit and gecko so that deleting bullet from start of list outdents inner list items and moves first item into paragraph.
+	Fix new list items in IE8 not displayed on a new line when list contains nested list items.
+	Clear formatting in table cell breaks the cell.
+	Made media type list localisable.
+	Fix out of memory error when using prototype in media dialog.
+	Fixed bug where could not add a space in the middle of a th cell.
+	Fixed bug where adding a bullet between two existing bullets adds an extra one
+	Fixed bug where trying to insert a new entry midway through a bulleted list fails dismally when the next entry is tabbed in.
+	Fixed bug where pressing enter on an empty list item does not outdent properly in FF
+	Fixed bug where adding a heading after a list item in a table cell changes all styles in that cell
+	Fixed bug where hitting enter to exit from a bullet list moves cursor to the top of the page in Firefox.
+	Fixed bug where pressing backspace would not delete HRs in Firefox and IE when next to an empty paragraph.
+	Fixed bug where deleting part of the link text can cause a link with no destination to be saved.
+	Fixed bug where css style border widths wasn't handled correctly in table dialog.
+	Fixed bug where parsing invalid html contents on IE or WebKit could produce an infinite loop.
+	Fixed bug where scripts with custom script types wasn't properly passed though the editor.
+	Fixed issue where some Japanese kanji characters wasn't properly entity encoded when numeric entity mode was enabled.
+	Made emoticons dialog use the keyboard naviation.
+	Added navigation instructions to the symbols dialog.
+	Added ability to set default values for the media plugin.
+	Added new font_size_legacy_values option for converting old font element sizes to span with font-size properties.
+	Fixed bug where the symbols dialog was not accessible.
+	Added quirk for IE ensuring that the body of the document containing tinyMCE has a role="application" for accessibility.
+	Fixed bug where the advanced color picker wasn't working properly on FF 7.
+	Fixed issue where the advanced color picker was producing uppercase hex codes.
+	Fixed bug where IE 8 could throw exceptions if the contents contained resizable content elements.
+	Fixed bug where caret formatting wouldn't be correctly applied to previous sibling on WebKit.
+	Fixed bug where the select boxes for font size/family would loose it's value on WebKit due to recent iOS fixes.
+Version 3.4.6 (2011-09-29)
+	Fixed bug where list items were being created for empty divs.
+	Added support in Media plugin for audio media using the embed tag
+	Fixed accessibility bugs in WebKit and IE8 where toolbar items were not being read.
+	Added new use_accessible_selects option to ensure accessible list boxes are used in all browsers (custom widget in firefox native on other browsers)
+	Fixed bug where classid attribute was not being checked from embed objects.
+	Fixed bug in jsrobot tests with intermittently failing.
+	Fixed bug where anchors wasn't updated properly if you edited them using IE 8.
+	Fixed bug where input method on WebKit on Mac OS X would fail to initialize when sometimes focusing the editor.
+	Fixed bug where it wasn't possible to select HR elements on WebKit by simply clicking on them.
+	Fixed bug where the media plugin wouldn't work on IE9 when not using the inlinepopups plugin.
+	Fixed bug where hspace,vspace,align and bgcolor would be removed from object elements in the media plugin.
+	Fixed bug where the new youtube format wouldn't be properly parsed by the media plugin.
+	Fixed bug where the style attribute of layers wasn't properly updated on IE and Gecko.
+	Fixed bug where editing contents in a layer would fail on Gecko since contentEditable doesn't inherit properly.
+	Fixed bug where IE 6/7 would produce JS errors when serializing contents containing layers.
+Version 3.4.5 (2011-09-06)
+	Fixed accessibility bug in WebKit where the right and left arrow keys would update native list boxes.
+	Added new whitespace_elements option to enable users to specify specific elements where the whitespace is preserved.
+	Added new merge_siblings option to formats. This option makes it possible to disable the auto merging of siblings when applying formats.
+	Fixed bug in IE where trailing comma in paste plugin would cause plugin to not run correctly.
+	Fixed bug in WebKit where console messages would be logged when deleting an empty document.
+	Fixed bug in IE8 where caret positioned is on list item instead of paragraph when outdent splits the list
+	Fixed bug with image dialogs not inserting an image if id was omitted from valid_elements.
+	Fixed bug where the selection normalization logic wouldn't properly handle image elements in specific config cases.
+	Fixed bug where the map elements coords attribute would be messed up by IE when serializing the DOM.
+	Fixed bug where IE wouldn't properly handle custom elements when the contents was serialized.
+	Fixed bug where you couldn't move the caret in Gecko if you focused the editor using the API or a UI control.
+	Fixed bug where adjacent links would get merged on IE due to bugs in their link command.
+	Fixed bug where the color split buttons would loose the selection on IE if the editor was placed in a frame/iframe.
+	Fixed bug where floated images in WebKit wouldn't get properly linked.
+	Fixed bug where the fullscreen mode in a separate window wasn't forced into IE9+ standards mode.
+	Fixed bug where pressing enter in an empty editor on WebKit could produce DIV elements instead of P.
+	Fixed bug where spans would get removed incorrectly when merging two blocks on backspace/delete on WebKit.
+	Fixed bug where the editor contents wouldn't be completely removed on backspace/delete on WebKit.
+	Fixed bug where the fullpage plugin wouldn't properly render style elements in the head on IE 6/7.
+	Fixed bug where the nonbreaking_force_tab option in the nonbreaking plugin wouldn't work on Gecko/WebKit.
+	Fixed bug where the isDirty state would become true on non IE browsers if there was an table at the end of the contents.
+	Fixed bug where entities wasn't properly encoded on WebKit when pasting text as plain text.
+	Fixed bug where empty editors would produce an exception of valid_elements didn't include body and forced_root_blocks where disabled.
+	Fixed bug where the fullscreen mode wouldn't retain the header/footer in the fullpage plugin.
+	Fixed issue where the plaintext_mode and plaintext_mode_sticky language keys where swapped.
+Version 3.4.4 (2011-08-04)
+	Added new html5 audio support. Patch contributed by Ronald M. Clifford.
+	Added mute option for video elements and preload options for video/audio patch contributed by Dmitry Kalinkin.
+	Fixed selection to match visual selection before applying formatting changes.
+	Fixed browser specific bugs in lists for WebKit and IE.
+	Fixed bug where IE would scroll the window if you closed an inline dialog that was larger than the viewport. Patch by Laurence Keijmel.
+	Fixed bug where pasting contents near a span element could remove parts of that span. Patch contributed by Wesley Walser.
+	Fixed bug where formatting change would be lost after pressing enter.
+	Fixed bug in WebKit where deleting across blocks would add extra styles.
+	Fixed bug where moving cursor vertically in tables in WebKit wasn't working.
+	Fixed bug in IE where deleting would cause error in console.
+	Fixed bug where the formatter was not applying formats across list elements.
+	Fixed bug where the wordcount plugin would try and update the wordcount if tinymce had been destroyed.
+	Fixed bug where tabfocus plugin would attempt to focus elements not displayed when their parent element was hidden.
+	Fixed bug where the contentEditable state would sometimes be removed if you deleted contents in Gecko.
+	Fixed bug where inserting contents using mceInsertContent would fail if "span" was disabled in valid_elements.
+	Fixed bug where initialization might fail if some resource on gecko wouldn't load properly and fire the onload event.
+	Fixed bug where ctrl+7/8/9 keys wouldn't properly add the specific formats associated with them.
+	Fixed bug where the HTML tags wasn't properly closed in the style plugins properties dialog.
+	Fixed bug where the list plugin would produce an exception if the user tried to delete an element at the very first location.
+Version 3.4.3.2 (2011-06-30)
+	Fixed bug where deleting all of a paragraph inside a table cell would behave badly in webkit.
+	Fixed bugs in tests in firefox5 and WebKit.
+	Fixed bug where selection of table cells would produce an exception on Gecko.
+	Fixed bug where the caret wasn't properly rendered on Gecko when the editor was hidden.
+	Fixed bug where pasting plain text into WebKit would produce a pre element it will now produce more semantic markup.
+	Fixed bug where selecting list type formats using the advlist plugin on IE8 would loose editor selection.
+	Fixed bug where forced root blocks logic wouldn't properly pad elements created if they contained data attributes.
+	Fixed bug where it would remove all contents of the editor if you inserted an image when not having a caret in the document.
+	Fixed bug where the YUI compressor wouldn't properly encode strings with only a quote in them.
+	Fixed bug where WebKit on iOS5 wouldn't call nodeChanged when the selection was changed.
+	Fixed bug where mceFocus command wouldn't work properly on Gecko since it didn't focus the body element.
+	Fixed performance issue with the noneditable plugin where it would enable/disable controls to often.
+Version 3.4.3.1 (2011-06-16)
+	Fixed bug where listboxes were not being handled correctly by JAWS in firefox with the o2k7 skin.
+	Fixed bug where custom buttons were not being rendered correctly when in high contrast mode.
+	Added support for iOS 5 that now supporting contentEditable in it's latest beta.
+	Fixed bug where urls in style attributes with a _ character followed by a number would cause incorrect output.
+	Fixed bug where custom_elements option wasn't working properly on IE browsers.
+	Fixed bug where custom_elements marked as block elements wouldn't get correctly treated as block elements.
+	Fixed bug where attributes with </> wasn't properly encoded as XML entities.
+Version 3.4.3 (2011-06-09)
+	Fixed bug where deleting backwards before an image into a list would put the cursor in the wrong location.
+	Fixed bug where styles plugin would not apply styles across multiple selected block elements correctly.
+	Fixed bug where cursor would jump to start of document when selection contained empty table cells in IE8.
+	Fixed bug where applied styles wouldn't be kept if you pressed enter twice to produce two paragraphs.
+	Fixed bug where a ghost like caret would appear on Gecko when pressing enter while having a text color applied.
+	Fixed bug where IE would produce absolute urls if you inserted a image/link and reloaded the page.
+	Fixed bug where applying a heading style to a list item would cascade style to children list items.
+	Fixed bug where Editor loses focus when backspacing and changing styles in WebKit.
+	Fixed bug where exception was thrown in tinymce.util.URI when parsing a relative URI and no base_uri setting was provided.
+	Fixed bug where alt-f10 was not always giving focus to the toolbar on Safari.
+	Added new 'allow_html_in_named_anchor' option to allow html to occur within a named anchor tag.  Use at own risk.
+	Added plugin dependency support.  Will autoload plugins specified as a dependency if they haven't been loaded.
+	Fixed bug where the autolink plugin didn't work with non-English keyboards when pressing ).
+	Added possibility to change properties of all table cells in a column.
+	Added external_image_list option to get images list from user-defined variable or function.
+	Fixed bug where the autoresize plugin wouldn't reduce the editors height on Chrome.
+	Fixed bug where table size inputs were to small for values with size units.
+	Fixed bug where table cell/row size input values were not validated.
+	Fixed bug where menu item line-height would be set to wrong value by external styles.
+	Fixed bug where hasUndo() would return wrong answer.
+	Fixed bug where page title would be set to undefined by fullpage plugin.
+	Fixed bug where HTML5 video properties were not updated in embedded media settings.
+	Fixed bug where HTML comment on the first line would cause an error.
+	Fixed bug where spellchecker menu was positioned incorrectly on IE.
+	Fixed bug where breaking out of list elements on WebKit would produce a DIV instead of P after the list.
+	Fixed bug where pasting from Word in IE9 would add extra BR elements when text was word wrapped.
+	Fixed bug where numeric entities with leading zeros would produce incorrect decoding.
+	Fixed bug where hexadecimal entities wasn't properly decoded.
+	Fixed bug where bookmarks wasn't properly stored/restored on undo/redo.
+	Fixed bug where the mceInsertCommand didn't retain the values of links if they contained non url contents.
+	Fixed bug where the valid_styles option wouldn't be properly used on styles for specific elements.
+	Fixed so contentEditable is used for the body of the editor if it's supported.
+	Fixed so trailing BR elements gets removed even when forced_root_blocks option was set to false/null.
+	Fixed performance issue with mceInsertCommand and inserting very simple contents.
+	Fixed performance issue with older IE version and huge documents by optimizing the forced root blocks logic.
+	Fixed performance issue with table plugin where it checked for selected cells to often.
+	Fixed bug where creating a link on centered/floated image would produce an error on WebKit browsers.
+	Fixed bug where Gecko would remove single paragraphs if there where contents before/after it.
+	Fixed bug where the scrollbar would move up/down when pasting contents using the paste plugin.
+Version 3.4.2 (2011-04-07)
+	Added new 'paste_text_sticky_default' option to paste plugin, enables you to set the default state for paste as plain text.
+	Added new autoresize_bottom_margin option to autoresize plugin that enables you to add an extra margin at the bottom. Patch contributed by Andrew Ozz.
+	Rewritten the fullpage plugin to handle style contents better and have a more normalized behavior across browsers.
+	Fixed bug where contents inserted with mceInsertContent wasn't parsed using the default dom parser.
+	Fixed bug where blocks containing a single anchor element would be treated as empty.
+	Fixed bug where merging of table cells on IE 6, 7 wouldn't look correctly until the contents was refreshed.
+	Fixed bug where context menu wouldn't work properly on Safari since it was passing out the ctrl key as pressed.
+	Fixed bug where image border color/style values were overwritten by advimage plugin.
+	Fixed bug where setting border in advimage plugin would throw error in IE.
+	Fixed bug where empty anchors list in link settings wasn't hidden.
+	Fixed bug where xhtmlextras popups were missing localized popup-size parameters.
+	Fixed bug where the context menu wouldn't select images on WebKit browsers.
+	Fixed bug where paste plugin wouldn't properly extract the contents on WebKit due to recent changes in browser behavior.
+	Fixed bug where focus of the editor would get on control contents on IE lost due to a bug in the ColorSplitButton control.
+	Fixed bug where contextmenu wasn't disabled on noneditable elements.
+	Fixed bug where getStyle function would trigger error when called on element without style property.
+	Fixed bug where editor fail to load if Javascript Compressor was used.
+	Fixed bug where list-style-type=lower-greek would produce errors in IE<8.
+	Fixed bug where spellchecker plugin would produce errors on IE6-7.
+	Fixed bug where theme_advanced_containers configuration option causes error.
+	Fixed bug where the mceReplaceContent command would produce an error since it didn't correctly handle a return value.
+	Fixed bug where you couldn't enter float point values for em in dialog input fields since it wouldn't be considered a valid size.
+	Fixed bug in xhtmlxtras plugin where it wasn't possible to remove some attributes in the attributes dialog.
+Version 3.4.1 (2011-03-24)
+	Added significantly improved list handling via the new 'lists' plugin.
+	Added 'autolink' plugin to enable automatically linking URLs. Similar to the behavior IE has by default.
+	Added 'theme_advanced_show_current_color' setting to enable the forecolor and backcolor buttons to continuously show the current text color.
+	Added 'contextmenu_never_use_native' setting to disable the ctrl-right-click showing the native browser context menu behaviour.
+	Added 'paste_enable_default_filters' setting to enable the default paste filters to be disabled.
+	Fixed bug where selection locations on undo/redo didn't work correctly on specific contents.
+	Fixed bug where an exception would be trown on IE when loading TinyMCE inside an iframe.
+	Fixed bug where some ascii numeric entities wasn't properly decoded.
+	Fixed bug where some non western language codes wasn't properly decoded/encoded.
+	Fixed bug where undo levels wasn't created when deleting contents on IE.
+	Fixed bug where the initial undo levels bookmark wasn't updated correctly.
+	Fixed bug where search/replace wouldn't be scoped to editor instances on IE8.
+	Fixed bug where IE9 would produce two br elements after block elements when pasting.
+	Fixed bug where IE would place the caret at an incorrect position after a paste operation.
+	Fixed bug where a paste operation using the keyboard would add an extra undo level.
+	Fixed bug where some attributes/elements wasn't correctly filtered when invalid contents was inserted.
+	Fixed bug where the table plugin couldn't correctly handle invalid table structures.
+	Fixed bug where charset and title of the page were handled incorrectly by the fullpage plugin.
+	Fixed bug where toggle states on some of the list boxes didn't update correctly.
+	Fixed bug where sub/sub wouldn't work correctly when done as a caret action in Chrome 10.
+	Fixed bug where the constrain proportions checkbox wouldn't work in the media plugin.
+	Fixed bug where block elements containing trailing br elements wouldn't treated properly if they where invalid.
+	Fixed bug where the color picker dialog wouldn't be rendered correctly when using the o2k7 theme.
+	Fixed bug where setting border=0 using advimage plugin invalid style attribute content was created in Chrome.
+	Fixed bug with references to non-existing images in css of fullpage plugin.
+	Fixed bug where item could be unselected in spellchecker's language selector.
+	Fixed bug where some mispelled words could be not highlighted using spellchecker plugin.
+	Fixed bug where spellchecking would merge some words on IE.
+	Fixed bug where spellchecker context menu was not always positioned correctly.
+	Fixed bug with empty anchors list in advlink popup when Invisible Elements feature was disabled.
+	Fixed bug where older IE versions wouldn't properly handle some elements if they where placed at the top of editor contents.
+	Fixed bug where selecting the whole table would enable table tools for cells and rows.
+	Fixed bug where it wasn't possible to replace selected contents on IE when pasting using the paste plugin.
+	Fixed bug where setting text color in fullpage plugin doesn't work.
+	Fixed bug where the state of checkboxes in media plugin wouldn't be set correctly.
+	Fixed bug where black spade suit character was not included in special character selector.
+	Fixed bug where setting invalid values for table cell size would throw an error in IE.
+	Fixed bug where spellchecking would remove whitespace characters from PRE block in IE.
+	Fixed bug where HR was inserted inside P elements instead of splitting them.
+	Fixed bug where extra, empty span tags were added when using a format with both selector and inline modes.
+	Fixed bug where bullet lists weren't always detected correctly.
+	Fixed bug where deleting some paragraphs on IE would cause an exception.
+	Fixed bug where the json encoder logic wouldn't properly encode \ characters.
+	Fixed bug where the onChange event would be fired when the editor was first initialized.
+	Fixed bug where mceSelected wouldn't be removed properly from output even if it's an internal class.
+	Fixed issue with table background colors not being transparent. This improves compliance with users browser color preferences.
+	Fixed issue where styles were not included when using the full page plugin.
+	Fixed issue where drag/drop operations wasn't properly added to the undo levels.
+	Fixed issue where colors wasn't correctly applied to elements with underline decoration.
+	Fixed issue where deleting some paragraphs on IE would cause an exception.
+Version 3.4 (2011-03-10)
+	Added accessibility example with various accessibility options contributed by Ephox.
+	Fixed bug where attributes wasn't properly handled in the xhtmlxtras plugin.
+	Fixed bug where the image.htm had some strange td artifacts probably due to auto merging.
+	Fixed bug where the ToolbarGroup had an missing reference to this in it's destroy method.
+	Fixed bug with the resizeBy function in the advanced theme where it was scaled by the wrong parent.
+	Fixed bug where an exception would be thrown by the element if the page was served in xhtml mode.
+	Fixed bug where mceInsertContent would throw an exception when page was served in xhtml mode.
+	Fixed bug where you couldn't select a forground/background color when page was served in xhtml mode.
+	Fixed bug where the editor would scroll to the toolbar when clicked due to a call to focus in ListBox.
+	Fixed bug where pages with rtl dir wouldn't render split buttons correctly when using the o2k7 theme.
+	Fixed bug where anchor elements with names wasn't properly collapsed as they where in 3.3.x.
+	Fixed bug where WebKit wouldn't properly handle image selection if it was done left to right.
+	Fixed bug where the formatter would align images when the selection range was collapsed.
+	Fixed bug where the image button would be active when the selection range was collapsed.
+	Fixed bug where the element_format option wasn't used by the new (X)HTML serializer logic.
+	Fixed bug where the table cell/row dialogs would produce empty attributes.
+	Fixed bug where the tfoot wouldn't be added to the top of the table.
+	Fixed bug where the formatter would merge siblings with white space between them.
+	Fixed bug where pasting headers and paragraphs would produce an extra paragraph.
+	Fixed bug where the ColorSplitButton would throw an exception if you clicked out side a color.
+	Fixed bug where IE9 wouldn't properly produce new paragraphs on enter if the current paragraph had formatting.
+	Fixed bug where multiple BR elements at end of block elements where removed.
+	Fixed bug where fullscreen plugin wouldn't correctly display the edit area on IE6 for long pages.
+	Fixed bug where paste plugin wouldn't properly encode raw entities when pasting in plain text mode.
+	Fixed bug where the search/replace plugin wouldn't work correctly on IE 9.
+	Fixed so the drop menus doesn't get an outline border visible when focused, patch contributed by Ephox.
+	Fixed so the values entered in the color picker are forced to hex values.
+	Removed dialog workaround for IE 9 beta since the RC is now out and people should upgrade.
+	Removed obsolete calls in various plugins to the mceBeginUndoLevel command.
+Version 3.4b3 (2011-02-10)
+	Added WAI-ARIA support for the main UI and dialogs this feature was contributed by Ephox.
+	Added iframe support to media plugin in order to handle the new YouTube HTML5 video formats.
+	Fixed bug where anchors would wrap the text contents after it due to a bug in the DomParser logic.
+	Fixed bug where the selected state wouldn't be removed on ListBox controls when a menu item was selected.
+	Fixed bug where IE could throw an unspecified error exception when the getBookmark logic was executed.
+	Fixed bug where IE would throw an invalid argument error when focus was applied to an empty editor instance.
+	Fixed bug where applying inline format wouldn't work if the start cell in the selection was empty.
+	Fixed bug where auto detection logic for YouTube and Google Video wouldn't work in the new media plugin.
+	Fixed bug where td elements would get a colspan/rowspan of 1 when created by the table plugin.
+	Fixed bug where removal/padding of empty elements wasn't handled correctly.
+	Fixed bug where internal elements would show up in element path.
+	Fixed bug where internal elements would get serialized as valid output.
+	Fixed bug where color wasn't correctly applied to anchor elements.
+	Fixed bug where float option in the style plugin dialog wouldn't be handled correctly on WebKit.
+	Fixed bug where the tinymce.dom.TreeWalker prev function wouldn't walk the DOM correctly.
+	Fixed bug where mceInsertContent command could produce empty block elements after the inserted content.
+	Fixed bug where mceInsertContent command wouldn't apply visual aids on tables and similar elements.
+	Fixed bug where empty block elements would get double br bogus elements in them.
+	Fixed bug where the color menu wouldn't apply the color correctly on IE when the viewport was to small.
+	Fixed bug where right clicking out side the body element of the editor iframe would prevent paste from working on IE.
+	Fixed bug where the onContextMenu event wouldn't fire correctly on IE if you clicked out side the body element.
+	Fixed bug where the onContextMenu event wouldn't fire correctly on modern Opera versions that now support it by default.
+	Fixed bug where legacy content wasn't converted correctly when inserted using mceInsertContent or through the source dialog.
+	Fixed bug where resizing images or tables wouldn't update the style attribute correctly or leave data-mce prefixed attributes.
+	Fixed bug where adding links wouldn't work correctly when using TinyMCE jQuery version with jQuery 1.5.
+	Fixed bug where single quotes inside param elements wasn't treated correctly by the media plugin.
+	Fixed bug where pasting plain text in WebKit wouldn't work correctly. It will now auto detect the WebKit bug and use plain text mode.
+	Fixed bug where the DomParser would fail to move out invalid elements within invalid elements on complex contents.
+	Fixed bug where paste as plain text would not decode html entities properly.
+	Fixed bug where large paragraphs would cause incorrect scrolling behavior if you would split them using enter.
+	Fixed bug where the SaxParser wouldn't properly parse some specific short ended elements.
+	Fixed so mceReplaceContent supports caret position and makes sure that the contents inserted gets validated.
+	Fixed so unnecessary traling br elements in blocks gets removed on Gecko/WebKit when using mceInsertContent command.
+	Moved some plugin css contents into the skin content css files to reduce the number of http requests.
+	Moved some plugin specific images into the theme img directory since they can then be shared.
+Version 3.4b2 (2011-01-13)
+	Added new custom flash player, this player supports mp4 and flv and has skin support.
+	Fixed so mceInsertContent handles context correctly to enforce valid nesting of elements.
+	Fixed bug where scrolling would become jerky on IE on some contents.
+	Fixed bug where paste as plain text would throw exception of missing entities setting.
+	Fixed bug where anchor nodes where removed by the new serializer engine.
+	Fixed bug where IE would crash if when backspace where used on some specific contents.
+	Fixed bug where pasting of plain text in WebKit would result in merging of text lines.
+	Fixed bug where it wasn't possible to delete images or tables using backspace on IE9.
+	Fixed bug where urls in styles would generate a JS error due to incorrect scope.
+	Fixed bug where copy paste from Java applications would produce extra contents in FF on Mac.
+	Fixed bug where the verify_html option wouldn't allow all elements and attributes.
+Version 3.4b1 (2010-12-20)
+	Added new serialization engine that increases performance and enforces valid output according to the specified schema settings.
+	Added new HTML parser logic used by the serialization engine and can handle malformed html contents.
+	Added new valid_children config option, enables more fine grain control of elements can be inside other elements.
+	Added new entities encoding logic boost performance and will only encode entities based on context i.e. attributes/text nodes.
+	Added new protect setting that enables users to protect template items from being removed by the serializer logic.
+	Added new {$caret} marker for the mceInsertContent command. Makes it possible to move the caret to a specific position when inserting contents.
+	Added new validation of anchor names. Only valid W3C names will be accepted.
+	Replaced the internal _mce_ prefixed attributes to the more standard HTML5 data-mce- prefix. This will also resolve future browser santiaztion issues.
+	Fixed bug where the paste plugin wouldn't convert Word lists with more than 9 items to real ol lists. Patch contributed by Mike (yogaboy).
+	Fixed bug where clicking on a format title would produce errors if the current selection didn't have any formats.
+	Fixed bug where paste of simple texts wouldn't work correctly in Gecko using the paste plugin since it keeps block formatting.
+	Fixed bug where confirm dialogs didn't display correctly due to resent IE9 fixes.
+	Fixed bug where spaces in URLs wouldn't be properly encoded to %20 if the user entered them in the link dialogs. Patch contributed by Ephox.
+	Fixed bug where the image alignment buttons wouldn't reposition the resize handles on FF due to a browser issue. Patch contributed by Ephox.
+	Fixed bug where the compareBoundaryPoints method of the IE Range class didn't work correctly. Patch contributed by Ephox.
+	Fixed bug where selection of elements using double click wouldn't select the clicked element but rather the parent node on FF. Patch contributed by Ephox.
+	Fixed bug where IE would scroll the user to the current selection causing parent document to scroll as well. Patch contributed by Ephox.
+	Fixed bug where style compression would incorrectly compress items with different values. It now only compresses if the values are the same. Patch contributed by Ephox.
+	Fixed bug where FF would add non breaking spaces outside TD elements if formatting was applied to table cells. Patch contributed by Ephox.
+	Fixed bug where the caret position would be lost on WebKit browsers if you pasted images multiple times. Patch contributed by Ephox.
+	Fixed bug where non word contents like * would be counted as words in the wordcount pluging. Patch contributed by David Balatero.
+	Fixed bug where the toggle absolute button in the layer plugin wouldn't remove the existing internal style attribute first.
+	Fixed bug where the autosave plugin would generate an exception on IE if the user had disabled userdata persistence.
+	Fixed bug where the paste plugin would remove dashed classes on IE since the regexps didn't include that character.
+	Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
+	Fixed bug where applying block formats to empty elements wouldn't render correctly on IE.
+	Fixed bug where the searchreplace plugin would add a f or r character when shortcuts where used on IE while using default dialogs.
+	Fixed bug where Opera wouldn't load scripts correctly since the onreadystate would fire even though the script wasn't loaded.
+	Fixed issue where &nbsp; wouldn't be handled correctly in the bbcode plugin if entity_encoding was set to raw.
+	Fixed issue where contents would flicker since the content css files where asynchronously loaded.
+	Fixed bug where WebKit wouldn't create links on images with a float style.
+Version 3.3.9.3 (2010-12-20)
+	Fixed issue where WebKit wouldn't correctly apply ins/del in xhtmlxtras plugin.
+	Fixed bug where paste as plaintext on WebKit wouldn't produce br and p elements correctly.
+	Fixed bug where the confirm dialog texts would be incorrectly placed due to recent IE 9 workarounds in the window.css.
+	Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
+Version 3.3.9.2 (2010-09-29)
+	Fixed bug where placing the caret in IE 9 beta 1 would not work correctly if you clicked out side the document body element.
+	Fixed bug where IE 9 beta 1 wouldn't resize the editor correctly since the events didn't fire as previous versions did.
+	Fixed bug where FF would produce an error message when being rendered inside a hidden div element.
+	Fixed bug where resize logic could produce a cookie with a width/height less than the size of the container.
+	Fixed bug where content_css wouldn't populate the styles dropdown correctly.
+Version 3.3.9.1 (2010-09-23)
+	Fixed bug where WebKit browsers wouldn't activate the image button when images where selected.
+	Fixed bug where Opera Presto 10.60 deletes elements when restoring bookmarks.
+	Fixed bug where IE9 beta1 doesn't handle regexp replacement values correctly.
+	Fixed bug where IE9 beta1 didn't render the inline dialogs correctly due to a bug with CSS clip.
+	Fixed bug where IE9 beta1 would produce error messages on load since they removed the document.recalc method.
+	Fixed bug where IE9 beta1 would produce <html xmlns=""> since they haven't implemented document.implementation.createDocument correctly.
+	Fixed bug where IE9 beta1 would searchreplace doesn't work since their native DOM Range doesn't have a find method.
+	Fixed bug where IE9 beta1 would render the source view incorrectly due to incorrect viewport size measurements.
+	Fixed bug where IE9 beta1 would crash when running the basic functionality unit tests.
+	Fixed bug where IE9 beta1 would wrap elements in blocks correctly due to changes to the selection object.
+	Fixed bug where IE9 beta1 would fail to insert contents since they havn't implemented the createContextualFragment method in their DOM Range.
+	Fixed bug where IE9 beta1 would fail to handle image selection since they currently doesn't support control selections in their DOM Range.
+	Fixed bug where IE9 beta1 would fail to load scripts since they fire the onload event before the scripts are parsed and executed.
+Version 3.3.9 (2010-09-08)
+	Fixed bug where inserting table rows into a table with subtable would produce an incorrect column count.
+	Fixed bug where the selection of cells in a table with subtables could produce invalid selections.
+	Fixed bug where the table plugin would produce a script error if you tried to move the caret before a first child table.
+	Fixed bug where the keep_styles feature on IE would move the caret to an incorrect location at the end of list blocks.
+	Fixed so attributes from legacy elements such as font gets retained when they get converted to spans.
+	Fixed minor issue where the select boxes wouldn't be set the not set by default in the table dialog.
+Version 3.3.8 (2010-06-30)
+	On IE8+ and FireFox 3.5+, dragging an image now correctly adds an undo
+	event.
+	Fixed bug where WebKit would not move the caret to a correct position after a paste operation.
+	Fixed bug where WebKit would produce a div wrapper element when pasting some contents.
+	Fixed bug where the visual chars and nonbreaking plugin wouldn't show nbsp elements correctly.
+	Fixed bug where the format states would be enabled even after the format was removed.
+	Fixed bug where the delete key would move the caret to an incorrect position.
+	Fixed bug where it wasn't possible to toggle of the current font size/family/style by clicking the title item.
+	Fixed bug where the abbr element wouldn't get serialized correctly on IE6.
+	Fixed so that the examples checks if they are executed from the local file system since that might not work properly.
+Version 3.3.7 (2010-06-10)
+	Fixed bug where context menu would produce an error on IE if you right clicked twice and left clicked once.
+	Fixed bug where resizing of the window on WebKit browsers in fullscreen mode wouldn't position the statusbar correctly.
+	Fixed bug where IE would produce an error if the editor was empty and you where undoing to that initial level.
+	Fixed bug where setting the table background on gecko would produce \" entities inside the url style property.
+	Fixed bug where the button states wouldn't be updated correctly on IE if you placed the caret inside the new element.
+	Fixed bug where undo levels wasn't properly added after applying styles or font sizes.
+	Fixed bug where IE would throw an error if you used "select all" on empty elements and applied formatting to that.
+	Fixed bug where IE could select one extra character when you did a bookmark call on a caret location.
+	Fixed bug where IE could produce a script error on delete since it would sometimes produce an invalid DOM.
+	Fixed bug where IE would return the wrong start element if the whole element was selected.
+	Fixed bug where formatting states wasn't updated on IE if you pressed enter at the end of a block with formatting.
+	Fixed bug where submenus for the context menu wasn't removed correctly when the editor was destroyed.
+	Fixed bug where Gecko could select the wrong element after applying format to multiple elements.
+	Fixed bug where Gecko would delete parts of the previous element if the selection range was a element selection.
+	Fixed bug where Gecko would not merge paragraph elements correctly if they contained br elements.
+	Fixed bug where the cleanup button could produce span artifacts if you pressed it twice in a row.
+	Fixed bug where the fullpage plugin header/footer would be have it's header reseted to it's initial state on undo.
+	Fixed bug where an empty paragraph would be collapsed if you performed a cleanup while having the caret inside it.
+	Fixed a few memory leaks on IE especially with drop menus in listboxes and the spellchecker.
+	Fixed so formats applied to the current caret gets merged to reduce the number of output elements.
+	Added the latest version of Sizzle for the CSS selector logic to fix a compatibility issue with prototype.
+Version 3.3.6 (2010-05-20)
+	Fixed bug where a editor.focus call could produce errors on IE in very specific scenarios.
+	Fixed bug where Gecko would produce an error if you unformatted text inside an empty element.
+	Fixed bug where IE would produce an error if the caret was placed before a table and you used the align buttons.
+	Fixed bug where the font size drop down didn't display the a preview correctly.
+	Fixed bug where the paste plugin wouldn't include all contents some times on WebKit browsers.
+	Fixed bug where the plain text mode toggle wouldn't work properly on WebKit.
+	Fixed bug where the editors statusbar would become invisible when you resized the window in fullscreen mode.
+Version 3.3.5.1 (2010-05-07)
+	Fixed a critical bug with the fullscreen plugin. Produced error messages when the state was toggled on/off.
+Version 3.3.5 (2010-05-06)
+	Added new merge_with_parents option to formats, enables the control of removal of elements with similar parents.
+	Fixed so the default behavior for applying classes isn't a toggle state but the old behavior from before the 3.3 release.
+	Fixed bug where selecting contents using double click on Gecko would produce errors when using removing format.
+	Fixed bug where the IE DOM could get messed up when non valid contents was pasted into the editor.
+	Fixed bug where merging selected table cells using the context menu didn't work as expected.
+	Fixed bug where some nestled formatting would be applied incorrectly.
+	Fixed bug with enter in list items when using the force_br_newlines mode on WebKit patch contributed by Ryan Koopmans.
+	Fixed bug where undo/redo could produce js errors on some specific operations.
+	Fixed bug where the theme_advanced_font_sizes didn't work as before 3.3 when complex settings where used.
+	Fixed bug where the table plugin would copy cell/row id attributes when making new rows/cells.
+Version 3.3.4 (2010-04-27)
+	Fixed bug where fullscreen plugin would add two editor instances to EditorManager collection.
+	Fixed bug where it was difficult to enter text on non western languages such as Japanese on IE.
+	Fixed bug where removing contents from nodes could result in an exception when using undo/redo.
+	Fixed bug with selection of images inside layers or other resizable containers on IE.
+	Fixed so editors isn't initialized on iPhone/iPad devices since they don't have caret support.
+Version 3.3.3 (2010-04-19)
+	Added new script_loaded callback function setting for the jQuery plugin.
+	Added various fixes and new rpc methods for the spellchecker plugin. Patch contributed by Michael Peters.
+	Removed some unnecessary inline style information from some of the dialogs.
+	Fixed some issues with the chaining for the TinyMCE jQuery plugin.
+	Fixed so any extra arguments passed to patched jQuery functions gets passed through. Patch contributed by Lee Henson.
+	Fixed so spellchecking/contextmenu can be toggled on/off if the browser has native spellchecker support.
+	Fixed bug where some texts in the new paste plugin wasn't placed in language pack.
+	Fixed bug where IE would produce an incorrect information message when cutting.
+	Fixed bug where removing items using the xhtmlxtras plugin wouldn't work correctly.
+	Fixed bug where setting table background images would add extra quotes on Gecko.
+	Fixed bug where shortcut for bold/italic/underline wouldn't work properly on WebKit.
+	Fixed bug where IE would produce an error message if only contents was an image tag and bold was used.
+	Fixed bug where the caret would move if alignment was applied to empty block elements.
+	Fixed bug where some shortcut key commands wouldn't apply formatting correctly.
+Version 3.3.2 (2010-03-25)
+	Fixed bug where it was possible to scale the editor iframe smaller than the editor UI.
+	Fixed bug where some of the resizing option didn't work with the new live resize.
+	Fixed bug where the format listbox didn't show nestled formats correctly.
+	Fixed bug where the native listboxes didn't work correctly.
+	Fixed bug where font size selection in using the legacyoutput plugin would produce errors.
+	Fixed so block and blockquote formats remove their matching element regardless of it's attributes.
+Version 3.3.1 (2010-03-18)
+	Added new live resize feature, the editor contents is now visible while resizing.
+	Fixed bug where some valid_element patterns would produce an unknown property error.
+	Fixed bug where it wasn't possible to toggle off blockquotes.
+	Fixed bug where an undo level wasn't produced when applying formatting using the styles dropdown.
+	Fixed bug where IE 6/7 wouldn't perform caret formatting due to a focus/event bug in IE.
+	Fixed bug where undo/redo wasn't restoring the previous selection correctly.
+	Fixed bug where the caret would become invisible if you resized the editor in latest Gecko.
+	Fixed bug where the class attribute wasn't completely removed in IE 6/7 when the removeClass function was used.
+	Fixed so the matchNode method of the Formatter class returns the matched format rule.
+	Fixed so it's possible to apply formatting to both blocks and as inline elements.
+Version 3.3 (2010-03-10)
+	Fixed bug where backspace on a table on IE would produce an empty tbody and some JS exceptions.
+	Fixed bug where some redundant children wasn't removed properly when applying inline styles to them.
+	Fixed bug where Chrome would produce incorect dialog sizes if the inlinepopups plugin wasn't used.
+	Fixed bug where spans with different classes would get merged if they where siblings to each other.
+	Fixed bug where IE 8 would crash if you used the spellchecker.
+	Fixed bug where Input Method for non western languages didn't work correctly.
+	Fixed bug where the UI would render incorrectly in FF 3.6 on Mac due to a bug n their rendering engine.
+	Fixed bug where WebKit wouldn't scroll down correctly if Shift+Enter was used. Patch contributed by Thomas Andersen.
+Version 3.3rc1 (2010-02-23)
+	Fixed bug with new legacyoutput plugin not working correctly on it's own.
+	Fixed bug some performance issues with removing text formats.
+	Fixed bug where TinyMCE specific attributes wasn't removed properly by remove format.
+	Fixed bug where it wasn't possible to align images within inline elements.
+	Fixed bug where Ctrl+Delete/Backspace would produce an invalid argument exception on IE.
+	Fixed bug where the search/replace logic could produce an infinite loop on IE for reverse searches.
+	Fixed bug where cloning formats in cells didn't work properly on IE.
+	Fixed bug where IE6 would produce a horizontal scroll bar.
+	Fixed so remove jQuery method removes the TinyMCE instance as well as the specified textarea.
+	Fixed so selected rows and cells gets updated using the row/cell properties dialogs.
+Version 3.3b2 (2010-02-04)
+	Fixed bug where sometimes img elements would be removed by split method in DOMUtils.
+	Fixed bug where merging of span elements could occur on bookmark nodes.
+	Fixed bug where classes wasn't properly removed when removeformat was used on IE 6.
+	Fixed bug where multiple calls to an tinyMCE.init with mode set to exact could produce the same unique ID.
+	Fixed bug with the IE selection implementation when it was feeded an document range.
+	Fixed bug where block elements formatting wasn't properly removed by removeformat on all browsers.
+	Fixed bug where selection location was lost if you performed a manual cleanup.
+	Fixed bug where removeformat wouldn't remove span elements within styled block elements.
+	Fixed bug where an error would be thrown if you clicked on the separator lines in menus.
+	Fixed bug with the jQuery plugin adding always adding a querystring value to other resources.
+	Fixed bug where IE would produce an error message if you had an empty editor instance.
+	Fixed bug where Shift+Enter didn't produce br elements on WebKit browsers.
+	Fixed bug where a temporary marker element wasn't removed by the paste plugin.
+	Fixed bug where inserting a table would produce two undo levels instead of one.
+Version 3.3b1 (2010-01-25)
+	Added new text formatting engine. Fixes a lot of browser quirks and adds new possibilities.
+	Added new advlist plugin that enables you to set the formats of list elements.
+	Added new paste plugin logic that enables you to retain style information from Office.
+	Added new autosave plugin logic that automatically saves contents in local storage.
+	Added new valid_styles option. Adds the possibility to restrict styles and their order.
+	Added new theme_advanced_runtime_fontsize option to display the runtime font size in font size select box.
+	Added new jquery plugin version that handles the gzip compressor amongst other things. Contributed by Speednet.
+	Added new $ function to tinymce namespace and editor instances for the jQuery build.
+	Added the possibility to get editors by index as well as name in the tinyMCE.editors collection.
+	Fixed so the contents inside the editor renders in standards mode by default.
+	Fixed bug where it wasn't possible to move the caret on short documents running in standards mode on IE.
+	Fixed bug where the decode method of the DOMUtils class could end up in an endless loop.
+	Fixed bug where it was possible to bypass the paste cleanup on non IE browsers if you clicked while pasting.
+	Fixed bug where some attributes wasn't serialized correctly on IE if wildcard attribute patters where used.
+	Fixed bug where entity decoding was performed on strings that didn't have any valid entities in them.
+	Fixed bugs with the insertNode method of the IE DOMRange implementation. Patch contributed by Scott McNaught.
+	Rewrote the getBookmark/moveToBookmark selection logic to boost performance on larger documents.
+	Rewrote the table plugin to include new cell selection logic and fixed various bugs and issues.
+	Merged the tinyMCE, tinymce and tinymce.EditorManager into the same instance makes more sense.
+	Removed browser setting since the browser support for TinyMCE is not far better than it was when that setting was introduced.
+	Changed the mce_ attribute prefix to the more standard _mce_ prefix. This is similar to browser vendors prefixes.
+	Optimized performance with named entities on Gecko. Regexp replace was executing very slowly probably due to a Gecko bug.
+	Optimized performance of the IE specific selection/range implementation.
+	Removed the safari plugin since we now replaced all text formatting logic to custom code.
+Version 3.2.7 (2009-09-22)
+	Fixed bug where uppercase paragraphs could still produce an invalid DOM tree on IE.
+	Fixed bug where split command didn't work on WebKit since the node serializer needs a real document to work with.
+	Fixed bug where it was impossible in Gecko to place the caret before a table if it was the first one.
+	Fixed bug where linking to urls like ../../ would produce an extra traling slash ../..//.
+	Fixed bug where the template cdate functionality was using an old 2.x API call. Patch contributed by vectorjohn.
+	Fixed bug where urls to the same site but different protocol would be converted when relative_urls where set to false. Patch contributed by Ted Rust.
+	Fixed bug where the paste plugin would remove mceItem prefixed classes.
+	Fixed bug where the paste plugin would sometimes add items in a reverse order on WebKit.
+	Fixed bug where the paste buttons would present an error message on Gecko even if you changed user.js. Patch contributed by Todd (teeaykay).
+	Fixed bug where Opera would crash if you had tables incorrectly placed inside paragraphs.
+	Fixed bug where styles elements wasn't properly processed if you had bad input HTML.
+	Fixed bug where style attributes wasn't properly forced into a specific format.
+	Fixed bug and issues with boolean attributes like checked, nowrap etc.
+	Fixed bug where input elements could override attributes on form elements.
+	Fixed bug where script or style elements could get modified by the DOMUtils processHTML method.
+	Fixed bug where the selected attribute could get lost when force root blocks logic got executed on IE. Patch contributed by Attila Mezei-Horvati.
+	Fixed bug where getAttribs method didn't handle boolean attributes correctly on IE.
+	Fixed so the paste from word dialog is presented if you paste content on an IE with to restrictive security settings.
+	Fixed so the paste_strip_class_attributes option is set to none by default in the paste plugin.
+	Removed default border=0 on tables for the default value of valid_elements.
+Version 3.2.6 (2009-08-19)
+	Added new wordcount plugin, this will display the number of typed words as you write. Contributed by Andrew Ozz.
+	Added new getNext and getPrev methods to DOM utils. These will return the first matching sibling.
+	Fixed bug where it was impossible to place the caret after a table on Gecko. It will now add a paragraph after tables.
+	Fixed bug where inline dialogs would fail if used in a window opened using a showModalDialog. Patch contributed by Derek Britt.
+	Fixed bug where IE could sometimes render a unknown runtime error on invalid input HTML.
+	Fixed bug where some incorrectly placed tables wouldn't be moved outside the paragraphs on IE.
+	Fixed bug where uppercase script/style element wouldn't be handled correctly and converted to valid lowercase.
+	Fixed bug where some WebKit versions on Mac OS X would produce issues with hidden select fields.
+	Fixed bug where the media plugin would fail on WebKit since the node wasn't properly imported to the right document.
+	Fixed bug where absolute URLs for the TinyMCE script using a base href element would cause loading problems in IE 6/7.
+	Fixed bug where pasting using the paste plugin wasn't possible on IE with to restrictive security settings.
+	Fixed bug where pasting of whitespace was impossible using the new custom paste method.
+	Fixed bug where pasting on some WebKit browsers would not work if you pasted specific contents due to a WebKit bug.
+	Fixed bug where doctypes with multiple lines would not be parsed correctly by the fullpage plugin. Patch contributed by Colin.
+	Fixed bug where the autoresize plugin would break the fullscreen functionality.
+	Fixed bug where tables would be chopped up running on IE using invalid contents and pasting paragraphs into a cell.
+	Fixed bug where the each method of jQuery build didn't iterate styleSheets. We now use the TinyMCE API one instead.
+	Fixed bug where auto switching to paragraphs after headers some times failed in Gecko.	
+	Fixed so all editor options gets passed to the Serializer class. Patch contributed by Jasper Mattsson.
+	Fixed so script/style blocks isn't wrapped in paragraphs as other inline elements.
+	Fixed so the XHR requests sends the X-Requested-With HTTP header.
+	Fixed so the data url scheme is handled in the tinymce.util.URI class.
+	Changed inline documentation to use moxiedoc style comments.
+	Removed the compat2x plugin people should have upgraded to the 3.x API by now. 3.0 was released more then a year ago.
+	Re-added Gecko specific message for users who doesn't understand the security concept regarding paste.
+Version 3.2.5 (2009-06-29)
+	Added new jQuery plugin for the jQuery specific package. This enables you to more easily load and use TinyMCE.
+	Added new autoresize plugin contributed by Peter Dekkers. This plugin will auto resize the editor to the size of the contents.
+	Fixed so all packages have the same directory structure. Previous releases had a different structure for the production package.
+	Fixed so the paste from word dialog forces the contents to be processed as word contents even if it's not.
+	Fixed so the jQuery build adapter build works. It's currently only excluding Sizzle.
+	Fixed so noscript element contents is retained during the editing process.
+	Fixed bug where the getBookmark method would need a "simple" string input when the documented way is a boolean.
+	Fixed bug where invalid contents could break the fix_table_elements logic.
+	Fixed bug where Sizzle specific attributes would be serialized if the valid_elements was set to *[*].
+	Fixed bug where IE would produce an error if you specified a relative content_css and opened the paste dialog.
+	Fixed bug where pasting images on IE would produce broken images if they came from an external site.
+	Fixed bug where memory was leaked if you add/remove controls dynamically. Some event handlers wasn't removed properly.
+	Fixed bug where domain relaxing wasn't treated correctly if you added it after the TinyMCE script element.
+	Fixed bug where the activeEditor wasn't set to null if the last editor instance was removed.
+	Fixed bug where IE was leaking memory on the onbeforeunload event due to some recently introduced logic. Patch contributed by Options.
+	Fixed bug where inserting tables in Safari 4 didn't work due to a new WebKit bug where some element names are reserved.
+	Fixed bug where URLs having a :// value in the query string would make it absolute regardless of URL settings.
+	Fixed the WebKit specific bug where DOM Ranges would fail if the node wasn't attached to something in a different way.
+	Removed the auto_resize option and the resizeToContent method from the tinymce.Editor class. Use the new autoresize plugin instead.
+Version 3.2.4.1 (2009-05-25)
+	Fixed bug where Gecko browsers would produce an extra space after for example strong when loaded from sub domains.
+	Fixed bug where script elements would be removed if they where placed inside a paragraph element.
+	Fixed bug where IE 8 would produce 1 item remaining when loading CSS files dynamically with an empty cache.
+	Fixed bug where bound events would be removed from other editor instances if a specific one was removed.
+	Fixed various bugs and issues with script and style elements inside the editor.
+	Fixed so all script contents gets wrapped in CDATA sections so that they can be parsed using a XML parser.
+	Fixed so it's impossible for elements marked as closed to have child nodes rendered in output.
+Version 3.2.4 (2009-05-21)
+	Added new paste_remove_styles/paste_remove_styles_if_webkit option to paste plugin concept contributed by Hadrien Gardeur.
+	Added new functionality to paste plugin contributed by Scott Eade aka monkeybrain.
+	Added new paste_block_drop option to the paste plugin this is disabled by default and will block any drag/drop event.
+	Added new bind/unbind methods to DOMUtils these works like Event.add/Event.remove but is easier to access.
+	Added new paste_dialog_width/paste_dialog_height options to paste pluign. Enables you to change the dialog sizes.
+	Fixed bug on IE 8 where it would sometimes produce a "1 item remaining" status message that would never finish.
+	Fixed bug on Safari 4 beta that would produce DOM Range exceptions on the DOMUtils split method since the browser has a bug.
+	Fixed bug where the paste plugin could accidentally think that some word sentences was supposed to be list elements.
+	Fixed bug where paste plugin would produce one extra empty undo level on some browsers.
+	Fixed bug where spans wasn't produced correctly on new line when the keep_styles option was enabled.
+	Fixed bug where the caret would be placed at the beginning of contents in IE 8 if you selected colors from the color pickers.
+	Fixed so the Event class is a normal class instead of a static one. The tinymce.dom.Event is now a global instance of that class.
+	Fixed so internal events for instances gets removed when the DOMUtils instance is removed.
+	Fixed so preventDefault and stopPropagation methods can be used on the event object in all browsers.
+Version 3.2.3.1 (2009-05-05)
+	Fixed bug where paragraphs containing form elements such as input or textarea would be removed.
+	Fixed bug where some IE versions would produce a wrapper function for events attributes.
+	Fixed bug where table cell contents could be removed if you pressed return/enter at the end of the cell contents.
+	Fixed bug where the paste plugin would remove a extra character if the selection range was collapsed.
+	Fixed bug where creating tables with % width wouldn't be handled correctly on WebKit browsers.
+Version 3.2.3 (2009-04-23)
+	Added new paste plugin logic. This new version will autodetect Word contents and clean it up.
+	Added a optional root element argument to getPos so you can tell it where to stop the calculation.
+	Added new DOM ready logic to remove the usage of document.write. We now use basically the same method as jQuery.
+	Fixed bug where WebKit browsers would fail when selecting all contents in the area using Ctrl+A.
+	Fixed bug where IE would produce paragraphs with empty inline style elements.
+	Fixed bug where WebKit browsers would fail when inserting tables with a non pixel width.
+	Fixed bug where block elements could get a redundant br element at the end of the element.
+	Fixed bug where the tabfocus plugin only worked with a single editor instance on page.
+	Fixed bug where IE 8 was loosing caret position if the selection was collapsed and a menu was clicked.
+	Fixed bug with application/xhtml+xml mode where menus wasn't working properly.
+	Fixed bug where the onstop workaround fix for IE would produce errors in an ASP update panel.
+	Fixed bug where the submit function override could produce errors if executed in the wrong scope.
+	Fixed bug where the area element wasn't closed by a short ending.
+	Fixed various number issues in the style plugins properties dialog. Contributed by datpaulchen.
+	Fixed issues with size suffix values in the style plugin dialog.
+	Fixed issue where hasDuplicate variable would leak out to the global space due to a bug in the Sizzle engine.
+	Fixed issue where the paste event would fire a dialog warning on IE since we extracted the text contents.
+	Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
+Version 3.2.2.3 (2009-03-26)
+	Fixed regression bug with the getPos method, it would return invalid if the view port was to small.
+Version 3.2.2.2 (2009-03-25)
+	Fixed so the DOMUtils getPos method can be used cross documents if needed.
+	Fixed bug where undo/redo wasn't working correctly in Gecko browsers.
+Version 3.2.2.1 (2009-03-19)
+	Added support for tel: URL prefixes. Even though this doesn't match any official RFC.
+	Fixed so the select method of the Selection class selects the first best suitable contents.
+	Fixed bug where the regexps for www. prefixes for link and advlink dialogs would match wwwX.

+	Fixed bug where editors wasn't converted in application/xhtml+xml mode due to an issue with Sizzle.
+	Fixed bug where alignment would fail if multiple lines where selected.
+	Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
+Version 3.2.2 (2009-03-05)
+	Added new CSS selector engine. Sizzle the same one that jQuery and other libraries are using.
+	Added new is and getParents methods to the DOMUtils class. These use the new Sizzle engine to select elements.
+	Added new removeformat_selector option, enables you to specify a CSS selector pattern of elements to remove when using removeformat.
+	Fixed so the getParent method can take CSS expressions when selecting it's parents.
+	Added new ant based build process, includes a new javabased preprocessor and a yuicompressor ant task.
+	Moved the tab_focus logic into a plugin called tabfocus, so the old tab_focus option has been removed from the core.
+	Replaced the TinyMCE custom unit testing framework with Qunit and rewrote all tests to match the new logic.
+	Moved the examples/testcases to a root directory called tests since it now includes slickspeed.
+	Fixed bug where nbsp wasn't replaced correctly in ForceBlocks.js. Patch contributed by thorn.
+	Fixed bug where an dom exception would be thrown in Gecko when the theme_advanced_path path was set to false under xml application mode.
+	Fixed bug where it was impossible to get out of a link at the end of a block element in Gecko.
+	Fixed bug where the latest WebKit nightly would fail when changing font size and font family.
+	Fixed bug where the latest WebKit nightly would fail when opening dialogs due to changes to the arguments object.
+	Fixed bug where paragraphs wasn't added to elements positioned absolute using classes.
+	Fixed bug where font size values with dot's like 1.4em would produce a class instead of the style value.
+	Fixed bug where IE 8 would return an incorrect position for elements.
+	Fixed bug where IE 8 would render colorpicker/filepicker icons incorrectly.
+	Fixed bug where trailing slashes for directories in URLs would be removed.
+	Fixed bug where autostart and other boolean values in the media dialog wouldn't be stored/parsed correctly.
+	Fixed bug where the repaint call for the media plugin wouldn't be executed due to a typo in the source.
+	Fixed bug where id attribute of object elements wasn't kept intact by the media plugin.
+	Fixed bug where preview of embeded elements when the media_use_script option was used would fail.
+	Fixed bug where inlinepopups could be rendered at an incorrect location on IE 6 while dragging.
+	Fixed bug where the blocker shim could be placed at an incorrect location on IE 6.
+	Fixed bug where the multiple and size attributes of select elements would produce incorrect values while running in IE.
+	Fixed bug where IE would loose the caret position is you selected a color from the color drop down.
+	Fixed bug where remove format wouldn't work on IE since it couldn't remove span elements that had style information.
+	Fixed bug where Opera was removing links when removing formatting from selected contents.
+	Fixed bug where paragraphs could be produced inside non positional elements styled with the CSS position value of static.
+	Fixed bug where removeformat wouldn't work if you selected part of a span in IE.
+	Fixed bug where media plugin didn't retain the style attribute on embed/object elements.
+	Fixed bug where auto focus on empty editor instances could produce strange results if you inserted an image into it.
+	Fixed bug where &nbsp; characters would be removed in FF when inserted with the mceInsertContent or selection.setContent methods.
+	Fixed bug where warning message of missing paste support wasn't displayed on WebKit browsers.
+	Fixed bug where anchor links could include other links. The selected range is now unlinked before adding news links to it.
+	Fixed memory leak when TinyMCE was used with prototype. Patch contributed by James Ots.
+	Fixed so the non documented fullpage_hide_in_source_view option for the fullpage plugin works again in the 3.x branch.
+	Fixed so tables doesn't get inserted into paragraphs by default since it's not W3C valid. Can be disabled by using the fix_table_elements option.
+	Fixed so the source view dialog sets a source_view state to the event object. Enables plugins to intercept the source view mode.
+	Fixed various validation issues with the html dialogs and pages.
+	Removed ask mode option since there is way better ways of doing this now. Use the add/remove control methods instead.
+	Removed logic for compatibility with Safari 2.x, this browser is no longer supported since no one is using it.
+	Removed the auto domain relaxing feature. If loading scripts cross sub domains it's better to specify the document.domain by hand.
+Version 3.2.1.1 (2008-11-27)

+	Fixed font style formatting compatibility issue with Adobe Air.
+	Fixed so legacy font elements get converted into spans even if cleanup_on_startup isn't enabled.
+	Fixed bug where pre elements could be incorrectly modified by an IE bug workaround. Patch contributed by hu vime.
+	Fixed bug where input elements inside inlinepopups wasn't editable in Firefox 2.
+	Fixed bug where the xhtmlxtras plugin wasn't replacing attribute values correctly.
+	Fixed bug where menu buttons in skin variants would look strange due to IE 8 fixes.
+	Fixed bug where WebKit browsers would on backspace take you back to the previous page if the editor was empty.
+	Fixed bug where DOMUtils decode method wouldn't handle strings larger than 4096kb due to node chunking.
+	Fixed bug where meta key wasn't handled as ctrl key on Mac OS X for custom keyboard short cuts.
+	Fixed bug where init event would get fired twice on WebKit on Mac OS X.
+Version 3.2.1 (2008-11-04)
+	Added support for custom icon image for drop menus. Use icon_src to set a custom image directly.
+	Added new media_strict option to media plugin. Enables you to control if the flash embed is strict or not. Enabled by default.
+	Fixed so the editors script files gets dynamically loaded without using XHR or eval.
+	Fixed so the media plugin outputs valid XHTML object elements for Flash movies. Can be disabled with the media_strict option.
+	Fixed so dynamic loading doesn't require eval calls on non IE browsers for better Air support.
+	Fixed bug where the editor wasn't treated as empty if the remaining paragraph had attributes.
+	Fixed bug where id's of elements was removed ones they got wrapped in paragraphs. Patch contributed by ChronoZ.
+	Fixed bug where WebKit browsers where placing list elements inside paragraph elements.
+	Fixed bug where inserting images or links would produce absolute urls on WebKit browsers.
+	Fixed bug where values for checked, readonly, disabled and selected attributes was incorrect on IE.
+	Fixed bug where positive values for checked, readonly, disabled and selected attributes wasn't forced to valid values.
+	Fixed bug where selecting the first option in a native select box would produce an undefined error.
+	Fixed bug where tabindex 32768 could be outputted on IE if element attributes where cloned.
+	Fixed bug where the media dialogs preview window would display incorrect contents due to duplicate clsid prefixes.
+	Fixed bug where non pixel or percent heights for textarea elements would produce errors on IE.
+	Fixed bug where cdata sections in script elements wasn't handled correctly.
+	Fixed bug where nowrap of table cells would produce a 65535 value output.
+	Fixed bug where media plugin would produce an error if you selected the first item in the items list.
+	Fixed bug where media plugin would modify links with the item _value in them.
+	Fixed so table width/height is better forced if inline_styles is enabled. Patch contributed by daKmoR.
+	Fixed css for IE 8 such as opacity and other rendering quirks.
+Version 3.2.0.2 (2008-10-02)
+	Fixed bug where the SelectBox and NativeSelectBox wasn't updated correctly if undefined was passed to them.
+	Fixed bug where the style dropdown wasn't correctly changed back to it's original state when element had no class.
+	Fixed bug where multiple pending font styles wasn't handled correctly.
+	Fixed so you can disable all auto css loading for dialogs by setting the popups_css option to false.
+Version 3.2.0.1 (2008-09-17)
+	Fixed bug where font sizes and faces wouldn't be changed correctly when there was a parent with a different style.
+	Fixed bug where adding fonts to the same selection would produce redundant spans.
+Version 3.2 (2008-09-11)
+	Added new text style support, it will now use span elements internally instead of font elements.
+	Added new improved support for the theme_advanced_font_sizes option, check the Wiki for details.
+	Added new keep_style setting that maintains the text style on return/enter on non IE browsers, enabled by default.
+	Added new onBeforeSetContent/onBeforeGetContent/onSetContent/onGetContent events to the Selection class.
+	Added new selectByIndex method to ListBox class. This enables you to select list items by an index instead of a value.
+	Added new possibility to the select method of the ListBox class. This can now have a selector function as it's value argument.
+	Added new possibility to skip the loading of popups css by setting the feature popup_css to the value false.
+	Added new possibility to skip translation of popups by setting the translate_i18n feature to false.
+	Added new element_format option enables you to produce HTML element endings instead of XHTML. But we are still in the XHTML is better camp.
+	Added missing allowfullscreen and quality options for flash elements, this will now get correctly stored.
+	Fixed bug where table cell dialog didn't close properly unless the accessibility_warnings option was set to false.
+	Fixed bug where the modal dialog blocker element for inlinepopups wasn't placed at a correct location if the page had scroll.
+	Fixed bug where non inline dialogs didn't close correctly if the inlinepopups plugin was used.
+	Fixed bug where non inline dialogs could make the modal dialog blocker to work incorrectly.
+	Fixed bug where style select wasn't populated correctly if you pressed the arrow. Patch by Hari Karam Singh.
+	Fixed bug where toggling the fullscreen mode didn't restore scrollbars on IE when the editor was inside a frame. Patch by Jacob Barrett.
+	Fixed bug where inserting flash contents using the template plugin didn't work correctly.
+	Fixed bug where inserting flash contents using the selection.setContent or mceInsertContent command didn't work correctly.
+	Fixed bug where IE would produce an exception if a comment started with -.
+	Fixed bug where the blockquote button would wrap lists incorrectly on non IE browsers.
+	Fixed bug where Opera would display BR elements in the element path.
+	Fixed bug where xhtmlxtras didn't insert elements correctly on IE.
+	Fixed bug where the buttons wasn't activated correctly in the xhtmlxtras plugin.
+	Fixed bug where adding an object as the style attribute for the dom setAttribs method wouldn't work.
+	Fixed bug where the background color would bleed out to parent container element in Gecko.
+	Fixed bug where the insert column actions for tables would fail if you did it in a thead or tfoot. Patch contributed by T Andersen (tan73).
+	Fixed bug where event blocker element wasn't positioned correctly for the inlinepopups plugin.
+	Fixed bug where pasting from Office 2007 would produce an odd comment in the contents.
+	Fixed bug where the paste as plain text could remove an extra character. Patch contributed by Speednet.
+	Fixed bug where some characters where missing for the paste_replace_list option. Patch contributed by Speednet.
+	Fixed bug where removing non existing editor instances by the mceRemoveControl command would produce an error.
+	Fixed bug where meta elements with the name description would produce errors in IE.
+	Fixed bug where color and background colors wouldn't be updated properly.
+	Fixed bug where the createMenuButton of tinymce.ControlManager didn't implement the last class argument.
+	Fixed bug where the editor_css option was relative from the TinyMCE installation directory not the current page.
+	Fixed bug where elements wouldn't be padded if the element contained bogus br elements. For example TD elements.
+	Fixed bug where parsing of <body > in fullpage plugin would produce an error.
+	Fixed bug where relative urls with just ./ would become an empty string.
+	Fixed bug where outdent button would be disabled if inline_styles where set to false.
+	Fixed bug where replace with an empty search string would produce an error on IE.
+	Fixed bug where restoring the overflow state of the body in fullscreen plugin running on IE would produce vertical scrollbars.
+	Fixed bug where pressing return/enter in list items would sometimes move the caret the to top of the content area in FF.
+	Fixed bug where the style listbox wouldn't be updated correctly if you used the use_native_selects option.
+	Fixed bug where WebKit browsers would produce a div element when ending list elements using return.
+	Fixed so translation of popup contents only occurs if it's needed.
+	Optimized the URI object in regards or converting absolute URIs to relative URIs.
+Version 3.1.1 (2008-08-18)
+	Added new getSize method to DOMUtils it will return the dimensions only of an element.
+	Added new alert/confirm methods to the tinyMCEPopup class to prevent focus problems and also to shorten method calls.
+	Added new plugin_preview_inline option to preview plugin to enable/disable native/inline dialogs.
+	Added new readonly option. If this is set the editor will only display the contents for the user.
+	Added missing tabindex and accesskey to input elements in the default valid_elements setup.
+	Updated firebug lite to 1.2, to enable it use the tiny_mce_dev.js?debug=1 on the development package.
+	Fixed so the preview dialog in the preview plugin uses inline dialogs/popups.
+	Fixed so CDATA sections remains intact through the serialization process of the DOM tree.
+	Fixed various issues with the getAttrib command. It will now return more correct values.
+	Fixed bug where the embed element wasn't properly parsed in the media plugin it now supports 3 formats.
+	Fixed bug where the noshade attribute was serialized incorrectly on IE.
+	Fixed bug where editing an existing link element didn't force it relative.
+	Fixed bug where image link creation fails on Safari if the image is aligned.
+	Fixed bug where it was possible to scroll the fullscreen mode in Opera 9.50.
+	Fixed bug where removal of center image alignment would fail. Patch contributed by Andrew Ozz.
+	Fixed bug where inlinedialogs didn't work properly if the doctype was incorrect in IE.
+	Fixed bug where cross domain loading didn't work correctly in Opera 9.50.
+	Fixed bug where breaking huge text blocks with return/enter key would scroll to end of block.
+	Fixed bug where replace button kept inserting the replacement text even if there is no more matches.
+	Fixed bug with fullpage plugin where value wasn't set correctly. Patch contributed by Pascal Chantelois.
+	Fixed bug where the dom utils setAttrib method call could produce an exception if the input was null/false.
+	Fixed bug where pressing backspace would sometimes remove one extra character in Gecko browsers.
+	Fixed bug where the native confirm/alert boxes would move focus to parent document if fired in dialogs.
+	Fixed bug where Opera 9.50 was telling you that the selection is collapsed even when it isn't.
+	Fixed bug where mceInsertContent would break up existing elements in Opera and Gecko.
+	Fixed bug where TinyMCE fails to detect some keyboard combos on Mac, contributed by MattyRob.
+	Fixed bug where replace all didn't move the caret to beginning of text before searching.
+	Fixed bug where the oninit callback wasn't executed correctly when the strict_loading_mode option was used, thanks goes to Nicholas Oxhoej.
+	Fixed bug where a access denied exception was thrown if some other script specified document.domain before loading TinyMCE.
+	Fixed so setting language to empty string will skip language loading if translations are made by some backend.
+	Fixed so dialog_type is automatically modal if you use the inlinepopups plugin use dialog_type : "window" to re-enable the old behavior.
+Version 3.1.0.1 (2008-06-18)
+	Fixed bug where the Opera line break fix didn't work correctly on Mac OS X and Unix.
+	Fixed bug where IE was producing the default value the maxlength attribute of input elements.
+Version 3.1.0 (2008-06-17)
+	Fixed bug where the paste as text didn't work correctly it encoded produced paragraphs and br elements.
+	Fixed bug where embed element in XHTML style didn't work correctly in the media plugin.
+	Fixed bug where style elements was forced empty in IE. The will now be wrapped in a comment just like script elements.
+	Fixed bug where some script elements wrapped in CDATA could fail to be serialized correctly.
+	Fixed bug where FF 3 produced -moz- internal styles in some style attributes.
+	Fixed bug where query strings and external URLs didn't work correctly in style attributes.
+	Fixed bug where shape attribute of area elements got serialized as rect regardless of it's initial value in IE 6.
+	Fixed bug where selection of elements inside layers would fail in IE since focus was moved to the document body.
+	Fixed bug where pressing enter/return in an editable select box would produce an __mce_add_custom__ class value.
+	Fixed bug where changing font size of text placed inside a colored text chunk would remove the parent node.
+	Fixed bug where Opera 9.5 final produced a strange line break behavior due to a workaround for previous Opera versions.
+	Fixed bug where text/background color would produce a strange focus problem when you tried to click on the body in IE.
+	Fixed issue where selecting the title of an listbox equals the old 2.x behavior of changing the value to an empty string.
+	Fixed issue where it was common for the media plugin to break if the _value attribute wasn't added for the param element.
+	Fixed issue where the wrong parent editor instance might be updated if you use fullscreen mode in an incorrect way.
+	Fixed issue where Safari was producing a warning about the base element not being closed correctly.
+	Removed redundant form element name matching from regexp in the DOMUtils class.
+Version 3.0.9 (2008-06-02)
+	Added new contextmenu_offset_x/contextmenu_offset_y options for the contextmenu plugin.
+	Added cite attribute to the default rule for the blockquote element.
+	Added support for using arrow keys for selection of items in listboxes.
+	Added support for using arrow keys for selection of items in dropmenus.
+	Fixed bug where blockformat change on elements with BR inside them didn't change correctly on Firefox.
+	Fixed bug where removing table rows inside thead or tfoot would remove the whole table if it was the last one.
+	Fixed bug where XHR synchronous mode didn't execute the callback handlers synchronously.
+	Fixed bug where setting border to 0 didn't add border: 0 to the style attribute when using the advimage dialog.
+	Fixed bug where the selection of images and table cells didn't work correctly when the editor is placed in a frame and running on IE.
+	Fixed bug where the store/restore of a selection didn't work correctly in non IE browsers.
+	Fixed bug where only the first element would be invalid for the invalid_elements option.
+	Fixed bug where paste as plain text didn't encode the characters correctly when they where inserted.
+	Fixed bug where HTML source window couldn't be maximized on Gecko when the maximizable feature was enabled.
+	Fixed bug where color selection using the color picker could produce exception in IE.
+	Fixed bug where font size changes could produce produce extra redundant elements.
+	Fixed bug where IE could produce unknown runtime error if you replaced a image with another image from a separate frame.
+	Fixed bug where the domLoaded state for the Event class wasn't set correctly if the editor was loaded dynamically using the gzip compressor.
+	Fixed bug where handling of the base element for a page would produce incorrect urls. Based on a patch contributed by John LeSueur.
+	Fixed bug where table constraint alert boxes was presented with an empty value and wasn't the skinned inline ones.
+	Fixed bug where the onChange event wasn't fired when the form was submitted. It's now also triggered when the save method is called.
+	Fixed bug where encoding set to xml didn't work as expected. It now encodes the contents into XML entities.
+	Fixed bug where numrows didn't work correctly for the merge cells dialog of the table plugin.
+	Fixed bug where the onGetContent event was fired even when the no_events flag was set.
+	Fixed bug where the preview panels for the advimage and the media plugin could overflow on Safari and FF 3.
+	Fixed bug where the editing and removal of abbr elements using the xhtmlxtras plugin working correctly on IE.
+	Fixed bug where save button in the save plugin didn't work correctly on IE.
+	Fixed bug where dragging layers didn't work as expected since it would snap back to it's original location if you saved.
+	Fixed bug where the description of the template plugin dialog wasn't updated correctly.
+	Fixed bug where the values for frame and rules in the table dialogs where swapped.
+	Fixed bug where the elements like ins, del, cite, acronym and abbr didn't have the default editing style as the old 2.x branch.
+	Fixed bug where ask mode would lock the focused textarea if you pressed cancel in the confirm dialog on FF 3.
+	Fixed bug where ask mode would produce contents for empty textareas if you reloaded the page.
+	Fixed so the onGetContent event gets the full pass through object just like the other events.
+	Fixed so attributes for block elements remains the same when you change format of a element.
+Version 3.0.8 (2008-04-30)
+	Fixed bug where IE would produce an error if textareas without names where converted.
+	Fixed bug where editor wasn't forced empty when there was only a single br or empty paragraph left.
+	Fixed bug where IE would produce an warning message if object elements where produced in the media plugins preview running on https.
+	Fixed bug where new addVer function didn't handle hash items correctly. Patch contributed by Mirek Burkon.
+	Fixed bug where font_size_style_values option wasn't applied correctly to fonts inside the editor.
+	Fixed bug where image selection could be lost if a image was edited using context menu on IE.
+	Fixed bug where style values wasn't updated properly due to an invalid regexp.
+	Fixed bug where IE 6 where displaying warning message about insecure items when inserting an image while using https. Patch contributed by Norifumi Sunaoka.
+	Fixed bug where IE was producing an auto save message if you selected a color from the color split button.
+	Fixed bug where backspace sometimes would move the caret to the end of the previous block in Gecko.
+	Fixed bug where the rowlayout manager didn't work as described in the documentation.
+	Fixed bug where the default options for the fullpage plugin wasn't applied correctly.
+	Fixed bug where selection would jump one character if you applied a styles to a words in non IE browsers.
+	Fixed bug where undo levels wasn't added correctly if you went back in undo history and added a new event.
+	Fixed bug where font size dropdown didn't mark the selected size in IE.
+	Fixed bug where the size of the editor was determined using clientWidth instead of offsetWidth.
+	Fixed so the onchange event doesn't fire on the initial undo level, it will also fire when the editor is blurred.
+	Fixed so the advhr plugin produces XHTML valid output instead of non standard attributes.
+	Fixed so blockquote gets converted into [quote] in when the bbcode plugin is enabled.
+	Fixed so theme_advanced_font_sizes can be named for example Font 1=1, Font 2=2 etc.
+	Fixed so editor_selector/editor_deselector can be regexps. By default only strings are allowed not part regexps like before.
+	Fixed so that the version suffix is optional. It still requires the build process so you need to export it manually.
+	Fixed so it's possible to tab to table cells in non Gecko browsers and also produce new rows if you tab at the end of a table. Contributed by Josh Peek.
+Version 3.0.7 (2008-04-14)
+	Added new version suffix to all internal GET requests to make sure that the users cache gets cleared correctly.
+	Fixed issue with isDirty returning true event if it wasn't dirty on IE due to changes in tables during initialization.
+	Fixed memory leak in IE where if a page was unloaded before all images on the page was loaded it would leak.
+	Fixed bug in IE where underline and strikethrough could produce an exception error message.
+	Fixed bug where inserting paragraphs in totally empty table cells would produce odd effects.
+	Fixed bug where layer style data wasn't updated correctly due to some performance enhancements with the DOM serializer.
+	Fixed bug where it would convert the wrong element if there was two elements with the same name and id on the page.
+	Fixed bug where it was possible to add style information to the body element using the style plugin.
+	Fixed bug where Gecko would add an extra undo level some times due to the blur event.
+	Fixed bug where the underline icon would get active if the caret was inside a link element.

+	Fixed bug where forecolorpicker and backcolorpicker buttons where rendered incorrectly when the o2k7 skin was used.
+	Fixed bug where comment couldn't contain -- since it's invalid markup. It will now at least not break on those invalid comments.
+	Fixed bug where apos wasn't handled correctly in IE. It will now convert apos to &#39; on IE since that browser doesn't support that entity.
+	Fixed bug where entities wasn't encoded correctly inside pre elements since they where protected from whitespace removal.
+	Fixed bug where color split buttons where rendered incorrectly on IE6 when using the non default theme.
+	Fixed so caret is placed after links ones they are created, to improve usability of the editor.
+	Fixed so you can select tables by clicking on it's borders in non IE browsers to normalize the behavior.
+	Fixed so the menus can be toggled by clicking once more on the icon in listboxes, menubuttons and splitbuttons based on code contributed by Josh Peek.
+	Fixed so buttons can be labeled, currently only works with the default skin, so it's kind of experimental. Patch contributed by Daniel Insley.
+	Fixed so forecolorpicker and backcolorpicker remembers the last selected color. Patch contributed by Shane Tomlinson.
+	Fixed so that you can only execute the mceAddEditor command once for the same instance name.
+	Fixed so command functions added with addCommand can pass though the call to default handles if it returns true.
+Version 3.0.6.2 (2008-04-07)
+	Fixed bug where empty tables couldn't be edited correctly on non IE browsers if they where loaded into the editor.
+	Fixed bug where it was impossible to resize layers correctly in IE since it thought it was an image.
+	Fixed bug where an editor instance was stealing focus in IE resulting in a scroll to the editor on page reloads.
+	Fixed bug where Safari was crashing on Mac OS X if you closed dialogs using the Esc key.
+Version 3.0.6.1 (2008-04-04)
+	Added support for the missing mceAddFrameControl command. The input for this command has changed so consult the Wiki.
+	Fixed bug where sub menus for the drop menus would leave an empty element behind.
+	Fixed memory leak in IE if the editor was placed in a frame or iframe.
+Version 3.0.6 (2008-04-03)
+	Added elements to the default value of valid_elements option. It now contains all XHTML strict elements and a few transitional.
+	Added more accessibility fixes, it's now possible to navigate and close list boxes and split button menus with the keyboard.
+	Added missing getInfo method to the contextmenu and safari plugin, this caused problems for the Drupal module.
+	Added new inlinepopups_zindex option to the inlinepopups plugin so that you can configure the default start z-index.
+	Added new setControlType method to the tinymce.ControlManager class. This method enables you to override the default classes.
+	Added ability to specific an optional control class to use instead of the default one for the ControlManager methods. Based on concept by Josh Peek.
+	Fixed bug where attribute rules for the DOM Serializer couldn't contain - or _ characters in their names.
+	Fixed bug where inlinepopups event blocker and modal dialog blocker elements produced vertical scrollbars.
+	Fixed bug where there was a rendering issue with quirks mode in Safari moving the resize handle to an incorrect position.
+	Fixed bug with forecolor/backcolor controls on IE. Sometimes elements positioned relative will generate display errors.
+	Fixed bug where a p2 was leaking out in the global name space when you selected a color from the forecolor/backcolor controls.
+	Fixed bug where empty paragraphs didn't work as expected in browsers other than IE.
+	Fixed bug where the load method of the tinymce.dom.ScriptLoader didn't check if the file was already loaded.
+	Fixed bug where the load method for the PluginManager and ThemeManager didn't check if a plugin/theme by a specific name was all ready loaded.
+	Fixed bug where the theme_advanced_link_targets option didn't work correctly with the advanced themes link dialog. Patch contributed by Arnold B.
+	Fixed bug where the style command would merge classes into empty span elements.
+	Fixed bug where the style command would remove empty span elements outside the current selection.
+	Fixed bug where the fix for the Safari backspace bug removed all editor contents if it was filled with empty paragraphs.
+	Fixed bug where alert and confirm boxes opened by the inlinepopups plugin would produce an exception if domain relaxing was used.
+	Fixed bug where Safari was adding style attributes to all elements when you paste them into the editor.
+	Fixed bug where the spellchecker menus was visually incorrect since the space for the non existing icon was still there.
+	Fixed bug where remove_linebreaks option didn't remove line breaks inside the text contents of a element.
+	Fixed bug where Safari 3.1 was introducing _mc_tmp into paragraphs due to the new querySelectorAll and a TinyMCE specific workaround.
+	Fixed bug where getParam method in the Editor class was returning incorrect objects and would mess up the font drop down. Patch contributed by speednet.
+	Fixed bug where the table dialog would produce an exception in IE when you edited tables since it tried to place focus in a disabled field.
+	Fixed bug where class attribute on some span elements was removed on cleanup.
+	Fixed bug where resizing the editor in IE could produce an exception if the editor width/height got to be a negative value.
+	Fixed bug where wmv files wouldn't play since the src param was used instead of the url param.
+	Fixed bug where br elements would be added here and there in Gecko. Geckos internal _moz_dirty br elements where serialized as well.
+	Fixed bug where editing named anchors would produce two anchors instead of one updated one.
+	Fixed bug where arrow and function keys didn't work when an noneditable element was focused within the editor.
+	Fixed bug where the dispatcher could produce an exception if the listener list was altered inside an event callback.
+	Fixed bug where it was impossible to totally empty the editor contents on Safari due to an mistreatment of nbsp as whitespace. Patch contributed by Andrew Ozz.
+	Fixed bug where TinyMCE would not convert textareas with the same name attribute value. It will now generate an unique id for those textareas.
+	Fixed bug where backspace/delete key was deleting td elements inside tables while running on Gecko.
+	Fixed bug where Firefox 3.0b4 and Opera 9.26 where scrolling to the top of document when pressing return/enter.
+	Fixed bug where the template plugin wasn't just inserting the mceTmpl tagged element.
+	Fixed bug where the alert method of the default WindowManager implementation didn't translate input language strings like the inlinepopups dialog does.
+	Fixed bugs with the backspace behavior in Gecko. The caret was placed on incorrect locations in the DOM sometimes.
+	Fixed so advimage dialog and table dialogs has support for editable select boxes for the class value.
+	Fixed so the media, pagebreak and spellchecker doesn't load it's default content.css file if the content_css option is set to false.
+	Fixed so the paste_use_dialog option works again it's enabled by default but can be disabled on IE. Patch contributed by Speednet.
+	Fixed so that the fullscreen editor is focused when switching fullscreen editing on.
+	Fixed so it's possible to edit images and links inside tables using the context menu.
+	Fixed so table dialogs and the advanced image dialog doesn't loose selection in IE if the dialogs where navigated/submitted with the keyboard.
+	Fixed so the theme_advanced_blockformats options can have named items for example title 1=h1;title 2=h2.
+	Fixed so it's possible to add a custom editor_css for the simple theme.
+	Fixed quirks with directionality rtl, patch contributed by Andrew Ozz.
+	Fixed so the inlinepopups default start zIndex is 300000.
+	Fixed typo in media plugin Shockware is now replaced with Shockwave.
+	Fixed psuedo memory leak in IE with the replaceChild method inside the DOMUtils.replace method.
+	Fixed so memory is released when an editor instance is removed from page.
+	Optimized the color split button menus so that they use less event handlers.
+	Removed the util/mclayer.js file since it's no longer used by any of the TinyMCE dialogs and is considered deprecated.
+Version 3.0.5 (2008-03-12)
+	Added new black skin variant to the o2k7 skin contributed by Stefan Moonen.
+	Added new explode method to the tinymce core class. This does a split but removed whitespace it also defaults to a , delimiter.
+	Added new detection logic for IE 8 standards mode into the DOMUtils class strMode can now be checked to see if that mode is on/off.
+	Added new noscale option value for the scale select box for Flash in the media plugin.
+	Fixed bug where the menu for the ColorSplitButton wasn't removed when the editor was removed.
+	Fixed bug where font colors couldn't be edited correctly since the style of the element didn't get updated correctly.
+	Fixed bug where class of elements would get lost when TinyMCE was fixing incorrect HTML markup.
+	Fixed bug where table editing would produce double height values.
+	Fixed bug where width style value wouldn't be removed if you switched width unit from cm/em to pixels or percent.
+	Fixed bug where the search/replace input box wasn't auto focused like the other dialogs.
+	Fixed bug where the old mceAddControl command would use the fullscreen settings next time it created an instance.
+	Fixed bug where multiple lines where added to the target cell if you merged multiple empty cells.
+	Fixed bug where drop down menus would be incorrectly positioned inside scrollable divs.
+	Fixed bug where the separators of the silver skin variant didn't display correctly in IE 6.
+	Fixed bug where createStyleSheet seems to load scripts at opposite order in some IE versions.
+	Fixed bug where directionality could produce odd results for the UI and the dialogs.
+	Fixed bug where the DOM serializer wouldn't serialize custom namespaced attributes in IE 6 using the *[*] valid elements rule.
+	Fixed bug where table caption would be inserted after the thead element if you swapped a tr to be inside the thead.
+	Fixed bug where the youtube detection logic for the media plugin was to generic.
+	Fixed so the deprecated and undocumented theme_advanced_path_location set to none won't hide the whole statusbar.
+	Fixed so most input lists can have whitespace in them they are now split using the new tinymce.explode method.
+	Fixed so the popup_css and popup_css_add URLs are relative to where the current document is located.
+	Fixed various bugs and quirks with the store/restore selection logic.
+	Fixed so the editor starts in IE 8 standards mode but still that browser is very very buggy.
+	Fixed so dialog_type set to modal will block the background and other inline windows and only give access to the front most window.
+Version 3.0.4.1 (2008-03-08)
+	Fixed critical bug where it was impossible to edit images when inlinepopups where used due to lost selection in IE.
+Version 3.0.4 (2008-03-07)
+	Added new option constrain_menus, this enables you to force view port constraints on all menus. Contributed by Shane Tomlinson.
+	Fixed bug where table background wasn't visible inside the editor due to a default CSS rule overriding the style attribute.
+	Fixed bug where links would get a null class added if no styles was used in IE.
+	Fixed bug where spellchecker was auto focusing the editor in IE.
+	Fixed bug where document.domain would produce invalid argument if the editor was loaded in IE6 over a network UNC path.
+	Fixed bug where table height attribute was used, this is deprecated in XHTML so it now adds it as an style.
+	Fixed bug where textareas with style values would produce error in IE.
+	Fixed so the first element in each dialog is focused by default to enhance keyboard usage.
+	Fixed so you can add a mceFocus class to elements to make it auto focused.
+	Fixed so you can close dialogs using the esc key.
+	Fixed so you can press return/enter to submit the action of each dialog.
+	Fixed so tabbing inside an inline popups wont focus the resize anchor elements.
+	Fixed so you can press ok in inline alert messages using the return/enter key.
+	Fixed so textareas can be set to non px or % sizes for example em, cm, pt etc.
+	Fixed so non pixel values can be used in width/height properties for tables.
+	Fixed so the custom context menu can be disabled by holding down ctrl key while clicking.
+	Fixed so the layout for the o2k7 skin looks better if you don't have separators before and after list boxes.
+	Fixed so the sub classes get a copy of the super class constructor function to ease up type checking.
+	Fixed so font sizes for the format block previews are normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
+	Fixed so font sizes for h1-h6 in the default content.css is normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
+Version 3.0.3 (2008-03-03)
+	Fixed bug where an error about document.domain would be thrown if TinyMCE was loaded using a different port.
+	Fixed bug where mode exact would convert textareas without id or name if the elements option was omitted.
+	Fixed bug where the caret could be placed at an incorrect location when backspace was used in Gecko.
+	Fixed bug where local file:// URLs where converted into absolute domain URLs.
+	Fixed bug where an error was produced if a editor was removed inside an editor command.
+	Fixed bug where force_p_newlines didn't effect the paste plugin correctly.
+	Fixed bug where the paste plugin was producing an exception on IE if you pasted contents with middots.
+	Fixed bug where delete key could produce exceptions in Gecko sometimes due to the fix for the table cell bug.
+	Fixed bug where the layer plugin would produce an visual add class called mceVisualAid this one is now renamed to mceItemVisualAid to mark it internal.
+	Fixed bug where TinyMCE wouldn't initialize properly if ActiveX controls was disabled in IE.
+	Fixed bug where tables and other elements that had visual aids on them would produce an extra space after any custom class names.
+	Fixed bug where search with an empty string would produce some odd "invalid pointer" error in IE.
+	Fixed bug where elements like menus where placed at incorrect positions in Opera 9.26.
+	Fixed bug where IE was loosing focus of the editor when you clicked some dropmenu and if it was placed in a frame or iframe.
+	Fixed bug where focus of images could be lost in IE if you focused the accessibility confirm dialog in the advimage plugin.
+	Fixed bug where nestled font elements would produce odd output like missing font elements.
+	Fixed bug where text colors and styles got removed if invalid_elements included the font element.
+	Fixed bug where text-decoration set to underline or line-through would remove other styles from span elements.
+	Fixed bug where editor contents like \n\n would be incorrectly handled and processed as real line feeds.
+	Fixed bug where incorrectly encoded urls with ampersands in them would be decoded incorrectly.
+	Optimized the DOMUtils decode method to be a lot faster if the string doesn't have any entities to decode.
+Version 3.0.2.1 (2008-02-26)
+	Fixed alert/confirm dialogs so they display correctly.
+Version 3.0.2 (2008-02-26)


+	Added new CSS class to the default content.css files mceForceColors that forces white background and black text can be used with the body_class option.
+	Added new type parameter to the Editor.getParam function to reduce redundant logic for parsing hash tables.
+	Added new isDone method to the ScriptLoaded class, this enables you to check if a script has been loaded or not.
+	Added new resizeTo and resizeBy methods for the advanced theme. Can be called using tinyMCE.activeEditor.theme.resizeTo(w, h);
+	Added new skin_variant option this can be used to extend existing skins with slight modifications like color.
+	Added new variant of the o2k7 skin called "silver" based on a contribution made by Stefan Moonen.
+	Fixed bug where the template plugin might produce errors if the template_mdate_classes wasn't configured.
+	Fixed bug where the media plugin didn't convert the URLs for movies once they where inserted.
+	Fixed bug where the style field for the advlink dialog didn't work correctly if you edited an existing link.
+	Fixed bug where alignment of toolbars would fail in editor was uses in a quirks mode on IE, fix contributed by Peter Wood & Art Lawry.
+	Fixed bug where initialization of multiple editors at the same time using the mceAddControl method would produce errors.
+	Fixed bug where initialization of editors using mceAddControl command or new tinymce.Editor calls would fail during page load.
+	Fixed bug where the check for domain relaxing could fail if the document.domain property was changed by another script.
+	Fixed bug where textareas couldn't be named description or any other name that matches the meta elements in IE and Opera.
+	Fixed bug where the element path would fail sometimes in IE due to "unknown runtime error" on innerHTML.
+	Fixed bug where Safari would crash if you was hiding the editor before serializing the contents.
+	Fixed bug where the editor wasn't scaled propertly in fullscreen mode using the old fullscreen_new_window option.
+	Fixed bug where render method didn't load language packs in IE and Opera if you rendered an editor during page load.
+	Fixed bug where resizing the browser window in fullscreen didn't resize the editor.
+	Fixed bug where the blockquote command didn't move the caret inside the new empty blockquote if you used it on an empty document.
+	Fixed bug where auto in a style width/height for the textarea would produce an editor with the size value of 100. Fix contributed by Shane Tomlinson.
+	Fixed bug where restoration of selection at the beginning of an element could fail in Gecko.
+	Fixed bug where caret restoration after a cleanup could place the it at an incorrect location.
+	Fixed bug where delete key inside td elements would delete the cell in Gecko.
+	Fixed so the blockquote button toggles individual lines. This behavior is a bit more like the old indentation behavior in the 2.x branch.
+	Fixed so the dialog language packs only gets loaded the first time you open a dialog.
+	Fixed so all classes in the whole UI is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
+	Fixed so all classes in the inlinepopups logic is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
+	Fixed so that the window in fullscreen mode can be resized when fullscreen_new_window option is enabled.
+	Fixed so blockquote elements are formatted in the source output with an linefeed before and after it.
+	Optimized the editor initialization by reducing the number of calls to getBookmark/moveToBookmark.
+Version 3.0.1 (2008-02-21)
+	Added spellchecker plugin into the main package, but without any backend can be specified with the spellchecker_rpc_url option.
+	Added src attribute for script elements to the default valid_elements option value.
+	Added extra parameter to the class_filter callback it can now also filter out classes based on the whole CSS rule.
+	Added support for domain relaxing, TinyMCE can now be loaded from an remote domain as long as they are on the same root domain.
+	Added support for custom elements the new custom_elements option enables you to add non HTML elements to the editor.
+	Added support for the W3C Selectors API that was added to latest nightly build of WebKit.
+	Fixed bug where some object param element wasn't stored correctly using the media plugin.
+	Fixed bug where Opera was scrolling to top of page is drop menus on list boxes where displayed.
+	Fixed bug where IE6 was crashing if a format block was used on a container with anchor elements.
+	Fixed bug where spans with font sizes wasn't handled correctly when editor was loading contents.
+	Fixed bug where mode exact couldn't convert editors with name only. Id is no longer required but recommended.
+	Fixed bug where the mceInsertRawHTML command produced an extra undo level.
+	Fixed bug where the specific_textareas mode didn't work correctly this is the same thing as textareas now.
+	Fixed bug where the values of input elements in the HTML page of dialogs pages where changed in IE.
+	Fixed bug where fullscreen and fullpage plugins didn't work well together.
+	Fixed bug where embed elements wasn't handled properly in the media plugin.
+	Fixed bug where style information on span elements gets munged when fonts are converted to spans.
+	Fixed bug where some entities in element attributes where encoded incorrectly in the latest WebKit build.
+	Fixed bug where initialization would fail in IE if there where two input elements with the name submit in the form.
+	Fixed bug where fullscreen mode didn't work correctly in IE when the fullscreen_new_window option was used.
+	Fixed bug where invalid contents like an ul inside a p element would produce odd results in IE.
+	Fixed bug where Opera 9.2x was placing the drop menus at incorrect locations if the editor was placed in a table.
+	Fixed bug where Opera was producing odd results if enter/return was pressed while having forced_root_blocks disabled.
+	Fixed bug where layer plugin was stealing focus in IE on initialization.
+	Fixed bug where body attributes wasn't set properly in the fullpage plugin, fix contributed by Hiroaki Kawai.
+	Fixed bug where insert image and insert link dialogs where producing an extra level in the undo history.
+	Fixed bug where Gecko would produce an error if empty elements like <div></div> where inserted using mceInsertContent.
+	Fixed bug where center alignment of images produced odd results inside table cells.
+	Fixed bug where center alignment of images couldn't be toggled correctly.
+	Fixed bug where alignment of images inside tables would produce double float style items in IE if the fix_table_elements option was enabled.
+	Fixed bug where a variable called 'v' was polluting the global namespace. Objects tinymce and tinyMCE are the only ones allowed to be global.
+	Fixed bug where insert table from context menu couldn't insert new tables inside existing tables.
+	Fixed bug where Safari wouldn't produce br elements on enter when the force_br_newlines option was enabled.
+	Fixed bug where switching cell type in table cell dialog would produce odd attributes in IE.
+	Fixed bug where Gecko was outputting internal attributes if valid_elements where set to "*[*]".
+	Fixed bug where the style plugin would produce non hex colors inside the dialog when running on Gecko.
+	Fixed bug where an empty src value for insert image would remove the currently selected image if it wasn't and image element.
+	Fixed bug where hidden input elements would break the logic for the tab_focus option.
+	Fixed bug where save button wasn't working correctly in fullscreen mode.
+	Fixed bug where the editor was forced to be placed in a form element if the save_onsavecallback option was used.
+	Fixed bug where upper case param attributes wasn't parsed correctly in the media plugin.
+	Fixed bug where render method of tinymce.Editor class would produce an exception if the strict_loading_mode option was omitted.
+	Fixed bug where nodeChanged event could be fired while the editor was loading and there for produce an exception in FF.
+	Fixed bug where no undo levels where added if the user created new table rows using the tab key on Gecko.
+	Fixed bug where tables would be broken if you selected a different block format for contents withing an table cell.
+	Fixed bug where the render method of the tinymce.Editor class didn't setup the tinymce.EditorManager.settings object correctly.
+	Fixed bug where the advanced image dialog would go to the first tab if the alternative image was changed using the file browser link.
+	Fixed bug where the forced_root_block option would produce BR elements inside empty blocks if the block wasn't a paragraph.
+	Fixed bug where the forced_root_block doesn't work correctly on IE if the specified element was something else than paragraphs.
+	Fixed bug where selection of images would get lost if user selected something from the context menu in IE.
+	Fixed bug where the context menu plugin would pollute the global namespace with two variables p1 and p2.
+	Fixed compatibility issue with Mootools, it is destroying document.getElementById on unload in IE. (Mantra: You don't own the internal objects).
+	Fixed bugs where dialogs/tabs and other UI elements where rendered incorrectly in Firefox 3.
+	Fixed so the auto CSS class importer is compatible with 2.x.
+	Fixed so the editor UI and inlinedialogs works correctly with the YUI CSS reset package.
+	Fixed so header and footer elements are forced to lower case when the fullpage plugin is used.
+	Fixed so load prefixes "-" for plugins and themes isn't required if the plugin/theme was loaded by the ThemeManager/PluginManager.
+	Fixed so the JSONRequest uses application/json content type to make Ruby on rails happy.
+	Fixed so the CSS rule is more exact for the body in the default content.css files. Body is now defined as "body.mceContentBody" instead of just "body".
+	Fixed so the tiny_mce_dev.js uses XHR instead of document.write to load scripts to resolve an issue with Opera 9.50.
+	Fixed so language pack loading can be disabled by setting the language option to false. Can be useful for systems with their own language pack management.
+Version 3.0 (2008-01-30)
+	Added map and area elements to the default valid_elements list and also some indentation rules.
+	Fixed bug where empty paragraphs wasn't padded when loading contents.
+	Fixed bug where the RowLayout manager didn't work at all.
+	Fixed bug where style attribute data would get messed up in advimage dialog.
+	Fixed bug where the table dialogs class select wasn't updated correctly.
+	Fixed bug where elements would get extra whitespace around on insert when body was present in valid_elements.
+	Fixed bug where coords attribute of the area element wasn't handled properly in IE.
+	Fixed bug where Safari didn't produce BR elements on shift+return.
+	Fixed bug where force blocks would cast odd invalid attribute exception in IE.
+	Fixed bug where media plugin would produce extra whitespace before and after objects.
+	Fixed bug where cleanup_callback could break the contents of the editor. But use the new event system instead of this option.
+	Fixed bug where the tab_focus option didn't work between editor instanced. You can now tab between editors.
+	Fixed bug where the load function of the ScriptLoader class didn't load single files without the load que as it was supposed to.
+	Fixed bug where the execcommand_callback parameter order was incorrect. Recommendation use the new addCommand method.
+	Fixed bug where range.select calls sometimes failed on some IE versions.
+	Fixed bug where Safari was scrolling to top of document when enter/returned was pressed.
+	Fixed bug where fullscreen_new_window option didn't work correctly.
+	Fixed bug where the nonbreaking plugin inserted an space instead of an non breaking space the first time.
+	Fixed bug where the visualization of non breaking spaces where visual in element path.
+	Fixed so the focus is restored to the editor after inserting an custom character.
+	Fixed so the isNotDirty state is set to false if a new undo level is added.
+	Fixed so pointless style information for borders gets removed in IE.
+	Fixed so the resize button has a se-resize cursor css value.
+Version 3.0rc2 (2008-01-18)
+	Added new fix_nesting option to fix bug #1867292, this is disabled by default.
+	Added new indentation option enables you to specify how much each indent/outdent call will add/remove.
+	Added easier support for enabling/disabling icon columns on drop menues.
+	Added new menu button control class. This control is very similar to the splitbutton but without any onclick action.
+	Added support for previous tab focus (shift+tab). The tab_focus setting now takes two items next and previous element.
+	Fixed bug where iframes inside the editor got removed in Firefox on initial load.
+	Fixed bug where the CSS for abbr elements wasn't applied correctly in IE.
+	Fixed bug where mceAddControl on element inside a hidden container produced errors.
+	Fixed bug where closed anchors like <a /> produced strange results.
+	Fixed bug where caret would jump to the top of the editor if enter was pressed a the end of a list.
+	Fixed bug where remove editor failed if the editor wasn't properly initialized.
+	Fixed bug where render call on for a non existing element produced exception.
+	Fixed bug where parent window was hidden when the color picker was used in a non inlinepopups setup.
+	Fixed bug where onchange event wasn't fired correctly on IE when color picker was used in dialogs.
+	Fixed bug where save plugin could not save contents if the converted element wasn't an textarea.
+	Fixed bug where events might be fired even after an editor instance was removed such as blur events.
+	Fixed bug where an exception about undefined undo levels could be throwed sometimes.
+	Fixed bug where the plugin_preview_pageurl option didn't work.
+	Fixed bug where adding/removing an editor instance very fast could produce problems.
+	Fixed bug where the link button was highlighted when an anchor element was selected.
+	Fixed bug where the selected contents where removed if a new anchor element was added.
+	Fixed bug where splitbuttons where rendered one pixel down in the default theme.
+	Fixed bug where some buttons where placed at incorrect positions in the o2k7 theme.
+	Fixed bug that made it impossible to visually disable a custom button that used an image instead of CSS sprites.
+	Fixed bug where it wasn't possible to press delete/backspace if the editor was added+removed and re-added due to a FF bug.
+	Fixed bug where an entities option with only 38,amp,60,lt,62,gt would fail in IE.
+	Fixed bug where innerHTML sometimes generated unknown runtime error on IE.
+	Fixed bug where content_css files wasn't loaded in the template preview iframe.
+	Fixed bug where scroll position was incorrect when toggling fullscreen mode.
+	Fixed bug where restoration of overflow didn't work correctly when disabling fullscreen mode in Opera.
+	Fixed bug where drop menus where places at incorrect locations if the editor was placed in a scrollable container element.
+	Fixed bug where hideMenu didn't hide sub menus correctly. It will now hide all menus recursively.
+	Fixed so theme_advanced_path_location can be used in init options for compatibility reasons.
+	Fixed so the drop menu colors matches the rest of o2k7 theme.
+	Fixed so the preview example.html file is updated to the new 3.x API.
+	Fixed so the margins are the same by default inside the editable area between IE and other browsers.
+	Fixed so editor contents gets stored before it the onSubmit event is fired.
+Version 3.0rc1 (2008-01-08)
+	Added new classes for toolbar rows in advanced theme mceToolbarRow1..n enabled you to change appearance of individual rows.
+	Added auto detection for the strict_loading_mode option when running in application/xhtml+xml mode on Gecko.
+	Optimized the HTML serializer by bundling some post process methods together.
+	Fixed so that the toolbars have unique IDs, enables you to alter the toolbars using the ControlManager and the DOM.
+	Fixed bug where delta values for dialog sizes in language packs didn't work correctly due to missing string to number casting.
+	Fixed bug where paragraph generation logic didn't handle hr or table elements correctly if they where the only element.
+	Fixed bug where some elements got extra linebreaks added after or before it in HTML output.
+	Fixed bug where it was hard to modify existing style data on table rows and table cells.
+	Fixed bug where the dom.getRect method didn't handle non pixel values correctly.
+	Fixed bug where strikethrough and underline couldn't be toggled on existing span elements.
+	Fixed bug where the postprocessor searched for nsbp instead of nbsp entities.
+	Fixed bug where it was impossible to edit links that had child elements within them.
+	Fixed bug where it was possible to click on the parent item of a submenu.
+	Fixed bug where mouseover/mouseout images couldn't be removed in advimage dialog.
+	Fixed bug where drop menus didn't work when running in application/xhtml+xml mode.
+	Fixed bug where Opera added doctype to output in application/xhtml+xml mode.
+	Fixed bug where some DOM methods didn't work correctly in the application/xhtml+xml mode.
+	Fixed bug where the inlinepopups didn't work correctly in the application/xhtml+xml mode.
+	Fixed bug where the ColorSplitButton didn't display correctly in the application/xhtml+xml mode.
+	Fixed bug where the UI layout was incorrect on Gecko browsers when running in application/xhtml+xml mode.
+	Fixed bug where the word paste plugin produced exception while running in application/xhtml+xml mode.
+	Fixed bug where there wasn't any hidden input element generated for divs while running in application/xhtml+xml mode.
+	Fixed bug where indentation of script/style/pre elements where incorrect.
+	Fixed bug where script element contents was removed in IE.
+	Fixed bug where script element contents got entity encoded.
+	Fixed bug where you couldn't edit existing element styles using the styles plugin.
+	Fixed bug where styles wasn't updated properly sometimes due to an performance enhancement.
+	Fixed bug where font sizes couldn't be changed using the style plugin.
+	Fixed bug where an error was produced in Gecko browsers when switching back from fullscreen mode.
+	Fixed bug where Opera was producing br elements after elements like h3.
+	Fixed bug where TinyMCE couldn't be loaded on a page using - characters in it's URL.
+	Fixed bug where the editor container element was forced to have a specific name.
+	Fixed bug with force_br_newlines option on Firefox, even though it should never be used (Read FAQ).
+	Fixed bug where onclick event had an return true; prefix added when creating an popup.
+	Fixed bug where the theme_advanced_statusbar_location option couldn't handle the value "none".
+	Fixed issue with URLs with multiple at characters for example an Zope URI.
+	Fixed so simple and advanced themes doesn't collide.
+	Fixed so a elements gets removed when the href field is left empty, the href attribute is required in a link after all.
+	Fixed so img elements gets removed when the src field is left empty, the src attribute is required for all images after all.
+	Removed the indent and encode methods from the tinymce.dom.Serializer class due to performance enhancement and reduction of the API size.
+Version 3.0b3 (2007-12-14)
+	Added new getElement method to Editor class, returns the element that was replaced with the editor instance.
+	Added new unavailable prefix for disabled controls for accessibility reasons.
+	Fixed bug where regexp patterns couldn't be used for the editor_selector/editor_deselector options.
+	Fixed bug where the DOM wasn't properly initialized before the onInit event was executed in popups.
+	Fixed bug where font sizes where reduced by font size actions on previous spans in Safari.
+	Fixed bug where HR elements got places at the wrong location in IE.
+	Fixed bug where align/justify didn't work correctly on multiple paragraphs.
+	Fixed bug with missing translation for cell scope settings.
+	Fixed bug where selection/caret position was lost on some table actions.
+	Fixed bug where editor instances couldn't be added to hidden div elements.
+	Fixed bug where list elements in Safari would get an odd ID attribute.
+	Fixed bug where IE would return <html/> when the editor was completely empty.
+	Fixed bug where accessibility title attribute for access keys wasn't setup properly.
+	Fixed bug where forecolorpicker and backcolorpicker control names wasn't working.
+	Fixed bug where inserting template content didn't work in Safari due to selection exception.
+	Fixed bug where absolute URLs to remote hosts couldn't be used for background images.
+	Fixed bug where mysterious span elements where produced in Safari when injecting HTML contents.
+	Fixed bug where the media plugin didn't work correctly on the latest Opera 9.24.
+	Fixed bug where indentation of HTML output wasn't applied to all block elements.
+	Fixed bug where Safari was production DOM exception if you pressed enter in an empty editor.
+	Fixed bug where media plugin didn't parse script tags correctly patch contributed by Mathieu Campagna.
+	Fixed bug where the drop menus of list boxes like blockformat could produce scrolling of the page.
+	Fixed bug where the drop menus where placed at an incorrect location if TinyMCE was placed in a scrollable div.
+	Fixed bug where submit buttons couldn't be named submit, it's not recommended to name submit buttons submit anyway.
+	Fixed bug where the stylelistbox produced an exception if there was only one class in the list box.
+	Fixed bug where the stylelistbox wasn't updated correctly when the current class was removed.
+	Fixed bug where the formatblock command sometimes removed the body element.
+	Fixed bug where fullscreen switching in IE sometimes produced an exception when the spellchecker plugin was enabled.
+	Fixed issue where FF produced an empty paragraph when the editor was completely empty.
+	Fixed issue with size of image dialog in the advanced theme.
+	Fixed issues with the bbcode plugin it now also handles spans and the [font] rule.
+	Fixed so the style compression feature is a bit smarter to resolve issues with Opera.
+	Reintroduced the remove_linebreaks option, this is enabled by default.
+Version 3.0b2 (2007-11-29)
+	Added type and compact attributes to the default valid_elements list for the ul and ol elements.
+	Added missing accessibility support to native list boxes in both the toolbar and dialogs.
+	Added missing access key for the element path for accessibility reasons.
+	Fixed support for loading themes from external URLs.
+	Fixed bug where setOuterHTML didn't work correctly when multiple elements where passed to it.
+	Fixed bug with visualchars plugin was moving elements around in the DOM.
+	Fixed bug with DIV elements that got converted into editors on IE.
+	Fixed bug with paste plugin using the old event API.
+	Fixed bug where the spellchecker was removing the word when it was ignored.
+	Fixed bug where fullscreen wasn't working properly.
+	Fixed bug where the base href element and attribute was ignored.
+	Fixed bug where redo function didn't work in IE.
+	Fixed bug where content_css didn't work as previous 2.x branch.
+	Fixed bug where preview dialog was throwing errors if the content_css wasn't defined.
+	Fixed bug where the theme_advanced_path option didn't work like the 2.x branch.
+	Fixed bug where the theme_advanced_statusbar_location was called theme_advanced_status_location.
+	Fixed bug where the strict_loading_mode option didn't work if you created editors dynamically without using the EditorManager.
+	Fixed bug where some language values wasn't translated such as insert and update in dialogs.
+	Fixed bug where some image attributes wasn't stored correctly when inserting an image.
+	Fixed bug where fullscreen mode didn't restore scrollbars when disabled.
+	Fixed bug where there was no visual representation for tab focus in toolbars on IE.
+	Fixed bug where HR elements wasn't treated as block elements so forced_root_block would fail on these.
+	Fixed bug where autosave presented warning message even when the form was submitted normally.
+	Fixed typo of openBrower it's now openBrowser in form_utils.js.
+	Fixed various HTML problems like missing TD elements and duplicated doctypes.
+	Fixed default values for theme_advanced_resize_horizontal, theme_advanced_resizing_use_cookie to be 2.x compatible.
+	Moved spellchecker JS files into the development package.
+	Removed support for theme_advanced_path_location since the theme_advanced_statusbar_location is the correct option name.
+Version 3.0b1 (2007-11-21)
+	Added new tab_focus option, that enables you to specify a element id or that the next element to be focused on tab key down.
+	Added new addQueryValueHandler method to the tinymce.Editor class.
+	Added new class_filter option, this enables you to specify a function that can filter out CSS classes for the styles list box.
+	Added support form [url=url]title[/url] to the bbcode plugin.
+	Renamed the addCommandQueryState method in the tinymce.Editor class to addQueryStateHandler.
+	Renamed loadQue to loadQueue, to correct spelling.
+	Removed the createDOM method from the window manager and replace it with a createInstance method.
+	Removed the add to beginning of class attribute parameter of the DOMUtils.addClass method.
+	Fixed bug with the forced_root_block option, didn't work correctly with multiple inline elements.
+	Fixed bug where image dialogs replaced the current image element with a new one even when it was updated.
+	Fixed bug where the submit trigger wasn't executed when divs where converted into editor instances.
+	Fixed bug where div elements that got converted into editors didn't get a hidden input element generated for them.
+	Fixed bug where the the media_use_script option for the media plugin wasn't working correctly.
+	Fixed bug where the font size and font family listboxes wasn't updated correctly on Safari.
+	Fixed bug where the height of the fieldset in default image dialog for the advanced theme was to small.
+	Fixed bug where the font sizes behaved incorrectly after a cleanup on Safari.
+	Fixed bug where formatblock didn't work correctly in Safari on some elements.
+	Fixed bug where template plugin didn't insert content correctly unless some options where specified.
+	Fixed bug where charmap on Safari produced scrollbars.
+	Fixed bug where there was white artifacts in some dialogs due to missing background color.
+	Fixed bug where port was added to all external URLs if the editor was loaded from a custom port.
+	Fixed bug where the context menus got duplicated on Safari 3.0.4 on Mac OS X.
+	Fixed bug where dialogs like paste from word was huge on Firefox.
+	Fixed bug with media plugin not working with windows media objects.
+	Fixed bug where a forever loop was created if multiple instances where submitted using form.submit.
+	Fixed bug with editing a table produce error in IE when inlinepopups where used.
+	Fixed bug where the style plugin generated ugly looking style information in IE.
+	Fixed bug where the inline dialogs that got opened while in fullscreen mode wasn't visible.
+	Fixed bug where it was difficult to place the caret inside the word paste dialog.
+	Fixed bug where Opera produced strange border in the word paste dialog.
+	Fixed bug where viewport constraints could move a inlinepopup to a negative x, y position if the viewport was to small.
+	Fixed bug where template plugin was producing an error due to a deprecated API call.
+	Fixed bug where drag drop of images failed in Gecko if a document_base_url was specified.
+	Fixed bug where Firefox 3 failed to apply block formats like H1-H6 it still breaks on DIVs this has been reported to bugzilla.
+	Fixed bug where IE was producing a warning dialog about non secure items when running TinyMCE over HTTPS.
+	Fixed bug where the onbeforeunload event was triggered when menus or dialogs where opened.
+	Fixed bug where the fullscreen mode of the HTML view source box threw an error.
+	Fixed bug where the mceFocus command didn't work correctly.
+	Fixed bug where the selection could get lost in IE using inlinepopups.
+	Fixed so the body of the editor area has the mceContentBody class just like the 2.x branch. 
+	Fixed so the media icon gets active when a media element is selected.
+Version 3.0a3 (2007-11-13)
+	Added new experimental jQuery and Prototype framework adapters to the development package.
+	Added new translation.html file for the development package. Helps with the internationalization of TinyMCE.
+	Added new setup callback option, use this callback to add events to TinyMCE. This method is recommended over the old callbacks.
+	Added new API documetation to all classes, functions, events, properties to the Wiki with examples etc.
+	Added new init method to all plugins and themes, since it's shorter to write and it mimics interface capable languages better.
+	Fixed various CSS issues in the default skin such as alignment of split buttons and separators.
+	Fixed issues with mod_security. It didn't like that a content type of text/javascript was forced in a XHR.
+	Fixed all events so that they now pass the sender object as it's first argument.
+	Fixed some DOM methods so they now can take an array as input.
+	Fixed so addButton and the methods of the ControlManager uses less arguments and it now uses a settings object instead.
+	Fixed various issues with the tinymce.util.URI class.
+	Fixed bug in IE and Safari and the on demand gzip loading feature.
+	Fixed bug with moving inline windows sometimes failed in IE6.
+	Fixed bug where save_callback function wasn't executed at all.
+	Fixed bug where inlinepopups produces scrollbars if windows where moved to the corners of the browser.
+	Fixed bug where view HTML source failed when inserting a embedded media object.
+	Fixed bug where the listbox menus didn't display correctly on IE6.
+	Fixed bug where undo level wasn't added when editor was blurred.
+	Fixed bug where spellchecker wasn't disabled when fullscreen mode was enabled.
+	Fixed bug where Firefox could crash some times when the user switched to fullscreen mode.
+	Fixed bug where tinymce.ui.DropMenu didn't remove all item data when an item was removed from the menu.
+	Fixed bug where anchor list in advlink dialog wasn't populated correctly in Safari.
+	Fixed bug where it wasn't possible to edit tables in IE when inlinepopups was enabled.
+	Fixed bug where it wasn't possible to change the table width of an existing table.
+	Fixed bug where xhtmlxtras like abbr didn't work correctly on IE.
+	Fixed bug where IE6 had some graphics rendering issues with the inlinepopups.
+	Fixed bug where inlinepopup windows where moved incorrectly when they were boundary checked for min width.
+	Fixed bug where textareas without id or name couldn't be converted into editor instances.
+	Fixed bug where TinyMCE was stealing element focus on IE.
+	Fixed bug where the getParam method didn't handle false values correctly.
+	Fixed bug where inlinepopups was clipped by other TinyMCE instances or relative elements in IE.
+	Fixed bug where the contextmenu was clipped by other TinyMCE instances or relative elements in IE.
+	Fixed bug where listbox menus was clipped by other TinyMCE instances or relative elements in IE.
+	Fixed bug where listboxes wasn't updated correctly when the a value wasn't found by select.
+	Fixed various CSS issues that produced odd rendering bugs in IE.
+	Fixed issues with tinymce.ui.DropMenu class, it required some optional settings to be specified.
+	Fixed so multiple blockquotes can be removed with a easier method than before.
+	Optimized some of the core API to boost performance.
+	Removed some functions from the core API that wasn't needed.
+Version 3.0a2 (2007-11-02)
+	Fixed critical bug where IE generaded an error on a hasAttribute call in the serialization engine.
+	Fixed critical bug where some dialogs didn't open in the non dev package.
+	Fixed bug when using the theme_advanced_styles option. Error was thrown in some dialogs.
+	Fixed bug where the close buttons produced an error when native windows where used.
+	Fixed bug in default skin so that split buttons gets activated correctly.
+	Fixed so plugins can be loaded from external urls outsite the plugins directory.
+Version 3.0a1 (2007-11-01)
+	Rewrote the core and most of the plugins and themes from scratch.
+	Added new and improved serialization engine, faster and more powerful.
+	Added new internal event system, things like editor.onClick.add(func).
+	Added new inlinepopups plugin, the dialogs are now skinnable and uses clearlooks2 as default.
+	Added new contextmenu plugin, context menus can now have submenus and plugins can add items on the fly.
+	Added new skin support for the simple and advanced themes you can alter the whole UI using CSS.
+	Added new o2k7 skin for the simple and advanced themes.
+	Added new custom list boxes for font size/format/style etc with preview support.
+	Added new UI management, enabled plugins to create controls like splitbuttons or menus easier.
+	Added new JSON parser/serializer and JSON-RPC class to the core API.
+	Added new cookie utility class to the core API.
+	Added new Unit testing class to the core API only available in dev mode.
+	Added new firebug lite integration when loading the dev version of TinyMCE.
+	Added new Safari plugin, fixes lots compatibility of issues with Safari 3.x.
+	Added new URI/URL parsing it now handles the hole RFC and even some exceptions.
+	Added new pagebreak plugin, enables you to insert pagebreak comments like <!-- pagebreak -->
+	Added new on demand loading of plugins and themes. Enables you to load and init TinyMCE at any time.
+	Added new throbber/progress visualization a plugin can show/hide this when it's needed.
+	Added new blockquote button. Enables you to wrap paragraphs in blockquotes.
+	Added new compat2x plugin. Will provide a TinyMCE 2.x API for older plugins.
+	Added new theme_advanced_resizing_min_width, theme_advanced_resizing_min_height options.
+	Added new theme_advanced_resizing_max_height, theme_advanced_resizing_max_height options.
+	Added new use_native_selects option. Enables you to toggle native listboxes on and off.
+	Added new docs_url option enables you to specify where the TinyMCE user documentation is located.
+	Added new frame and rules options for the table dialog.
+	Added new global rule for valid_elements/extended_valid_elements enables you to specify global attributes for all elements.
+	Added new deny attribute rule characher so it's possible to deny global attribute rules on specific elements.
+	Added new unit tests in the dev package of TinyMCE. Runs tests on the core API, commands and settings of the editor.
+	Readded the inline_styles option and enabled it by default so deprecated attributes are no longer used.
+	Removed all button images and replaced them with CSS sprite images. Reduces the number of requests needed.
+	Removed lots of language files and merged them into the base language files. Reduces the number of requests needed.
+	Removed lots of unnecessary files and merged many of them together to reduce requests and improve loading speed.
+	Reduced the over all script size by 33% and the number of files/requests by 75% so it loads a lot faster.
+	Fixed so convert_fonts_to_spans are enabled by default. So no more font tags.
+	Fixed so underline and strikethrough uses spans instread of deprecated U and STRIKE elements.
+	Fixed so indent/outdent adds/removed margin-left instead of blockquotes.
+	Fixed so alignment of paragraphs results in a text-align style value instead of the deprecated align attribute.
+	Fixed so alignment of images uses float or vertical-align style values instead of the deprecated align attribute.
+	Fixed so all classes from @import stylesheets gets imported into the editor.
+	Fixed so the directionality can toggle the dir attribute on and off.
+	Fixed so the fullscreen_settings can be used for all types of fullscreen modes.
+	Fixed so the advanced HR dialog gets displayed when inserting a HR not only on edit.
+	Fixed bug where word wrap didn't work in the source editor on Safari.
+	Fixed so non HTML elements can be used within the editor such as <myns:tag>
+	Fixed various memory leaks in IE and reduced the unload cleanups needed.
+	Fixed so the preformatted option adds an invisible container pre tag inside the editor.
+	Renamed the _template plugin to example and updated it to use the new 3.x API.
 

--- /dev/null
+++ b/tinymce3/index.php

file:b/tinymce3/init.php (new)
--- /dev/null
+++ b/tinymce3/init.php
@@ -1,1 +1,49 @@
+<?php
 
+echo "
+<script language=\"javascript\" type=\"text/javascript\"><!--";
+		$tinymessage = dbquery("SELECT message_text FROM " . TABLEPREFIX . "fanfiction_messages WHERE message_name = 'tinyMCE' LIMIT 1");
+		list($tinysettings) = dbrow($tinymessage);
+		if (!empty($tinysettings) && $current != "adminarea")
+		{
+			echo $tinysettings;
+		}
+		else
+		{
+			echo "
+	tinyMCE.init({ 
+		theme: 'advanced',
+		height: '250',
+		language: '$language',
+		convert_urls: 'false',
+		mode: 'textareas',
+		extended_valid_elements: 'a[name|href|target|title]',
+		plugins: 'advhr,advimage,advlink,searchreplace,contextmenu,preview,fullscreen,paste" . ($current == "adminarea" ? ",codeprotect" : "") . "',
+		theme_advanced_buttons1_add: 'fontsizeselect',
+		theme_advanced_buttons2_add: 'separator,pasteword,pastetext',
+		theme_advanced_buttons3_add_before: 'tablecontrols,separator',
+		theme_advanced_buttons3_add: 'advhr',
+		theme_advanced_toolbar_align: 'center',
+		theme_advanced_statusbar_location: 'bottom',
+		theme_advanced_path: 'false',
+		editor_deselector: 'mceNoEditor',
+";
+			if (USERUID)
+				echo "		external_image_list_url : '" . STORIESPATH . "/" . USERUID . "/images/imagelist.js',";
+			echo "
+		theme_advanced_resizing: true," . ($current == "adminarea" ? "\n\t\tentity_encoding: 'raw'" : "\n\t\tinvalid_elements: 'script,object,applet,iframe'") . "
+   });
+";
+		}
+		echo "
+var tinyMCEmode = true;
+	function toogleEditorMode(id) {
+		var elm = document.getElementById(id);
+
+		if (tinyMCE.getInstanceById(id) == null)
+			tinyMCE.execCommand('mceAddControl', false, id);
+		else
+			tinyMCE.execCommand('mceRemoveControl', false, id);
+	}
+";
+		echo " --></script>";

--- /dev/null
+++ b/tinymce3/jscripts/index.php

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/blank.htm
@@ -1,1 +1,10 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>blank_page</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+</head>
+<body class="mceContentBody">
 
+</body>
+</html>
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/index.htm
@@ -1,1 +1,11 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+<title>blank_page</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+</head>
+<body>
 
+</body>
+</html>
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/index.php

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/langs/en.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n({en:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","popup_blocked":"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Emotions"},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode_stick":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"warning_message":"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/license.txt
@@ -1,1 +1,505 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE

+		       Version 2.1, February 1999

+

+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.

+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

+ Everyone is permitted to copy and distribute verbatim copies

+ of this license document, but changing it is not allowed.

+

+[This is the first released version of the Lesser GPL.  It also counts

+ as the successor of the GNU Library Public License, version 2, hence

+ the version number 2.1.]

+

+			    Preamble

+

+  The licenses for most software are designed to take away your

+freedom to share and change it.  By contrast, the GNU General Public

+Licenses are intended to guarantee your freedom to share and change

+free software--to make sure the software is free for all its users.

+

+  This license, the Lesser General Public License, applies to some

+specially designated software packages--typically libraries--of the

+Free Software Foundation and other authors who decide to use it.  You

+can use it too, but we suggest you first think carefully about whether

+this license or the ordinary General Public License is the better

+strategy to use in any particular case, based on the explanations below.

+

+  When we speak of free software, we are referring to freedom of use,

+not price.  Our General Public Licenses are designed to make sure that

+you have the freedom to distribute copies of free software (and charge

+for this service if you wish); that you receive source code or can get

+it if you want it; that you can change the software and use pieces of

+it in new free programs; and that you are informed that you can do

+these things.

+

+  To protect your rights, we need to make restrictions that forbid

+distributors to deny you these rights or to ask you to surrender these

+rights.  These restrictions translate to certain responsibilities for

+you if you distribute copies of the library or if you modify it.

+

+  For example, if you distribute copies of the library, whether gratis

+or for a fee, you must give the recipients all the rights that we gave

+you.  You must make sure that they, too, receive or can get the source

+code.  If you link other code with the library, you must provide

+complete object files to the recipients, so that they can relink them

+with the library after making changes to the library and recompiling

+it.  And you must show them these terms so they know their rights.

+

+  We protect your rights with a two-step method: (1) we copyright the

+library, and (2) we offer you this license, which gives you legal

+permission to copy, distribute and/or modify the library.

+

+  To protect each distributor, we want to make it very clear that

+there is no warranty for the free library.  Also, if the library is

+modified by someone else and passed on, the recipients should know

+that what they have is not the original version, so that the original

+author's reputation will not be affected by problems that might be

+introduced by others.

+

+  Finally, software patents pose a constant threat to the existence of

+any free program.  We wish to make sure that a company cannot

+effectively restrict the users of a free program by obtaining a

+restrictive license from a patent holder.  Therefore, we insist that

+any patent license obtained for a version of the library must be

+consistent with the full freedom of use specified in this license.

+

+  Most GNU software, including some libraries, is covered by the

+ordinary GNU General Public License.  This license, the GNU Lesser

+General Public License, applies to certain designated libraries, and

+is quite different from the ordinary General Public License.  We use

+this license for certain libraries in order to permit linking those

+libraries into non-free programs.

+

+  When a program is linked with a library, whether statically or using

+a shared library, the combination of the two is legally speaking a

+combined work, a derivative of the original library.  The ordinary

+General Public License therefore permits such linking only if the

+entire combination fits its criteria of freedom.  The Lesser General

+Public License permits more lax criteria for linking other code with

+the library.

+

+  We call this license the "Lesser" General Public License because it

+does Less to protect the user's freedom than the ordinary General

+Public License.  It also provides other free software developers Less

+of an advantage over competing non-free programs.  These disadvantages

+are the reason we use the ordinary General Public License for many

+libraries.  However, the Lesser license provides advantages in certain

+special circumstances.

+

+  For example, on rare occasions, there may be a special need to

+encourage the widest possible use of a certain library, so that it becomes

+a de-facto standard.  To achieve this, non-free programs must be

+allowed to use the library.  A more frequent case is that a free

+library does the same job as widely used non-free libraries.  In this

+case, there is little to gain by limiting the free library to free

+software only, so we use the Lesser General Public License.

+

+  In other cases, permission to use a particular library in non-free

+programs enables a greater number of people to use a large body of

+free software.  For example, permission to use the GNU C Library in

+non-free programs enables many more people to use the whole GNU

+operating system, as well as its variant, the GNU/Linux operating

+system.

+

+  Although the Lesser General Public License is Less protective of the

+users' freedom, it does ensure that the user of a program that is

+linked with the Library has the freedom and the wherewithal to run

+that program using a modified version of the Library.

+

+  The precise terms and conditions for copying, distribution and

+modification follow.  Pay close attention to the difference between a

+"work based on the library" and a "work that uses the library".  The

+former contains code derived from the library, whereas the latter must

+be combined with the library in order to run.

+

+		  GNU LESSER GENERAL PUBLIC LICENSE

+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

+

+  0. This License Agreement applies to any software library or other

+program which contains a notice placed by the copyright holder or

+other authorized party saying it may be distributed under the terms of

+this Lesser General Public License (also called "this License").

+Each licensee is addressed as "you".

+

+  A "library" means a collection of software functions and/or data

+prepared so as to be conveniently linked with application programs

+(which use some of those functions and data) to form executables.

+

+  The "Library", below, refers to any such software library or work

+which has been distributed under these terms.  A "work based on the

+Library" means either the Library or any derivative work under

+copyright law: that is to say, a work containing the Library or a

+portion of it, either verbatim or with modifications and/or translated

+straightforwardly into another language.  (Hereinafter, translation is

+included without limitation in the term "modification".)

+

+  "Source code" for a work means the preferred form of the work for

+making modifications to it.  For a library, complete source code means

+all the source code for all modules it contains, plus any associated

+interface definition files, plus the scripts used to control compilation

+and installation of the library.

+

+  Activities other than copying, distribution and modification are not

+covered by this License; they are outside its scope.  The act of

+running a program using the Library is not restricted, and output from

+such a program is covered only if its contents constitute a work based

+on the Library (independent of the use of the Library in a tool for

+writing it).  Whether that is true depends on what the Library does

+and what the program that uses the Library does.

+  

+  1. You may copy and distribute verbatim copies of the Library's

+complete source code as you receive it, in any medium, provided that

+you conspicuously and appropriately publish on each copy an

+appropriate copyright notice and disclaimer of warranty; keep intact

+all the notices that refer to this License and to the absence of any

+warranty; and distribute a copy of this License along with the

+Library.

+

+  You may charge a fee for the physical act of transferring a copy,

+and you may at your option offer warranty protection in exchange for a

+fee.

+

+  2. You may modify your copy or copies of the Library or any portion

+of it, thus forming a work based on the Library, and copy and

+distribute such modifications or work under the terms of Section 1

+above, provided that you also meet all of these conditions:

+

+    a) The modified work must itself be a software library.

+

+    b) You must cause the files modified to carry prominent notices

+    stating that you changed the files and the date of any change.

+

+    c) You must cause the whole of the work to be licensed at no

+    charge to all third parties under the terms of this License.

+

+    d) If a facility in the modified Library refers to a function or a

+    table of data to be supplied by an application program that uses

+    the facility, other than as an argument passed when the facility

+    is invoked, then you must make a good faith effort to ensure that,

+    in the event an application does not supply such function or

+    table, the facility still operates, and performs whatever part of

+    its purpose remains meaningful.

+

+    (For example, a function in a library to compute square roots has

+    a purpose that is entirely well-defined independent of the

+    application.  Therefore, Subsection 2d requires that any

+    application-supplied function or table used by this function must

+    be optional: if the application does not supply it, the square

+    root function must still compute square roots.)

+

+These requirements apply to the modified work as a whole.  If

+identifiable sections of that work are not derived from the Library,

+and can be reasonably considered independent and separate works in

+themselves, then this License, and its terms, do not apply to those

+sections when you distribute them as separate works.  But when you

+distribute the same sections as part of a whole which is a work based

+on the Library, the distribution of the whole must be on the terms of

+this License, whose permissions for other licensees extend to the

+entire whole, and thus to each and every part regardless of who wrote

+it.

+

+Thus, it is not the intent of this section to claim rights or contest

+your rights to work written entirely by you; rather, the intent is to

+exercise the right to control the distribution of derivative or

+collective works based on the Library.

+

+In addition, mere aggregation of another work not based on the Library

+with the Library (or with a work based on the Library) on a volume of

+a storage or distribution medium does not bring the other work under

+the scope of this License.

+

+  3. You may opt to apply the terms of the ordinary GNU General Public

+License instead of this License to a given copy of the Library.  To do

+this, you must alter all the notices that refer to this License, so

+that they refer to the ordinary GNU General Public License, version 2,

+instead of to this License.  (If a newer version than version 2 of the

+ordinary GNU General Public License has appeared, then you can specify

+that version instead if you wish.)  Do not make any other change in

+these notices.

+

+  Once this change is made in a given copy, it is irreversible for

+that copy, so the ordinary GNU General Public License applies to all

+subsequent copies and derivative works made from that copy.

+

+  This option is useful when you wish to copy part of the code of

+the Library into a program that is not a library.

+

+  4. You may copy and distribute the Library (or a portion or

+derivative of it, under Section 2) in object code or executable form

+under the terms of Sections 1 and 2 above provided that you accompany

+it with the complete corresponding machine-readable source code, which

+must be distributed under the terms of Sections 1 and 2 above on a

+medium customarily used for software interchange.

+

+  If distribution of object code is made by offering access to copy

+from a designated place, then offering equivalent access to copy the

+source code from the same place satisfies the requirement to

+distribute the source code, even though third parties are not

+compelled to copy the source along with the object code.

+

+  5. A program that contains no derivative of any portion of the

+Library, but is designed to work with the Library by being compiled or

+linked with it, is called a "work that uses the Library".  Such a

+work, in isolation, is not a derivative work of the Library, and

+therefore falls outside the scope of this License.

+

+  However, linking a "work that uses the Library" with the Library

+creates an executable that is a derivative of the Library (because it

+contains portions of the Library), rather than a "work that uses the

+library".  The executable is therefore covered by this License.

+Section 6 states terms for distribution of such executables.

+

+  When a "work that uses the Library" uses material from a header file

+that is part of the Library, the object code for the work may be a

+derivative work of the Library even though the source code is not.

+Whether this is true is especially significant if the work can be

+linked without the Library, or if the work is itself a library.  The

+threshold for this to be true is not precisely defined by law.

+

+  If such an object file uses only numerical parameters, data

+structure layouts and accessors, and small macros and small inline

+functions (ten lines or less in length), then the use of the object

+file is unrestricted, regardless of whether it is legally a derivative

+work.  (Executables containing this object code plus portions of the

+Library will still fall under Section 6.)

+

+  Otherwise, if the work is a derivative of the Library, you may

+distribute the object code for the work under the terms of Section 6.

+Any executables containing that work also fall under Section 6,

+whether or not they are linked directly with the Library itself.

+

+  6. As an exception to the Sections above, you may also combine or

+link a "work that uses the Library" with the Library to produce a

+work containing portions of the Library, and distribute that work

+under terms of your choice, provided that the terms permit

+modification of the work for the customer's own use and reverse

+engineering for debugging such modifications.

+

+  You must give prominent notice with each copy of the work that the

+Library is used in it and that the Library and its use are covered by

+this License.  You must supply a copy of this License.  If the work

+during execution displays copyright notices, you must include the

+copyright notice for the Library among them, as well as a reference

+directing the user to the copy of this License.  Also, you must do one

+of these things:

+

+    a) Accompany the work with the complete corresponding

+    machine-readable source code for the Library including whatever

+    changes were used in the work (which must be distributed under

+    Sections 1 and 2 above); and, if the work is an executable linked

+    with the Library, with the complete machine-readable "work that

+    uses the Library", as object code and/or source code, so that the

+    user can modify the Library and then relink to produce a modified

+    executable containing the modified Library.  (It is understood

+    that the user who changes the contents of definitions files in the

+    Library will not necessarily be able to recompile the application

+    to use the modified definitions.)

+

+    b) Use a suitable shared library mechanism for linking with the

+    Library.  A suitable mechanism is one that (1) uses at run time a

+    copy of the library already present on the user's computer system,

+    rather than copying library functions into the executable, and (2)

+    will operate properly with a modified version of the library, if

+    the user installs one, as long as the modified version is

+    interface-compatible with the version that the work was made with.

+

+    c) Accompany the work with a written offer, valid for at

+    least three years, to give the same user the materials

+    specified in Subsection 6a, above, for a charge no more

+    than the cost of performing this distribution.

+

+    d) If distribution of the work is made by offering access to copy

+    from a designated place, offer equivalent access to copy the above

+    specified materials from the same place.

+

+    e) Verify that the user has already received a copy of these

+    materials or that you have already sent this user a copy.

+

+  For an executable, the required form of the "work that uses the

+Library" must include any data and utility programs needed for

+reproducing the executable from it.  However, as a special exception,

+the materials to be distributed need not include anything that is

+normally distributed (in either source or binary form) with the major

+components (compiler, kernel, and so on) of the operating system on

+which the executable runs, unless that component itself accompanies

+the executable.

+

+  It may happen that this requirement contradicts the license

+restrictions of other proprietary libraries that do not normally

+accompany the operating system.  Such a contradiction means you cannot

+use both them and the Library together in an executable that you

+distribute.

+

+  7. You may place library facilities that are a work based on the

+Library side-by-side in a single library together with other library

+facilities not covered by this License, and distribute such a combined

+library, provided that the separate distribution of the work based on

+the Library and of the other library facilities is otherwise

+permitted, and provided that you do these two things:

+

+    a) Accompany the combined library with a copy of the same work

+    based on the Library, uncombined with any other library

+    facilities.  This must be distributed under the terms of the

+    Sections above.

+

+    b) Give prominent notice with the combined library of the fact

+    that part of it is a work based on the Library, and explaining

+    where to find the accompanying uncombined form of the same work.

+

+  8. You may not copy, modify, sublicense, link with, or distribute

+the Library except as expressly provided under this License.  Any

+attempt otherwise to copy, modify, sublicense, link with, or

+distribute the Library is void, and will automatically terminate your

+rights under this License.  However, parties who have received copies,

+or rights, from you under this License will not have their licenses

+terminated so long as such parties remain in full compliance.

+

+  9. You are not required to accept this License, since you have not

+signed it.  However, nothing else grants you permission to modify or

+distribute the Library or its derivative works.  These actions are

+prohibited by law if you do not accept this License.  Therefore, by

+modifying or distributing the Library (or any work based on the

+Library), you indicate your acceptance of this License to do so, and

+all its terms and conditions for copying, distributing or modifying

+the Library or works based on it.

+

+  10. Each time you redistribute the Library (or any work based on the

+Library), the recipient automatically receives a license from the

+original licensor to copy, distribute, link with or modify the Library

+subject to these terms and conditions.  You may not impose any further

+restrictions on the recipients' exercise of the rights granted herein.

+You are not responsible for enforcing compliance by third parties with

+this License.

+

+  11. If, as a consequence of a court judgment or allegation of patent

+infringement or for any other reason (not limited to patent issues),

+conditions are imposed on you (whether by court order, agreement or

+otherwise) that contradict the conditions of this License, they do not

+excuse you from the conditions of this License.  If you cannot

+distribute so as to satisfy simultaneously your obligations under this

+License and any other pertinent obligations, then as a consequence you

+may not distribute the Library at all.  For example, if a patent

+license would not permit royalty-free redistribution of the Library by

+all those who receive copies directly or indirectly through you, then

+the only way you could satisfy both it and this License would be to

+refrain entirely from distribution of the Library.

+

+If any portion of this section is held invalid or unenforceable under any

+particular circumstance, the balance of the section is intended to apply,

+and the section as a whole is intended to apply in other circumstances.

+

+It is not the purpose of this section to induce you to infringe any

+patents or other property right claims or to contest validity of any

+such claims; this section has the sole purpose of protecting the

+integrity of the free software distribution system which is

+implemented by public license practices.  Many people have made

+generous contributions to the wide range of software distributed

+through that system in reliance on consistent application of that

+system; it is up to the author/donor to decide if he or she is willing

+to distribute software through any other system and a licensee cannot

+impose that choice.

+

+This section is intended to make thoroughly clear what is believed to

+be a consequence of the rest of this License.

+

+  12. If the distribution and/or use of the Library is restricted in

+certain countries either by patents or by copyrighted interfaces, the

+original copyright holder who places the Library under this License may add

+an explicit geographical distribution limitation excluding those countries,

+so that distribution is permitted only in or among countries not thus

+excluded.  In such case, this License incorporates the limitation as if

+written in the body of this License.

+

+  13. The Free Software Foundation may publish revised and/or new

+versions of the Lesser General Public License from time to time.

+Such new versions will be similar in spirit to the present version,

+but may differ in detail to address new problems or concerns.

+

+Each version is given a distinguishing version number.  If the Library

+specifies a version number of this License which applies to it and

+"any later version", you have the option of following the terms and

+conditions either of that version or of any later version published by

+the Free Software Foundation.  If the Library does not specify a

+license version number, you may choose any version ever published by

+the Free Software Foundation.

+

+  14. If you wish to incorporate parts of the Library into other free

+programs whose distribution conditions are incompatible with these,

+write to the author to ask for permission.  For software which is

+copyrighted by the Free Software Foundation, write to the Free

+Software Foundation; we sometimes make exceptions for this.  Our

+decision will be guided by the two goals of preserving the free status

+of all derivatives of our free software and of promoting the sharing

+and reuse of software generally.

+

+			    NO WARRANTY

+

+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO

+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.

+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR

+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY

+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE

+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR

+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE

+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME

+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

+

+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN

+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY

+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU

+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR

+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE

+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING

+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A

+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF

+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH

+DAMAGES.

+

+		     END OF TERMS AND CONDITIONS

+

+           How to Apply These Terms to Your New Libraries

+

+  If you develop a new library, and you want it to be of the greatest

+possible use to the public, we recommend making it free software that

+everyone can redistribute and change.  You can do so by permitting

+redistribution under these terms (or, alternatively, under the terms of the

+ordinary General Public License).

+

+  To apply these terms, attach the following notices to the library.  It is

+safest to attach them to the start of each source file to most effectively

+convey the exclusion of warranty; and each file should have at least the

+"copyright" line and a pointer to where the full notice is found.

+

+    <one line to give the library's name and a brief idea of what it does.>

+    Copyright (C) <year>  <name of author>

+

+    This library is free software; you can redistribute it and/or

+    modify it under the terms of the GNU Lesser General Public

+    License as published by the Free Software Foundation; either

+    version 2.1 of the License, or (at your option) any later version.

+

+    This library is distributed in the hope that it will be useful,

+    but WITHOUT ANY WARRANTY; without even the implied warranty of

+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

+    Lesser General Public License for more details.

+

+    You should have received a copy of the GNU Lesser General Public

+    License along with this library; if not, write to the Free Software

+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

+

+Also add information on how to contact you by electronic and paper mail.

+

+You should also get your employer (if you work as a programmer) or your

+school, if any, to sign a "copyright disclaimer" for the library, if

+necessary.  Here is a sample; alter the names:

+

+  Yoyodyne, Inc., hereby disclaims all copyright interest in the

+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.

+

+  <signature of Ty Coon>, 1 April 1990

+  Ty Coon, President of Vice

+

+That's all there is to it!

+

+

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advhr/css/advhr.css
@@ -1,1 +1,6 @@
+input.radio {border:1px none #000; background:transparent; vertical-align:middle;}

+.panel_wrapper div.current {height:80px;}

+#width {width:50px; vertical-align:middle;}

+#width2 {width:50px; vertical-align:middle;}

+#size {width:100px;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advhr/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js
@@ -1,1 +1,57 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.AdvancedHRPlugin', {

+		init : function(ed, url) {

+			// Register commands

+			ed.addCommand('mceAdvancedHr', function() {

+				ed.windowManager.open({

+					file : url + '/rule.htm',

+					width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),

+					height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			// Register buttons

+			ed.addButton('advhr', {

+				title : 'advhr.advhr_desc',

+				cmd : 'mceAdvancedHr'

+			});

+

+			ed.onNodeChange.add(function(ed, cm, n) {

+				cm.setActive('advhr', n.nodeName == 'HR');

+			});

+

+			ed.onClick.add(function(ed, e) {

+				e = e.target;

+

+				if (e.nodeName === 'HR')

+					ed.selection.select(e);

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Advanced HR',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advhr/js/rule.js
@@ -1,1 +1,44 @@
+var AdvHRDialog = {

+	init : function(ed) {

+		var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;

+

+		w = dom.getAttrib(n, 'width');

+		f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');

+		f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';

+		f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');

+		selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');

+	},

+

+	update : function() {

+		var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';

+

+		h = '<hr';

+

+		if (f.size.value) {

+			h += ' size="' + f.size.value + '"';

+			st += ' height:' + f.size.value + 'px;';

+		}

+

+		if (f.width.value) {

+			h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';

+			st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';

+		}

+

+		if (f.noshade.checked) {

+			h += ' noshade="noshade"';

+			st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';

+		}

+

+		if (ed.settings.inline_styles)

+			h += ' style="' + tinymce.trim(st) + '"';

+

+		h += ' />';

+

+		ed.execCommand("mceInsertContent", false, h);

+		tinyMCEPopup.close();

+	}

+};

+

+tinyMCEPopup.requireLangPack();

+tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.advhr_dlg',{size:"Height",noshade:"No Shadow",width:"Width",normal:"Normal",widthunits:"Units"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advhr/rule.htm
@@ -1,1 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advhr.advhr_desc}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/rule.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<link href="css/advhr.css" rel="stylesheet" type="text/css" />

+</head>

+<body role="application">

+<form onsubmit="AdvHRDialog.update();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+					<tr role="group" aria-labelledby="width_label">

+						<td><label id="width_label" for="width">{#advhr_dlg.width}</label></td>

+						<td class="nowrap">

+							<input id="width" name="width" type="text" value="" class="mceFocus" />

+							<span style="display:none;" id="width_unit_label">{#advhr_dlg.widthunits}</span>

+							<select name="width2" id="width2" aria-labelledby="width_unit_label">

+								<option value="">px</option>

+								<option value="%">%</option>

+							</select>

+						</td>

+					</tr>

+					<tr>

+						<td><label for="size">{#advhr_dlg.size}</label></td>

+						<td><select id="size" name="size">

+							<option value="">{#advhr_dlg.normal}</option>

+							<option value="1">1</option>

+							<option value="2">2</option>

+							<option value="3">3</option>

+							<option value="4">4</option>

+							<option value="5">5</option>

+						</select></td>

+					</tr>

+					<tr>

+						<td><label for="noshade">{#advhr_dlg.noshade}</label></td>

+						<td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>

+					</tr>

+			</table>

+		</div>

+	</div>

+

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#insert}" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advimage/css/advimage.css
@@ -1,1 +1,14 @@
+#src_list, #over_list, #out_list {width:280px;}

+.mceActionPanel {margin-top:7px;}

+.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}

+.checkbox {border:0;}

+.panel_wrapper div.current {height:305px;}

+#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}

+#align, #classlist {width:150px;}

+#width, #height {vertical-align:middle; width:50px; text-align:center;}

+#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}

+#class_list {width:180px;}

+input {width: 280px;}

+#constrain, #onmousemovecheck {width:auto;}

+#id, #dir, #lang, #usemap, #longdesc {width:200px;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advimage/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js
@@ -1,1 +1,50 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.AdvancedImagePlugin', {

+		init : function(ed, url) {

+			// Register commands

+			ed.addCommand('mceAdvImage', function() {

+				// Internal image object like a flash placeholder

+				if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1)

+					return;

+

+				ed.windowManager.open({

+					file : url + '/image.htm',

+					width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),

+					height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			// Register buttons

+			ed.addButton('image', {

+				title : 'advimage.image_desc',

+				cmd : 'mceAdvImage'

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Advanced image',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advimage/image.htm
@@ -1,1 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advimage_dlg.dialog_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/image.js"></script>

+	<link href="css/advimage.css" rel="stylesheet" type="text/css" />

+</head>

+<body id="advimage" style="display: none" role="application" aria-labelledby="app_title">

+	<span id="app_title" style="display:none">{#advimage_dlg.dialog_title}</span>

+	<form onsubmit="ImageDialog.insert();return false;" action="#"> 

+		<div class="tabs">

+			<ul>

+				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>

+				<li id="appearance_tab" aria-controls="appearance_panel"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>

+				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="general_panel" class="panel current">

+				<fieldset>

+						<legend>{#advimage_dlg.general}</legend>

+

+						<table role="presentation" class="properties">

+							<tr>

+								<td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>

+								<td colspan="2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr> 

+										<td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td> 

+										<td id="srcbrowsercontainer">&nbsp;</td>

+									</tr>

+								</table></td>

+							</tr>

+							<tr>

+								<td><label for="src_list">{#advimage_dlg.image_list}</label></td>

+								<td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>

+							</tr>

+							<tr> 

+								<td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td> 

+								<td colspan="2"><input id="alt" name="alt" type="text" value="" /></td> 

+							</tr> 

+							<tr> 

+								<td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td> 

+								<td colspan="2"><input id="title" name="title" type="text" value="" /></td> 

+							</tr>

+						</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#advimage_dlg.preview}</legend>

+					<div id="prev"></div>

+				</fieldset>

+			</div>

+

+			<div id="appearance_panel" class="panel">

+				<fieldset>

+					<legend>{#advimage_dlg.tab_appearance}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr> 

+							<td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td> 

+							<td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();"> 

+									<option value="">{#not_set}</option> 

+									<option value="baseline">{#advimage_dlg.align_baseline}</option>

+									<option value="top">{#advimage_dlg.align_top}</option>

+									<option value="middle">{#advimage_dlg.align_middle}</option>

+									<option value="bottom">{#advimage_dlg.align_bottom}</option>

+									<option value="text-top">{#advimage_dlg.align_texttop}</option>

+									<option value="text-bottom">{#advimage_dlg.align_textbottom}</option>

+									<option value="left">{#advimage_dlg.align_left}</option>

+									<option value="right">{#advimage_dlg.align_right}</option>

+								</select> 

+							</td>

+							<td rowspan="6" valign="top">

+								<div class="alignPreview">

+									<img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />

+									Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam

+									nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum

+									edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam

+									erat volutpat.

+								</div>

+							</td>

+						</tr>

+

+						<tr role="group" aria-labelledby="widthlabel">

+							<td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>

+							<td class="nowrap">

+								<span style="display:none" id="width_voiceLabel">{#advimage_dlg.width}</span>

+								<input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" aria-labelledby="width_voiceLabel" /> x 

+								<span style="display:none" id="height_voiceLabel">{#advimage_dlg.height}</span>

+								<input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" aria-labelledby="height_voiceLabel" /> px

+							</td>

+						</tr>

+

+						<tr>

+							<td>&nbsp;</td>

+							<td><table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>

+										<td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>

+									</tr>

+								</table></td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td> 

+							<td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" />

+							</td>

+						</tr>

+

+						<tr> 

+							<td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td> 

+							<td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td> 

+							<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td> 

+						</tr>

+

+						<tr>

+							<td><label for="class_list">{#class_name}</label></td>

+							<td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td> 

+							<td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td> 

+						</tr>

+

+						<!-- <tr>

+							<td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td> 

+							<td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td> 

+						</tr> -->

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="advanced_panel" class="panel">

+				<fieldset>

+					<legend>{#advimage_dlg.swap_image}</legend>

+

+					<input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" aria-controls="onmouseoversrc onmouseoutsrc" />

+					<label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">

+							<tr>

+								<td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td> 

+								<td><table role="presentation" border="0" cellspacing="0" cellpadding="0"> 

+									<tr> 

+										<td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td> 

+										<td id="onmouseoversrccontainer">&nbsp;</td>

+									</tr>

+								</table></td>

+							</tr>

+							<tr>

+								<td><label for="over_list">{#advimage_dlg.image_list}</label></td>

+								<td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>

+							</tr>

+							<tr> 

+								<td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td> 

+								<td class="column2"><table role="presentation" border="0" cellspacing="0" cellpadding="0"> 

+									<tr> 

+										<td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td> 

+										<td id="onmouseoutsrccontainer">&nbsp;</td>

+									</tr> 

+								</table></td> 

+							</tr>

+							<tr>

+								<td><label for="out_list">{#advimage_dlg.image_list}</label></td>

+								<td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>

+							</tr>

+					</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#advimage_dlg.misc}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td> 

+							<td><input id="id" name="id" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td> 

+							<td>

+								<select id="dir" name="dir" onchange="ImageDialog.changeAppearance();"> 

+										<option value="">{#not_set}</option> 

+										<option value="ltr">{#advimage_dlg.ltr}</option> 

+										<option value="rtl">{#advimage_dlg.rtl}</option> 

+								</select>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td> 

+							<td>

+								<input id="lang" name="lang" type="text" value="" />

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td> 

+							<td>

+								<input id="usemap" name="usemap" type="text" value="" />

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>

+							<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input id="longdesc" name="longdesc" type="text" value="" /></td>

+										<td id="longdesccontainer">&nbsp;</td>

+									</tr>

+							</table></td> 

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<input type="submit" id="insert" name="insert" value="{#insert}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body> 

+</html> 

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/advimage/img/sample.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advimage/js/image.js
@@ -1,1 +1,463 @@
+var ImageDialog = {

+	preInit : function() {

+		var url;

+

+		tinyMCEPopup.requireLangPack();

+

+		if (url = tinyMCEPopup.getParam("external_image_list_url"))

+			document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

+	},

+

+	init : function(ed) {

+		var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList');

+

+		tinyMCEPopup.resizeToInnerSize();

+		this.fillClassList('class_list');

+		this.fillFileList('src_list', fl);

+		this.fillFileList('over_list', fl);

+		this.fillFileList('out_list', fl);

+		TinyMCE_EditableSelects.init();

+

+		if (n.nodeName == 'IMG') {

+			nl.src.value = dom.getAttrib(n, 'src');

+			nl.width.value = dom.getAttrib(n, 'width');

+			nl.height.value = dom.getAttrib(n, 'height');

+			nl.alt.value = dom.getAttrib(n, 'alt');

+			nl.title.value = dom.getAttrib(n, 'title');

+			nl.vspace.value = this.getAttrib(n, 'vspace');

+			nl.hspace.value = this.getAttrib(n, 'hspace');

+			nl.border.value = this.getAttrib(n, 'border');

+			selectByValue(f, 'align', this.getAttrib(n, 'align'));

+			selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);

+			nl.style.value = dom.getAttrib(n, 'style');

+			nl.id.value = dom.getAttrib(n, 'id');

+			nl.dir.value = dom.getAttrib(n, 'dir');

+			nl.lang.value = dom.getAttrib(n, 'lang');

+			nl.usemap.value = dom.getAttrib(n, 'usemap');

+			nl.longdesc.value = dom.getAttrib(n, 'longdesc');

+			nl.insert.value = ed.getLang('update');

+

+			if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))

+				nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');

+

+			if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))

+				nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');

+

+			if (ed.settings.inline_styles) {

+				// Move attribs to styles

+				if (dom.getAttrib(n, 'align'))

+					this.updateStyle('align');

+

+				if (dom.getAttrib(n, 'hspace'))

+					this.updateStyle('hspace');

+

+				if (dom.getAttrib(n, 'border'))

+					this.updateStyle('border');

+

+				if (dom.getAttrib(n, 'vspace'))

+					this.updateStyle('vspace');

+			}

+		}

+

+		// Setup browse button

+		document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');

+		if (isVisible('srcbrowser'))

+			document.getElementById('src').style.width = '260px';

+

+		// Setup browse button

+		document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');

+		if (isVisible('overbrowser'))

+			document.getElementById('onmouseoversrc').style.width = '260px';

+

+		// Setup browse button

+		document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');

+		if (isVisible('outbrowser'))

+			document.getElementById('onmouseoutsrc').style.width = '260px';

+

+		// If option enabled default contrain proportions to checked

+		if (ed.getParam("advimage_constrain_proportions", true))

+			f.constrain.checked = true;

+

+		// Check swap image if valid data

+		if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)

+			this.setSwapImage(true);

+		else

+			this.setSwapImage(false);

+

+		this.changeAppearance();

+		this.showPreviewImage(nl.src.value, 1);

+	},

+

+	insert : function(file, title) {

+		var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];

+

+		if (f.src.value === '') {

+			if (ed.selection.getNode().nodeName == 'IMG') {

+				ed.dom.remove(ed.selection.getNode());

+				ed.execCommand('mceRepaint');

+			}

+

+			tinyMCEPopup.close();

+			return;

+		}

+

+		if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {

+			if (!f.alt.value) {

+				tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {

+					if (s)

+						t.insertAndClose();

+				});

+

+				return;

+			}

+		}

+

+		t.insertAndClose();

+	},

+

+	insertAndClose : function() {

+		var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;

+

+		tinyMCEPopup.restoreSelection();

+

+		// Fixes crash in Safari

+		if (tinymce.isWebKit)

+			ed.getWin().focus();

+

+		if (!ed.settings.inline_styles) {

+			args = {

+				vspace : nl.vspace.value,

+				hspace : nl.hspace.value,

+				border : nl.border.value,

+				align : getSelectValue(f, 'align')

+			};

+		} else {

+			// Remove deprecated values

+			args = {

+				vspace : '',

+				hspace : '',

+				border : '',

+				align : ''

+			};

+		}

+

+		tinymce.extend(args, {

+			src : nl.src.value.replace(/ /g, '%20'),

+			width : nl.width.value,

+			height : nl.height.value,

+			alt : nl.alt.value,

+			title : nl.title.value,

+			'class' : getSelectValue(f, 'class_list'),

+			style : nl.style.value,

+			id : nl.id.value,

+			dir : nl.dir.value,

+			lang : nl.lang.value,

+			usemap : nl.usemap.value,

+			longdesc : nl.longdesc.value

+		});

+

+		args.onmouseover = args.onmouseout = '';

+

+		if (f.onmousemovecheck.checked) {

+			if (nl.onmouseoversrc.value)

+				args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";

+

+			if (nl.onmouseoutsrc.value)

+				args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";

+		}

+

+		el = ed.selection.getNode();

+

+		if (el && el.nodeName == 'IMG') {

+			ed.dom.setAttribs(el, args);

+		} else {

+			tinymce.each(args, function(value, name) {

+				if (value === "") {

+					delete args[name];

+				}

+			});

+

+			ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});

+			ed.undoManager.add();

+		}

+

+		tinyMCEPopup.editor.execCommand('mceRepaint');

+		tinyMCEPopup.editor.focus();

+		tinyMCEPopup.close();

+	},

+

+	getAttrib : function(e, at) {

+		var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;

+

+		if (ed.settings.inline_styles) {

+			switch (at) {

+				case 'align':

+					if (v = dom.getStyle(e, 'float'))

+						return v;

+

+					if (v = dom.getStyle(e, 'vertical-align'))

+						return v;

+

+					break;

+

+				case 'hspace':

+					v = dom.getStyle(e, 'margin-left')

+					v2 = dom.getStyle(e, 'margin-right');

+

+					if (v && v == v2)

+						return parseInt(v.replace(/[^0-9]/g, ''));

+

+					break;

+

+				case 'vspace':

+					v = dom.getStyle(e, 'margin-top')

+					v2 = dom.getStyle(e, 'margin-bottom');

+					if (v && v == v2)

+						return parseInt(v.replace(/[^0-9]/g, ''));

+

+					break;

+

+				case 'border':

+					v = 0;

+

+					tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {

+						sv = dom.getStyle(e, 'border-' + sv + '-width');

+

+						// False or not the same as prev

+						if (!sv || (sv != v && v !== 0)) {

+							v = 0;

+							return false;

+						}

+

+						if (sv)

+							v = sv;

+					});

+

+					if (v)

+						return parseInt(v.replace(/[^0-9]/g, ''));

+

+					break;

+			}

+		}

+

+		if (v = dom.getAttrib(e, at))

+			return v;

+

+		return '';

+	},

+

+	setSwapImage : function(st) {

+		var f = document.forms[0];

+

+		f.onmousemovecheck.checked = st;

+		setBrowserDisabled('overbrowser', !st);

+		setBrowserDisabled('outbrowser', !st);

+

+		if (f.over_list)

+			f.over_list.disabled = !st;

+

+		if (f.out_list)

+			f.out_list.disabled = !st;

+

+		f.onmouseoversrc.disabled = !st;

+		f.onmouseoutsrc.disabled  = !st;

+	},

+

+	fillClassList : function(id) {

+		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

+

+		if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {

+			cl = [];

+

+			tinymce.each(v.split(';'), function(v) {

+				var p = v.split('=');

+

+				cl.push({'title' : p[0], 'class' : p[1]});

+			});

+		} else

+			cl = tinyMCEPopup.editor.dom.getClasses();

+

+		if (cl.length > 0) {

+			lst.options.length = 0;

+			lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');

+

+			tinymce.each(cl, function(o) {

+				lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);

+			});

+		} else

+			dom.remove(dom.getParent(id, 'tr'));

+	},

+

+	fillFileList : function(id, l) {

+		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

+

+		l = typeof(l) === 'function' ? l() : window[l];

+		lst.options.length = 0;

+

+		if (l && l.length > 0) {

+			lst.options[lst.options.length] = new Option('', '');

+

+			tinymce.each(l, function(o) {

+				lst.options[lst.options.length] = new Option(o[0], o[1]);

+			});

+		} else

+			dom.remove(dom.getParent(id, 'tr'));

+	},

+

+	resetImageData : function() {

+		var f = document.forms[0];

+

+		f.elements.width.value = f.elements.height.value = '';

+	},

+

+	updateImageData : function(img, st) {

+		var f = document.forms[0];

+

+		if (!st) {

+			f.elements.width.value = img.width;

+			f.elements.height.value = img.height;

+		}

+

+		this.preloadImg = img;

+	},

+

+	changeAppearance : function() {

+		var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');

+

+		if (img) {

+			if (ed.getParam('inline_styles')) {

+				ed.dom.setAttrib(img, 'style', f.style.value);

+			} else {

+				img.align = f.align.value;

+				img.border = f.border.value;

+				img.hspace = f.hspace.value;

+				img.vspace = f.vspace.value;

+			}

+		}

+	},

+

+	changeHeight : function() {

+		var f = document.forms[0], tp, t = this;

+

+		if (!f.constrain.checked || !t.preloadImg) {

+			return;

+		}

+

+		if (f.width.value == "" || f.height.value == "")

+			return;

+

+		tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;

+		f.height.value = tp.toFixed(0);

+	},

+

+	changeWidth : function() {

+		var f = document.forms[0], tp, t = this;

+

+		if (!f.constrain.checked || !t.preloadImg) {

+			return;

+		}

+

+		if (f.width.value == "" || f.height.value == "")

+			return;

+

+		tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;

+		f.width.value = tp.toFixed(0);

+	},

+

+	updateStyle : function(ty) {

+		var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});

+

+		if (tinyMCEPopup.editor.settings.inline_styles) {

+			// Handle align

+			if (ty == 'align') {

+				dom.setStyle(img, 'float', '');

+				dom.setStyle(img, 'vertical-align', '');

+

+				v = getSelectValue(f, 'align');

+				if (v) {

+					if (v == 'left' || v == 'right')

+						dom.setStyle(img, 'float', v);

+					else

+						img.style.verticalAlign = v;

+				}

+			}

+

+			// Handle border

+			if (ty == 'border') {

+				b = img.style.border ? img.style.border.split(' ') : [];

+				bStyle = dom.getStyle(img, 'border-style');

+				bColor = dom.getStyle(img, 'border-color');

+

+				dom.setStyle(img, 'border', '');

+

+				v = f.border.value;

+				if (v || v == '0') {

+					if (v == '0')

+						img.style.border = isIE ? '0' : '0 none none';

+					else {

+						if (b.length == 3 && b[isIE ? 2 : 1])

+							bStyle = b[isIE ? 2 : 1];

+						else if (!bStyle || bStyle == 'none')

+							bStyle = 'solid';

+						if (b.length == 3 && b[isIE ? 0 : 2])

+							bColor = b[isIE ? 0 : 2];

+						else if (!bColor || bColor == 'none')

+							bColor = 'black';

+						img.style.border = v + 'px ' + bStyle + ' ' + bColor;

+					}

+				}

+			}

+

+			// Handle hspace

+			if (ty == 'hspace') {

+				dom.setStyle(img, 'marginLeft', '');

+				dom.setStyle(img, 'marginRight', '');

+

+				v = f.hspace.value;

+				if (v) {

+					img.style.marginLeft = v + 'px';

+					img.style.marginRight = v + 'px';

+				}

+			}

+

+			// Handle vspace

+			if (ty == 'vspace') {

+				dom.setStyle(img, 'marginTop', '');

+				dom.setStyle(img, 'marginBottom', '');

+

+				v = f.vspace.value;

+				if (v) {

+					img.style.marginTop = v + 'px';

+					img.style.marginBottom = v + 'px';

+				}

+			}

+

+			// Merge

+			dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');

+		}

+	},

+

+	changeMouseMove : function() {

+	},

+

+	showPreviewImage : function(u, st) {

+		if (!u) {

+			tinyMCEPopup.dom.setHTML('prev', '');

+			return;

+		}

+

+		if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))

+			this.resetImageData();

+

+		u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);

+

+		if (!st)

+			tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');

+		else

+			tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');

+	}

+};

+

+ImageDialog.preInit();

+tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","missing_alt":"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlink/css/advlink.css
@@ -1,1 +1,9 @@
+.mceLinkList, .mceAnchorList, #targetlist {width:280px;}

+.mceActionPanel {margin-top:7px;}

+.panel_wrapper div.current {height:320px;}

+#classlist, #title, #href {width:280px;}

+#popupurl, #popupname {width:200px;}

+#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}

+#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}

+#events_panel input {width:200px;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlink/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js
@@ -1,1 +1,61 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.AdvancedLinkPlugin', {

+		init : function(ed, url) {

+			this.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceAdvLink', function() {

+				var se = ed.selection;

+

+				// No selection and not in link

+				if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))

+					return;

+

+				ed.windowManager.open({

+					file : url + '/link.htm',

+					width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),

+					height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			// Register buttons

+			ed.addButton('link', {

+				title : 'advlink.link_desc',

+				cmd : 'mceAdvLink'

+			});

+

+			ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');

+

+			ed.onNodeChange.add(function(ed, cm, n, co) {

+				cm.setDisabled('link', co && n.nodeName != 'A');

+				cm.setActive('link', n.nodeName == 'A' && !n.name);

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Advanced link',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlink/js/advlink.js
@@ -1,1 +1,540 @@
+/* Functions for the advlink plugin popup */

+

+tinyMCEPopup.requireLangPack();

+

+var templates = {

+	"window.open" : "window.open('${url}','${target}','${options}')"

+};

+

+function preinit() {

+	var url;

+

+	if (url = tinyMCEPopup.getParam("external_link_list_url"))

+		document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

+}

+

+function changeClass() {

+	var f = document.forms[0];

+

+	f.classes.value = getSelectValue(f, 'classlist');

+}

+

+function init() {

+	tinyMCEPopup.resizeToInnerSize();

+

+	var formObj = document.forms[0];

+	var inst = tinyMCEPopup.editor;

+	var elm = inst.selection.getNode();

+	var action = "insert";

+	var html;

+

+	document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');

+	document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');

+	document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');

+

+	// Link list

+	html = getLinkListHTML('linklisthref','href');

+	if (html == "")

+		document.getElementById("linklisthrefrow").style.display = 'none';

+	else

+		document.getElementById("linklisthrefcontainer").innerHTML = html;

+

+	// Anchor list

+	html = getAnchorListHTML('anchorlist','href');

+	if (html == "")

+		document.getElementById("anchorlistrow").style.display = 'none';

+	else

+		document.getElementById("anchorlistcontainer").innerHTML = html;

+

+	// Resize some elements

+	if (isVisible('hrefbrowser'))

+		document.getElementById('href').style.width = '260px';

+

+	if (isVisible('popupurlbrowser'))

+		document.getElementById('popupurl').style.width = '180px';

+

+	elm = inst.dom.getParent(elm, "A");

+	if (elm == null) {

+		var prospect = inst.dom.create("p", null, inst.selection.getContent());

+		if (prospect.childNodes.length === 1) {

+			elm = prospect.firstChild;

+		}

+	}

+

+	if (elm != null && elm.nodeName == "A")

+		action = "update";

+

+	formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); 

+

+	setPopupControlsDisabled(true);

+

+	if (action == "update") {

+		var href = inst.dom.getAttrib(elm, 'href');

+		var onclick = inst.dom.getAttrib(elm, 'onclick');

+

+		// Setup form data

+		setFormValue('href', href);

+		setFormValue('title', inst.dom.getAttrib(elm, 'title'));

+		setFormValue('id', inst.dom.getAttrib(elm, 'id'));

+		setFormValue('style', inst.dom.getAttrib(elm, "style"));

+		setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));

+		setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));

+		setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));

+		setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));

+		setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));

+		setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));

+		setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));

+		setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));

+		setFormValue('type', inst.dom.getAttrib(elm, 'type'));

+		setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));

+		setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));

+		setFormValue('onclick', onclick);

+		setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));

+		setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));

+		setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));

+		setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));

+		setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));

+		setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));

+		setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));

+		setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));

+		setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));

+		setFormValue('target', inst.dom.getAttrib(elm, 'target'));

+		setFormValue('classes', inst.dom.getAttrib(elm, 'class'));

+

+		// Parse onclick data

+		if (onclick != null && onclick.indexOf('window.open') != -1)

+			parseWindowOpen(onclick);

+		else

+			parseFunction(onclick);

+

+		// Select by the values

+		selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));

+		selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));

+		selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));

+		selectByValue(formObj, 'linklisthref', href);

+

+		if (href.charAt(0) == '#')

+			selectByValue(formObj, 'anchorlist', href);

+

+		addClassesToList('classlist', 'advlink_styles');

+

+		selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);

+		selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);

+	} else

+		addClassesToList('classlist', 'advlink_styles');

+}

+

+function checkPrefix(n) {

+	if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))

+		n.value = 'mailto:' + n.value;

+

+	if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))

+		n.value = 'http://' + n.value;

+}

+

+function setFormValue(name, value) {

+	document.forms[0].elements[name].value = value;

+}

+

+function parseWindowOpen(onclick) {

+	var formObj = document.forms[0];

+

+	// Preprocess center code

+	if (onclick.indexOf('return false;') != -1) {

+		formObj.popupreturn.checked = true;

+		onclick = onclick.replace('return false;', '');

+	} else

+		formObj.popupreturn.checked = false;

+

+	var onClickData = parseLink(onclick);

+

+	if (onClickData != null) {

+		formObj.ispopup.checked = true;

+		setPopupControlsDisabled(false);

+

+		var onClickWindowOptions = parseOptions(onClickData['options']);

+		var url = onClickData['url'];

+

+		formObj.popupname.value = onClickData['target'];

+		formObj.popupurl.value = url;

+		formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');

+		formObj.popupheight.value = getOption(onClickWindowOptions, 'height');

+

+		formObj.popupleft.value = getOption(onClickWindowOptions, 'left');

+		formObj.popuptop.value = getOption(onClickWindowOptions, 'top');

+

+		if (formObj.popupleft.value.indexOf('screen') != -1)

+			formObj.popupleft.value = "c";

+

+		if (formObj.popuptop.value.indexOf('screen') != -1)

+			formObj.popuptop.value = "c";

+

+		formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";

+		formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";

+		formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";

+		formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";

+		formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";

+		formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";

+		formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";

+

+		buildOnClick();

+	}

+}

+

+function parseFunction(onclick) {

+	var formObj = document.forms[0];

+	var onClickData = parseLink(onclick);

+

+	// TODO: Add stuff here

+}

+

+function getOption(opts, name) {

+	return typeof(opts[name]) == "undefined" ? "" : opts[name];

+}

+

+function setPopupControlsDisabled(state) {

+	var formObj = document.forms[0];

+

+	formObj.popupname.disabled = state;

+	formObj.popupurl.disabled = state;

+	formObj.popupwidth.disabled = state;

+	formObj.popupheight.disabled = state;

+	formObj.popupleft.disabled = state;

+	formObj.popuptop.disabled = state;

+	formObj.popuplocation.disabled = state;

+	formObj.popupscrollbars.disabled = state;

+	formObj.popupmenubar.disabled = state;

+	formObj.popupresizable.disabled = state;

+	formObj.popuptoolbar.disabled = state;

+	formObj.popupstatus.disabled = state;

+	formObj.popupreturn.disabled = state;

+	formObj.popupdependent.disabled = state;

+

+	setBrowserDisabled('popupurlbrowser', state);

+}

+

+function parseLink(link) {

+	link = link.replace(new RegExp('&#39;', 'g'), "'");

+

+	var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");

+

+	// Is function name a template function

+	var template = templates[fnName];

+	if (template) {

+		// Build regexp

+		var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));

+		var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";

+		var replaceStr = "";

+		for (var i=0; i<variableNames.length; i++) {

+			// Is string value

+			if (variableNames[i].indexOf("'${") != -1)

+				regExp += "'(.*)'";

+			else // Number value

+				regExp += "([0-9]*)";

+

+			replaceStr += "$" + (i+1);

+

+			// Cleanup variable name

+			variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");

+

+			if (i != variableNames.length-1) {

+				regExp += "\\s*,\\s*";

+				replaceStr += "<delim>";

+			} else

+				regExp += ".*";

+		}

+

+		regExp += "\\);?";

+

+		// Build variable array

+		var variables = [];

+		variables["_function"] = fnName;

+		var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');

+		for (var i=0; i<variableNames.length; i++)

+			variables[variableNames[i]] = variableValues[i];

+

+		return variables;

+	}

+

+	return null;

+}

+

+function parseOptions(opts) {

+	if (opts == null || opts == "")

+		return [];

+

+	// Cleanup the options

+	opts = opts.toLowerCase();

+	opts = opts.replace(/;/g, ",");

+	opts = opts.replace(/[^0-9a-z=,]/g, "");

+

+	var optionChunks = opts.split(',');

+	var options = [];

+

+	for (var i=0; i<optionChunks.length; i++) {

+		var parts = optionChunks[i].split('=');

+

+		if (parts.length == 2)

+			options[parts[0]] = parts[1];

+	}

+

+	return options;

+}

+

+function buildOnClick() {

+	var formObj = document.forms[0];

+

+	if (!formObj.ispopup.checked) {

+		formObj.onclick.value = "";

+		return;

+	}

+

+	var onclick = "window.open('";

+	var url = formObj.popupurl.value;

+

+	onclick += url + "','";

+	onclick += formObj.popupname.value + "','";

+

+	if (formObj.popuplocation.checked)

+		onclick += "location=yes,";

+

+	if (formObj.popupscrollbars.checked)

+		onclick += "scrollbars=yes,";

+

+	if (formObj.popupmenubar.checked)

+		onclick += "menubar=yes,";

+

+	if (formObj.popupresizable.checked)

+		onclick += "resizable=yes,";

+

+	if (formObj.popuptoolbar.checked)

+		onclick += "toolbar=yes,";

+

+	if (formObj.popupstatus.checked)

+		onclick += "status=yes,";

+

+	if (formObj.popupdependent.checked)

+		onclick += "dependent=yes,";

+

+	if (formObj.popupwidth.value != "")

+		onclick += "width=" + formObj.popupwidth.value + ",";

+

+	if (formObj.popupheight.value != "")

+		onclick += "height=" + formObj.popupheight.value + ",";

+

+	if (formObj.popupleft.value != "") {

+		if (formObj.popupleft.value != "c")

+			onclick += "left=" + formObj.popupleft.value + ",";

+		else

+			onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";

+	}

+

+	if (formObj.popuptop.value != "") {

+		if (formObj.popuptop.value != "c")

+			onclick += "top=" + formObj.popuptop.value + ",";

+		else

+			onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";

+	}

+

+	if (onclick.charAt(onclick.length-1) == ',')

+		onclick = onclick.substring(0, onclick.length-1);

+

+	onclick += "');";

+

+	if (formObj.popupreturn.checked)

+		onclick += "return false;";

+

+	// tinyMCE.debug(onclick);

+

+	formObj.onclick.value = onclick;

+

+	if (formObj.href.value == "")

+		formObj.href.value = url;

+}

+

+function setAttrib(elm, attrib, value) {

+	var formObj = document.forms[0];

+	var valueElm = formObj.elements[attrib.toLowerCase()];

+	var dom = tinyMCEPopup.editor.dom;

+

+	if (typeof(value) == "undefined" || value == null) {

+		value = "";

+

+		if (valueElm)

+			value = valueElm.value;

+	}

+

+	// Clean up the style

+	if (attrib == 'style')

+		value = dom.serializeStyle(dom.parseStyle(value), 'a');

+

+	dom.setAttrib(elm, attrib, value);

+}

+

+function getAnchorListHTML(id, target) {

+	var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";

+

+	for (i=0, len=nodes.length; i<len; i++) {

+		if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")

+			html += '<option value="#' + name + '">' + name + '</option>';

+	}

+

+	if (html == "")

+		return "";

+

+	html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"'

+		+ ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"'

+		+ '>'

+		+ '<option value="">---</option>'

+		+ html

+		+ '</select>';

+

+	return html;

+}

+

+function insertAction() {

+	var inst = tinyMCEPopup.editor;

+	var elm, elementArray, i;

+

+	elm = inst.selection.getNode();

+	checkPrefix(document.forms[0].href);

+

+	elm = inst.dom.getParent(elm, "A");

+

+	// Remove element if there is no href

+	if (!document.forms[0].href.value) {

+		i = inst.selection.getBookmark();

+		inst.dom.remove(elm, 1);

+		inst.selection.moveToBookmark(i);

+		tinyMCEPopup.execCommand("mceEndUndoLevel");

+		tinyMCEPopup.close();

+		return;

+	}

+

+	// Create new anchor elements

+	if (elm == null) {

+		inst.getDoc().execCommand("unlink", false, null);

+		tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});

+

+		elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});

+		for (i=0; i<elementArray.length; i++)

+			setAllAttribs(elm = elementArray[i]);

+	} else

+		setAllAttribs(elm);

+

+	// Don't move caret if selection was image

+	if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {

+		inst.focus();

+		inst.selection.select(elm);

+		inst.selection.collapse(0);

+		tinyMCEPopup.storeSelection();

+	}

+

+	tinyMCEPopup.execCommand("mceEndUndoLevel");

+	tinyMCEPopup.close();

+}

+

+function setAllAttribs(elm) {

+	var formObj = document.forms[0];

+	var href = formObj.href.value.replace(/ /g, '%20');

+	var target = getSelectValue(formObj, 'targetlist');

+

+	setAttrib(elm, 'href', href);

+	setAttrib(elm, 'title');

+	setAttrib(elm, 'target', target == '_self' ? '' : target);

+	setAttrib(elm, 'id');

+	setAttrib(elm, 'style');

+	setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));

+	setAttrib(elm, 'rel');

+	setAttrib(elm, 'rev');

+	setAttrib(elm, 'charset');

+	setAttrib(elm, 'hreflang');

+	setAttrib(elm, 'dir');

+	setAttrib(elm, 'lang');

+	setAttrib(elm, 'tabindex');

+	setAttrib(elm, 'accesskey');

+	setAttrib(elm, 'type');

+	setAttrib(elm, 'onfocus');

+	setAttrib(elm, 'onblur');

+	setAttrib(elm, 'onclick');

+	setAttrib(elm, 'ondblclick');

+	setAttrib(elm, 'onmousedown');

+	setAttrib(elm, 'onmouseup');

+	setAttrib(elm, 'onmouseover');

+	setAttrib(elm, 'onmousemove');

+	setAttrib(elm, 'onmouseout');

+	setAttrib(elm, 'onkeypress');

+	setAttrib(elm, 'onkeydown');

+	setAttrib(elm, 'onkeyup');

+

+	// Refresh in old MSIE

+	if (tinyMCE.isMSIE5)

+		elm.outerHTML = elm.outerHTML;

+}

+

+function getSelectValue(form_obj, field_name) {

+	var elm = form_obj.elements[field_name];

+

+	if (!elm || elm.options == null || elm.selectedIndex == -1)

+		return "";

+

+	return elm.options[elm.selectedIndex].value;

+}

+

+function getLinkListHTML(elm_id, target_form_element, onchange_func) {

+	if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)

+		return "";

+

+	var html = "";

+

+	html += '<select id="' + elm_id + '" name="' + elm_id + '"';

+	html += ' class="mceLinkList" onfoc2us="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';

+	html += 'this.options[this.selectedIndex].value;';

+

+	if (typeof(onchange_func) != "undefined")

+		html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';

+

+	html += '"><option value="">---</option>';

+

+	for (var i=0; i<tinyMCELinkList.length; i++)

+		html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';

+

+	html += '</select>';

+

+	return html;

+

+	// tinyMCE.debug('-- image list start --', html, '-- image list end --');

+}

+

+function getTargetListHTML(elm_id, target_form_element) {

+	var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');

+	var html = '';

+

+	html += '<select id="' + elm_id + '" name="' + elm_id + '" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';

+	html += 'this.options[this.selectedIndex].value;">';

+	html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';

+	html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';

+	html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';

+	html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';

+

+	for (var i=0; i<targets.length; i++) {

+		var key, value;

+

+		if (targets[i] == "")

+			continue;

+

+		key = targets[i].split('=')[0];

+		value = targets[i].split('=')[1];

+

+		html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';

+	}

+

+	html += '</select>';

+

+	return html;

+}

+

+// While loading

+preinit();

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlink/link.htm
@@ -1,1 +1,339 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advlink_dlg.title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="js/advlink.js"></script>

+	<link href="css/advlink.css" rel="stylesheet" type="text/css" />

+</head>

+<body id="advlink" style="display: none" role="application" onload="javascript:mcTabs.displayTab('general_tab','general_panel', true);" aria-labelledby="app_label">

+	<span class="mceVoiceLabel" id="app_label" style="display:none;">{#advlink_dlg.title}</span>

+	<form onsubmit="insertAction();return false;" action="#">

+		<div class="tabs" role="presentation">

+			<ul>

+				<li id="general_tab" class="current" aria-controls="general_panel" ><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>

+				<li id="popup_tab" aria-controls="popup_panel" ><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>

+				<li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>

+				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper" role="presentation">

+			<div id="general_panel" class="panel current">

+				<fieldset>

+					<legend>{#advlink_dlg.general_props}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0" role="presentation">

+						<tr>

+							<td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>

+								<td><table border="0" cellspacing="0" cellpadding="0">

+							<tr>

+								<td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" aria-required="true" /></td>

+								<td id="hrefbrowsercontainer">&nbsp;</td>

+							</tr>

+							</table></td>

+						</tr>

+						<tr id="linklisthrefrow">

+							<td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>

+							<td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>

+						</tr>

+						<tr id="anchorlistrow">

+							<td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>

+							<td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>

+						</tr>

+						<tr>

+							<td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>

+							<td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>

+							<td><input id="title" name="title" type="text" value="" /></td>

+						</tr>

+						<tr>

+							<td><label id="classlabel" for="classlist">{#class_name}</label></td>

+							<td>

+								 <select id="classlist" name="classlist" onchange="changeClass();">

+									<option value="" selected="selected">{#not_set}</option>

+								 </select>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="popup_panel" class="panel">

+				<fieldset>

+					<legend>{#advlink_dlg.popup_props}</legend>

+

+					<input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />

+					<label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>

+

+					<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

+						<tr>

+							<td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>

+							<td>

+								<table border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>

+										<td id="popupurlbrowsercontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>

+							<td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>

+						</tr>

+						<tr role="group" aria-labelledby="popup_size_label">

+							<td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label>&nbsp;</td>

+							<td class="nowrap">

+								<span style="display:none" id="width_voiceLabel">{#advlink_dlg.width}</span>

+								<input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" aria-labelledby="width_voiceLabel" /> x

+								<span style="display:none" id="height_voiceLabel">{#advlink_dlg.height}</span>

+								<input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" aria-labelledby="height_voiceLabel" /> px

+							</td>

+						</tr>

+						<tr role="group" aria-labelledby="popup_position_label center_hint">

+							<td class="nowrap" id="labelleft"><label id="popup_position_label">{#advlink_dlg.popup_position}</label>&nbsp;</td>

+							<td class="nowrap">

+								<span style="display:none" id="x_voiceLabel">X</span>

+								<input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" aria-labelledby="x_voiceLabel" /> /                                

+								<span style="display:none" id="y_voiceLabel">Y</span>

+								<input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" aria-labelledby="y_voiceLabel" /> <span id="center_hint">(c /c = center)</span>

+							</td>

+						</tr>

+					</table>

+

+					<fieldset>

+						<legend>{#advlink_dlg.popup_opts}</legend>

+

+						<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

+							<tr>

+								<td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>

+								<td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>

+								<td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>

+								<td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>

+							</tr>

+							<tr>

+								<td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>

+								<td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>

+								<td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>

+								<td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>

+							</tr>

+							<tr>

+								<td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>

+								<td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>

+								<td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>

+								<td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>

+							</tr>

+							<tr>

+								<td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>

+								<td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>

+								<td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>

+								<td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>

+							</tr>

+						</table>

+					</fieldset>

+				</fieldset>

+			</div>

+

+			<div id="advanced_panel" class="panel">

+			<fieldset>

+					<legend>{#advlink_dlg.advanced_props}</legend>

+

+					<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

+						<tr>

+							<td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td> 

+							<td><input id="id" name="id" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>

+							<td><input type="text" id="style" name="style" value="" /></td>

+						</tr>

+

+						<tr>

+							<td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>

+							<td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>

+						</tr>

+

+						<tr>

+							<td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>

+							<td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td> 

+							<td>

+								<select id="dir" name="dir"> 

+										<option value="">{#not_set}</option> 

+										<option value="ltr">{#advlink_dlg.ltr}</option> 

+										<option value="rtl">{#advlink_dlg.rtl}</option> 

+								</select>

+							</td> 

+						</tr>

+

+						<tr>

+							<td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>

+							<td><input type="text" id="hreflang" name="hreflang" value="" /></td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td> 

+							<td>

+								<input id="lang" name="lang" type="text" value="" />

+							</td> 

+						</tr>

+

+						<tr>

+							<td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>

+							<td><input type="text" id="charset" name="charset" value="" /></td>

+						</tr>

+

+						<tr>

+							<td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>

+							<td><input type="text" id="type" name="type" value="" /></td>

+						</tr>

+

+						<tr>

+							<td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>

+							<td><select id="rel" name="rel"> 

+									<option value="">{#not_set}</option> 

+									<option value="lightbox">Lightbox</option> 

+									<option value="alternate">Alternate</option> 

+									<option value="designates">Designates</option> 

+									<option value="stylesheet">Stylesheet</option> 

+									<option value="start">Start</option> 

+									<option value="next">Next</option> 

+									<option value="prev">Prev</option> 

+									<option value="contents">Contents</option> 

+									<option value="index">Index</option> 

+									<option value="glossary">Glossary</option> 

+									<option value="copyright">Copyright</option> 

+									<option value="chapter">Chapter</option> 

+									<option value="subsection">Subsection</option> 

+									<option value="appendix">Appendix</option> 

+									<option value="help">Help</option> 

+									<option value="bookmark">Bookmark</option>

+									<option value="nofollow">No Follow</option>

+									<option value="tag">Tag</option>

+								</select> 

+							</td>

+						</tr>

+

+						<tr>

+							<td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>

+							<td><select id="rev" name="rev"> 

+									<option value="">{#not_set}</option> 

+									<option value="alternate">Alternate</option> 

+									<option value="designates">Designates</option> 

+									<option value="stylesheet">Stylesheet</option> 

+									<option value="start">Start</option> 

+									<option value="next">Next</option> 

+									<option value="prev">Prev</option> 

+									<option value="contents">Contents</option> 

+									<option value="index">Index</option> 

+									<option value="glossary">Glossary</option> 

+									<option value="copyright">Copyright</option> 

+									<option value="chapter">Chapter</option> 

+									<option value="subsection">Subsection</option> 

+									<option value="appendix">Appendix</option> 

+									<option value="help">Help</option> 

+									<option value="bookmark">Bookmark</option> 

+								</select> 

+							</td>

+						</tr>

+

+						<tr>

+							<td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>

+							<td><input type="text" id="tabindex" name="tabindex" value="" /></td>

+						</tr>

+

+						<tr>

+							<td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td>

+							<td><input type="text" id="accesskey" name="accesskey" value="" /></td>

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="events_panel" class="panel">

+			<fieldset>

+					<legend>{#advlink_dlg.event_props}</legend>

+

+					<table border="0" cellpadding="0" cellspacing="4" role="presentation" >

+						<tr>

+							<td class="column1"><label for="onfocus">onfocus</label></td> 

+							<td><input id="onfocus" name="onfocus" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onblur">onblur</label></td> 

+							<td><input id="onblur" name="onblur" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onclick">onclick</label></td> 

+							<td><input id="onclick" name="onclick" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="ondblclick">ondblclick</label></td> 

+							<td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onmousedown">onmousedown</label></td> 

+							<td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onmouseup">onmouseup</label></td> 

+							<td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onmouseover">onmouseover</label></td> 

+							<td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onmousemove">onmousemove</label></td> 

+							<td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onmouseout">onmouseout</label></td> 

+							<td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onkeypress">onkeypress</label></td> 

+							<td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onkeydown">onkeydown</label></td> 

+							<td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="onkeyup">onkeyup</label></td> 

+							<td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> 

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<input type="submit" id="insert" name="insert" value="{#insert}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlist/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js
@@ -1,1 +1,176 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var each = tinymce.each;

+

+	tinymce.create('tinymce.plugins.AdvListPlugin', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			function buildFormats(str) {

+				var formats = [];

+

+				each(str.split(/,/), function(type) {

+					formats.push({

+						title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),

+						styles : {

+							listStyleType : type == 'default' ? '' : type

+						}

+					});

+				});

+

+				return formats;

+			};

+

+			// Setup number formats from config or default

+			t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");

+			t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");

+

+			if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent))

+				t.isIE7 = true;

+		},

+

+		createControl: function(name, cm) {

+			var t = this, btn, format, editor = t.editor;

+

+			if (name == 'numlist' || name == 'bullist') {

+				// Default to first item if it's a default item

+				if (t[name][0].title == 'advlist.def')

+					format = t[name][0];

+

+				function hasFormat(node, format) {

+					var state = true;

+

+					each(format.styles, function(value, name) {

+						// Format doesn't match

+						if (editor.dom.getStyle(node, name) != value) {

+							state = false;

+							return false;

+						}

+					});

+

+					return state;

+				};

+

+				function applyListFormat() {

+					var list, dom = editor.dom, sel = editor.selection;

+

+					// Check for existing list element

+					list = dom.getParent(sel.getNode(), 'ol,ul');

+

+					// Switch/add list type if needed

+					if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))

+						editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');

+

+					// Append styles to new list element

+					if (format) {

+						list = dom.getParent(sel.getNode(), 'ol,ul');

+						if (list) {

+							dom.setStyles(list, format.styles);

+							list.removeAttribute('data-mce-style');

+						}

+					}

+

+					editor.focus();

+				};

+

+				btn = cm.createSplitButton(name, {

+					title : 'advanced.' + name + '_desc',

+					'class' : 'mce_' + name,

+					onclick : function() {

+						applyListFormat();

+					}

+				});

+

+				btn.onRenderMenu.add(function(btn, menu) {

+					menu.onHideMenu.add(function() {

+						if (t.bookmark) {

+							editor.selection.moveToBookmark(t.bookmark);

+							t.bookmark = 0;

+						}

+					});

+

+					menu.onShowMenu.add(function() {

+						var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList;

+

+						if (list || format) {

+							fmtList = t[name];

+

+							// Unselect existing items

+							each(menu.items, function(item) {

+								var state = true;

+

+								item.setSelected(0);

+

+								if (list && !item.isDisabled()) {

+									each(fmtList, function(fmt) {

+										if (fmt.id == item.id) {

+											if (!hasFormat(list, fmt)) {

+												state = false;

+												return false;

+											}

+										}

+									});

+

+									if (state)

+										item.setSelected(1);

+								}

+							});

+

+							// Select the current format

+							if (!list)

+								menu.items[format.id].setSelected(1);

+						}

+	

+						editor.focus();

+

+						// IE looses it's selection so store it away and restore it later

+						if (tinymce.isIE) {

+							t.bookmark = editor.selection.getBookmark(1);

+						}

+					});

+

+					menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);

+

+					each(t[name], function(item) {

+						// IE<8 doesn't support lower-greek, skip it

+						if (t.isIE7 && item.styles.listStyleType == 'lower-greek')

+							return;

+

+						item.id = editor.dom.uniqueId();

+

+						menu.add({id : item.id, title : item.title, onclick : function() {

+							format = item;

+							applyListFormat();

+						}});

+					});

+				});

+

+				return btn;

+			}

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Advanced lists',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;if(tinyMCE.isIE){return}a.onKeyDown.add(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng().cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f-2);a.setEnd(n,f-1);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
@@ -1,1 +1,173 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2011, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
 
+(function() {
+	tinymce.create('tinymce.plugins.AutolinkPlugin', {
+	/**
+	* Initializes the plugin, this will be executed after the plugin has been created.
+	* This call is done before the editor instance has finished it's initialization so use the onInit event
+	* of the editor instance to intercept that event.
+	*
+	* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
+	* @param {string} url Absolute URL to where the plugin is located.
+	*/
+
+	init : function(ed, url) {
+		var t = this;
+
+		// Internet Explorer has built-in automatic linking
+		if (tinyMCE.isIE)
+			return;
+
+		// Add a key down handler
+		ed.onKeyDown.add(function(ed, e) {
+			if (e.keyCode == 13)
+				return t.handleEnter(ed);
+			});
+
+		ed.onKeyPress.add(function(ed, e) {
+			if (e.which == 41)
+				return t.handleEclipse(ed);
+		});
+
+		// Add a key up handler
+		ed.onKeyUp.add(function(ed, e) {
+			if (e.keyCode == 32)
+				return t.handleSpacebar(ed);
+			});
+	       },
+
+		handleEclipse : function(ed) {
+			this.parseCurrentLine(ed, -1, '(', true);
+		},
+
+		handleSpacebar : function(ed) {
+			 this.parseCurrentLine(ed, 0, '', true);
+		 },
+
+		handleEnter : function(ed) {
+			this.parseCurrentLine(ed, -1, '', false);
+		},
+
+		parseCurrentLine : function(ed, end_offset, delimiter, goback) {
+			var r, end, start, endContainer, bookmark, text, matches, prev, len;
+
+			// We need at least five characters to form a URL,
+			// hence, at minimum, five characters from the beginning of the line.
+			r = ed.selection.getRng().cloneRange();
+			if (r.startOffset < 5) {
+				// During testing, the caret is placed inbetween two text nodes. 
+				// The previous text node contains the URL.
+				prev = r.endContainer.previousSibling;
+				if (prev == null) {
+					if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
+						return;
+
+					prev = r.endContainer.firstChild.nextSibling;
+				}
+				len = prev.length;
+				r.setStart(prev, len);
+				r.setEnd(prev, len);
+
+				if (r.endOffset < 5)
+					return;
+
+				end = r.endOffset;
+				endContainer = prev;
+			} else {
+				endContainer = r.endContainer;
+
+				// Get a text node
+				if (endContainer.nodeType != 3 && endContainer.firstChild) {
+					while (endContainer.nodeType != 3 && endContainer.firstChild)
+						endContainer = endContainer.firstChild;
+
+					r.setStart(endContainer, 0);
+					r.setEnd(endContainer, endContainer.nodeValue.length);
+				}
+
+				if (r.endOffset == 1)
+					end = 2;
+				else
+					end = r.endOffset - 1 - end_offset;
+			}
+
+			start = end;
+
+			do
+			{
+				// Move the selection one character backwards.
+				r.setStart(endContainer, end - 2);
+				r.setEnd(endContainer, end - 1);
+				end -= 1;
+
+				// Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
+			} while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
+
+			if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
+				r.setStart(endContainer, end);
+				r.setEnd(endContainer, start);
+				end += 1;
+			} else if (r.startOffset == 0) {
+				r.setStart(endContainer, 0);
+				r.setEnd(endContainer, start);
+			}
+			else {
+				r.setStart(endContainer, end);
+				r.setEnd(endContainer, start);
+			}
+
+			text = r.toString();
+			matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)(.+)$/i);
+
+			if (matches) {
+				if (matches[1] == 'www.') {
+					matches[1] = 'http://www.';
+				}
+
+				bookmark = ed.selection.getBookmark();
+
+				ed.selection.setRng(r);
+				tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
+				ed.selection.moveToBookmark(bookmark);
+
+				// TODO: Determine if this is still needed.
+				if (tinyMCE.isWebKit) {
+					// move the caret to its original position
+					ed.selection.collapse(false);
+					var max = Math.min(endContainer.length, start + 1);
+					r.setStart(endContainer, max);
+					r.setEnd(endContainer, max);
+					ed.selection.setRng(r);
+				}
+			}
+		},
+
+		/**
+		* Returns information about the plugin as a name/value array.
+		* The current keys are longname, author, authorurl, infourl and version.
+		*
+		* @return {Object} Name/value array containing information about the plugin.
+		*/
+		getInfo : function() {
+			return {
+				longname : 'Autolink',
+				author : 'Moxiecode Systems AB',
+				authorurl : 'http://tinymce.moxiecode.com',
+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
+				version : tinymce.majorVersion + "." + tinymce.minorVersion
+			};
+		}
+	});
+
+	// Register plugin
+	tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
+})();
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onLoad.add(b);a.onLoadContent.add(b)}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
@@ -1,1 +1,120 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
 
+(function() {
+	/**
+	 * Auto Resize
+	 *
+	 * This plugin automatically resizes the content area to fit its content height.
+	 * It will retain a minimum height, which is the height of the content area when
+	 * it's initialized.
+	 */
+	tinymce.create('tinymce.plugins.AutoResizePlugin', {
+		/**
+		 * Initializes the plugin, this will be executed after the plugin has been created.
+		 * This call is done before the editor instance has finished it's initialization so use the onInit event
+		 * of the editor instance to intercept that event.
+		 *
+		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
+		 * @param {string} url Absolute URL to where the plugin is located.
+		 */
+		init : function(ed, url) {
+			var t = this, oldSize = 0;
+
+			if (ed.getParam('fullscreen_is_enabled'))
+				return;
+
+			/**
+			 * This method gets executed each time the editor needs to resize.
+			 */
+			function resize() {
+				var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
+
+				// Get height differently depending on the browser used
+				myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight);
+
+				// Don't make it smaller than the minimum height
+				if (myHeight > t.autoresize_min_height)
+					resizeHeight = myHeight;
+
+				// If a maximum height has been defined don't exceed this height
+				if (t.autoresize_max_height && myHeight > t.autoresize_max_height) {
+					resizeHeight = t.autoresize_max_height;
+					body.style.overflowY = "auto";
+					de.style.overflowY = "auto"; // Old IE
+				} else {
+					body.style.overflowY = "hidden";
+					de.style.overflowY = "hidden"; // Old IE
+					body.scrollTop = 0;
+				}
+
+				// Resize content element
+				if (resizeHeight !== oldSize) {
+					deltaSize = resizeHeight - oldSize;
+					DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
+					oldSize = resizeHeight;
+
+					// WebKit doesn't decrease the size of the body element until the iframe gets resized
+					// So we need to continue to resize the iframe down until the size gets fixed
+					if (tinymce.isWebKit && deltaSize < 0)
+						resize();
+				}
+			};
+
+			t.editor = ed;
+
+			// Define minimum height
+			t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight));
+
+			// Define maximum height
+			t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0));
+
+			// Add padding at the bottom for better UX
+			ed.onInit.add(function(ed){
+				ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px');
+			});
+
+			// Add appropriate listeners for resizing content area
+			ed.onChange.add(resize);
+			ed.onSetContent.add(resize);
+			ed.onPaste.add(resize);
+			ed.onKeyUp.add(resize);
+			ed.onPostRender.add(resize);
+
+			if (ed.getParam('autoresize_on_init', true)) {
+				ed.onLoad.add(resize);
+				ed.onLoadContent.add(resize);
+			}
+
+			// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
+			ed.addCommand('mceAutoResize', resize);
+		},
+
+		/**
+		 * Returns information about the plugin as a name/value array.
+		 * The current keys are longname, author, authorurl, infourl and version.
+		 *
+		 * @return {Object} Name/value array containing information about the plugin.
+		 */
+		getInfo : function() {
+			return {
+				longname : 'Auto Resize',
+				author : 'Moxiecode Systems AB',
+				authorurl : 'http://tinymce.moxiecode.com',
+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
+				version : tinymce.majorVersion + "." + tinymce.minorVersion
+			};
+		}
+	});
+
+	// Register plugin
+	tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
+})();
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/autosave/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();try{m.save("TinyMCE")}catch(o){}},getItem:function(l){var m=i.getElement();try{m.load("TinyMCE");return m.getAttribute(l)}catch(n){return null}},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,j=h.storage,i;if(j){i=j.getItem(h.key);if(i){h.editor.setContent(i);h.onRestoreDraft.dispatch(h,{content:i})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()<i.getTime()){return b}h.removeDraft()}else{return b}}}return false},removeDraft:function(){var h=this,k=h.storage,i=h.key,j;if(k){j=k.getItem(i);k.removeItem(i);k.removeItem(i+"_expires");if(j){h.onRemoveDraft.dispatch(h,{content:j})}}},"static":{_beforeUnloadHandler:function(h){var i;e.each(tinyMCE.editors,function(j){if(j.plugins.autosave){j.plugins.autosave.storeDraft()}if(j.getParam("fullscreen_is_enabled")){return}if(!i&&j.isDirty()&&j.getParam("autosave_ask_before_unload")){i=j.getLang("autosave.unload_msg")}});return i}}});e.PluginManager.add("autosave",e.plugins.AutoSave)})(tinymce);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js
@@ -1,1 +1,432 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ *

+ * Adds auto-save capability to the TinyMCE text editor to rescue content

+ * inadvertently lost. This plugin was originally developed by Speednet

+ * and that project can be found here: http://code.google.com/p/tinyautosave/

+ *

+ * TECHNOLOGY DISCUSSION:

+ * 

+ * The plugin attempts to use the most advanced features available in the current browser to save

+ * as much content as possible.  There are a total of four different methods used to autosave the

+ * content.  In order of preference, they are:

+ * 

+ * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain

+ * on the client computer. Data stored in the localStorage area has no expiration date, so we must

+ * manage expiring the data ourselves.  localStorage is fully supported by IE8, and it is supposed

+ * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers.  As

+ * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,

+ * localStorage is stored in the following folder:

+ * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]

+ * 

+ * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,

+ * except it is designed to expire after a certain amount of time.  Because the specification

+ * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and

+ * manage the expiration ourselves.  sessionStorage has similar storage characteristics to

+ * localStorage, although it seems to have better support by Firefox 3 at the moment.  (That will

+ * certainly change as Firefox continues getting better at HTML 5 adoption.)

+ * 

+ * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a

+ * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client

+ * computer.  The feature is available for IE 5+, which makes it available for every version of IE

+ * supported by TinyMCE.  The content is persistent across browser restarts and expires on the

+ * date/time specified, just like a cookie.  However, the data is not cleared when the user clears

+ * cookies on the browser, which makes it well-suited for rescuing autosaved content.  UserData,

+ * like other Microsoft IE browser technologies, is implemented as a behavior attached to a

+ * specific DOM object, so in this case we attach the behavior to the same DOM element that the

+ * TinyMCE editor instance is attached to.

+ */

+

+(function(tinymce) {

+	// Setup constants to help the compressor to reduce script size

+	var PLUGIN_NAME = 'autosave',

+		RESTORE_DRAFT = 'restoredraft',

+		TRUE = true,

+		undefined,

+		unloadHandlerAdded,

+		Dispatcher = tinymce.util.Dispatcher;

+

+	/**

+	 * This plugin adds auto-save capability to the TinyMCE text editor to rescue content

+	 * inadvertently lost. By using localStorage.

+	 *

+	 * @class tinymce.plugins.AutoSave

+	 */

+	tinymce.create('tinymce.plugins.AutoSave', {

+		/**

+		 * Initializes the plugin, this will be executed after the plugin has been created.

+		 * This call is done before the editor instance has finished it's initialization so use the onInit event

+		 * of the editor instance to intercept that event.

+		 *

+		 * @method init

+		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.

+		 * @param {string} url Absolute URL to where the plugin is located.

+		 */

+		init : function(ed, url) {

+			var self = this, settings = ed.settings;

+

+			self.editor = ed;

+

+			// Parses the specified time string into a milisecond number 10m, 10s etc.

+			function parseTime(time) {

+				var multipels = {

+					s : 1000,

+					m : 60000

+				};

+

+				time = /^(\d+)([ms]?)$/.exec('' + time);

+

+				return (time[2] ? multipels[time[2]] : 1) * parseInt(time);

+			};

+

+			// Default config

+			tinymce.each({

+				ask_before_unload : TRUE,

+				interval : '30s',

+				retention : '20m',

+				minlength : 50

+			}, function(value, key) {

+				key = PLUGIN_NAME + '_' + key;

+

+				if (settings[key] === undefined)

+					settings[key] = value;

+			});

+

+			// Parse times

+			settings.autosave_interval = parseTime(settings.autosave_interval);

+			settings.autosave_retention = parseTime(settings.autosave_retention);

+

+			// Register restore button

+			ed.addButton(RESTORE_DRAFT, {

+				title : PLUGIN_NAME + ".restore_content",

+				onclick : function() {

+					if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {

+						// Show confirm dialog if the editor isn't empty

+						ed.windowManager.confirm(

+							PLUGIN_NAME + ".warning_message",

+							function(ok) {

+								if (ok)

+									self.restoreDraft();

+							}

+						);

+					} else

+						self.restoreDraft();

+				}

+			});

+

+			// Enable/disable restoredraft button depending on if there is a draft stored or not

+			ed.onNodeChange.add(function() {

+				var controlManager = ed.controlManager;

+

+				if (controlManager.get(RESTORE_DRAFT))

+					controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());

+			});

+

+			ed.onInit.add(function() {

+				// Check if the user added the restore button, then setup auto storage logic

+				if (ed.controlManager.get(RESTORE_DRAFT)) {

+					// Setup storage engine

+					self.setupStorage(ed);

+

+					// Auto save contents each interval time

+					setInterval(function() {

+						self.storeDraft();

+						ed.nodeChanged();

+					}, settings.autosave_interval);

+				}

+			});

+

+			/**

+			 * This event gets fired when a draft is stored to local storage.

+			 *

+			 * @event onStoreDraft

+			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.

+			 * @param {Object} draft Draft object containing the HTML contents of the editor.

+			 */

+			self.onStoreDraft = new Dispatcher(self);

+

+			/**

+			 * This event gets fired when a draft is restored from local storage.

+			 *

+			 * @event onStoreDraft

+			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.

+			 * @param {Object} draft Draft object containing the HTML contents of the editor.

+			 */

+			self.onRestoreDraft = new Dispatcher(self);

+

+			/**

+			 * This event gets fired when a draft removed/expired.

+			 *

+			 * @event onRemoveDraft

+			 * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.

+			 * @param {Object} draft Draft object containing the HTML contents of the editor.

+			 */

+			self.onRemoveDraft = new Dispatcher(self);

+

+			// Add ask before unload dialog only add one unload handler

+			if (!unloadHandlerAdded) {

+				window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;

+				unloadHandlerAdded = TRUE;

+			}

+		},

+

+		/**

+		 * Returns information about the plugin as a name/value array.

+		 * The current keys are longname, author, authorurl, infourl and version.

+		 *

+		 * @method getInfo

+		 * @return {Object} Name/value array containing information about the plugin.

+		 */

+		getInfo : function() {

+			return {

+				longname : 'Auto save',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		/**

+		 * Returns an expiration date UTC string.

+		 *

+		 * @method getExpDate

+		 * @return {String} Expiration date UTC string.

+		 */

+		getExpDate : function() {

+			return new Date(

+				new Date().getTime() + this.editor.settings.autosave_retention

+			).toUTCString();

+		},

+

+		/**

+		 * This method will setup the storage engine. If the browser has support for it.

+		 *

+		 * @method setupStorage

+		 */

+		setupStorage : function(ed) {

+			var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";

+

+			self.key = PLUGIN_NAME + ed.id;

+

+			// Loop though each storage engine type until we find one that works

+			tinymce.each([

+				function() {

+					// Try HTML5 Local Storage

+					if (localStorage) {

+						localStorage.setItem(testKey, testVal);

+

+						if (localStorage.getItem(testKey) === testVal) {

+							localStorage.removeItem(testKey);

+

+							return localStorage;

+						}

+					}

+				},

+

+				function() {

+					// Try HTML5 Session Storage

+					if (sessionStorage) {

+						sessionStorage.setItem(testKey, testVal);

+

+						if (sessionStorage.getItem(testKey) === testVal) {

+							sessionStorage.removeItem(testKey);

+

+							return sessionStorage;

+						}

+					}

+				},

+

+				function() {

+					// Try IE userData

+					if (tinymce.isIE) {

+						ed.getElement().style.behavior = "url('#default#userData')";

+

+						// Fake localStorage on old IE

+						return {

+							autoExpires : TRUE,

+

+							setItem : function(key, value) {

+								var userDataElement = ed.getElement();

+

+								userDataElement.setAttribute(key, value);

+								userDataElement.expires = self.getExpDate();

+

+								try {

+									userDataElement.save("TinyMCE");

+								} catch (e) {

+									// Ignore, saving might fail if "Userdata Persistence" is disabled in IE

+								}

+							},

+

+							getItem : function(key) {

+								var userDataElement = ed.getElement();

+

+								try {

+									userDataElement.load("TinyMCE");

+									return userDataElement.getAttribute(key);

+								} catch (e) {

+									// Ignore, loading might fail if "Userdata Persistence" is disabled in IE

+									return null;

+								}

+							},

+

+							removeItem : function(key) {

+								ed.getElement().removeAttribute(key);

+							}

+						};

+					}

+				},

+			], function(setup) {

+				// Try executing each function to find a suitable storage engine

+				try {

+					self.storage = setup();

+

+					if (self.storage)

+						return false;

+				} catch (e) {

+					// Ignore

+				}

+			});

+		},

+

+		/**

+		 * This method will store the current contents in the the storage engine.

+		 *

+		 * @method storeDraft

+		 */

+		storeDraft : function() {

+			var self = this, storage = self.storage, editor = self.editor, expires, content;

+

+			// Is the contents dirty

+			if (storage) {

+				// If there is no existing key and the contents hasn't been changed since

+				// it's original value then there is no point in saving a draft

+				if (!storage.getItem(self.key) && !editor.isDirty())

+					return;

+

+				// Store contents if the contents if longer than the minlength of characters

+				content = editor.getContent({draft: true});

+				if (content.length > editor.settings.autosave_minlength) {

+					expires = self.getExpDate();

+

+					// Store expiration date if needed IE userData has auto expire built in

+					if (!self.storage.autoExpires)

+						self.storage.setItem(self.key + "_expires", expires);

+

+					self.storage.setItem(self.key, content);

+					self.onStoreDraft.dispatch(self, {

+						expires : expires,

+						content : content

+					});

+				}

+			}

+		},

+

+		/**

+		 * This method will restore the contents from the storage engine back to the editor.

+		 *

+		 * @method restoreDraft

+		 */

+		restoreDraft : function() {

+			var self = this, storage = self.storage, content;

+

+			if (storage) {

+				content = storage.getItem(self.key);

+

+				if (content) {

+					self.editor.setContent(content);

+					self.onRestoreDraft.dispatch(self, {

+						content : content

+					});

+				}

+			}

+		},

+

+		/**

+		 * This method will return true/false if there is a local storage draft available.

+		 *

+		 * @method hasDraft

+		 * @return {boolean} true/false state if there is a local draft.

+		 */

+		hasDraft : function() {

+			var self = this, storage = self.storage, expDate, exists;

+

+			if (storage) {

+				// Does the item exist at all

+				exists = !!storage.getItem(self.key);

+				if (exists) {

+					// Storage needs autoexpire

+					if (!self.storage.autoExpires) {

+						expDate = new Date(storage.getItem(self.key + "_expires"));

+

+						// Contents hasn't expired

+						if (new Date().getTime() < expDate.getTime())

+							return TRUE;

+

+						// Remove it if it has

+						self.removeDraft();

+					} else

+						return TRUE;

+				}

+			}

+

+			return false;

+		},

+

+		/**

+		 * Removes the currently stored draft.

+		 *

+		 * @method removeDraft

+		 */

+		removeDraft : function() {

+			var self = this, storage = self.storage, key = self.key, content;

+

+			if (storage) {

+				// Get current contents and remove the existing draft

+				content = storage.getItem(key);

+				storage.removeItem(key);

+				storage.removeItem(key + "_expires");

+

+				// Dispatch remove event if we had any contents

+				if (content) {

+					self.onRemoveDraft.dispatch(self, {

+						content : content

+					});

+				}

+			}

+		},

+

+		"static" : {

+			// Internal unload handler will be called before the page is unloaded

+			_beforeUnloadHandler : function(e) {

+				var msg;

+

+				tinymce.each(tinyMCE.editors, function(ed) {

+					// Store a draft for each editor instance

+					if (ed.plugins.autosave)

+						ed.plugins.autosave.storeDraft();

+

+					// Never ask in fullscreen mode

+					if (ed.getParam("fullscreen_is_enabled"))

+						return;

+

+					// Setup a return message if the editor is dirty

+					if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))

+						msg = ed.getLang("autosave.unload_msg");

+				});

+

+				return msg;

+			}

+		}

+	});

+

+	tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);

+})(tinymce);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/autosave/langs/en.js
@@ -1,1 +1,4 @@
-
+tinyMCE.addI18n('en.autosave',{

+restore_content: "Restore auto-saved content",

+warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?"

+});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/<font>(.*?)<\/font>/gi,"$1");b(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");b(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");b(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<u>/gi,"[u]");b(/<blockquote[^>]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/<br \/>/gi,"\n");b(/<br\/>/gi,"\n");b(/<br>/gi,"\n");b(/<p>/gi,"");b(/<\/p>/gi,"\n");b(/&nbsp;|\u00a0/gi," ");b(/&quot;/gi,'"');b(/&lt;/gi,"<");b(/&gt;/gi,">");b(/&amp;/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"<br />");b(/\[b\]/gi,"<strong>");b(/\[\/b\]/gi,"</strong>");b(/\[i\]/gi,"<em>");b(/\[\/i\]/gi,"</em>");b(/\[u\]/gi,"<u>");b(/\[\/u\]/gi,"</u>");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>');b(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
@@ -1,1 +1,120 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.BBCodePlugin', {

+		init : function(ed, url) {

+			var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();

+

+			ed.onBeforeSetContent.add(function(ed, o) {

+				o.content = t['_' + dialect + '_bbcode2html'](o.content);

+			});

+

+			ed.onPostProcess.add(function(ed, o) {

+				if (o.set)

+					o.content = t['_' + dialect + '_bbcode2html'](o.content);

+

+				if (o.get)

+					o.content = t['_' + dialect + '_html2bbcode'](o.content);

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'BBCode Plugin',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Private methods

+

+		// HTML -> BBCode in PunBB dialect

+		_punbb_html2bbcode : function(s) {

+			s = tinymce.trim(s);

+

+			function rep(re, str) {

+				s = s.replace(re, str);

+			};

+

+			// example: <strong> to [b]

+			rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");

+			rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");

+			rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");

+			rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");

+			rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");

+			rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");

+			rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");

+			rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");

+			rep(/<font>(.*?)<\/font>/gi,"$1");

+			rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");

+			rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");

+			rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");

+			rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");

+			rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");

+			rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");

+			rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");

+			rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");

+			rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");

+			rep(/<\/(strong|b)>/gi,"[/b]");

+			rep(/<(strong|b)>/gi,"[b]");

+			rep(/<\/(em|i)>/gi,"[/i]");

+			rep(/<(em|i)>/gi,"[i]");

+			rep(/<\/u>/gi,"[/u]");

+			rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");

+			rep(/<u>/gi,"[u]");

+			rep(/<blockquote[^>]*>/gi,"[quote]");

+			rep(/<\/blockquote>/gi,"[/quote]");

+			rep(/<br \/>/gi,"\n");

+			rep(/<br\/>/gi,"\n");

+			rep(/<br>/gi,"\n");

+			rep(/<p>/gi,"");

+			rep(/<\/p>/gi,"\n");

+			rep(/&nbsp;|\u00a0/gi," ");

+			rep(/&quot;/gi,"\"");

+			rep(/&lt;/gi,"<");

+			rep(/&gt;/gi,">");

+			rep(/&amp;/gi,"&");

+

+			return s; 

+		},

+

+		// BBCode -> HTML from PunBB dialect

+		_punbb_bbcode2html : function(s) {

+			s = tinymce.trim(s);

+

+			function rep(re, str) {

+				s = s.replace(re, str);

+			};

+

+			// example: [b] to <strong>

+			rep(/\n/gi,"<br />");

+			rep(/\[b\]/gi,"<strong>");

+			rep(/\[\/b\]/gi,"</strong>");

+			rep(/\[i\]/gi,"<em>");

+			rep(/\[\/i\]/gi,"</em>");

+			rep(/\[u\]/gi,"<u>");

+			rep(/\[\/u\]/gi,"</u>");

+			rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");

+			rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");

+			rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");

+			rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");

+			rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");

+			rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");

+

+			return s; 

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/cleanup/editor_plugin.js

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/cleanup/editor_plugin_src.js
@@ -1,1 +1,11 @@
+/**

+ * $Id: editor_plugin_src.js 162 2007-01-03 16:16:52Z spocke $

+ *

+ * Experimental plugin for new Cleanup routine, this logic will be moved into the core ones it's stable enougth.

+ *

+ * @author Moxiecode


+ */

+

+/* Dummy file since cleanup is now moved to core */

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/cleanup/readme.txt
@@ -1,1 +1,2 @@
+Dummy plugin since cleanup is now moved into core.

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/editor_plugin.js
@@ -1,1 +1,51 @@
+/* Import plugin specific language pack */

+tinyMCE.importPluginLanguagePack('codeprotect', 'en'); // <- Add a comma separated list of all supported languages

+

+/****

+ * 

+ * I'm not even gonna copyright this, that's just silly.

+ *

+ * Feel free to improve on this code and re-upload it.

+ * 

+ * Tijmen Schep, Holland, 9-10-2005

+ * 

+ * 

+ ****/

+

+

+

+/**

+ * Gets executed when contents is inserted / retrived.

+ */

+function TinyMCE_codeprotect_cleanup(type, content) {

+	switch (type) {

+		case "get_from_editor":

+

+content = content.replace(/<!--CODE/gi, "<?");

+content = content.replace(/CODE-->/gi, "?>");

+

+			break;

+

+		case "insert_to_editor":

+			

+content = content.replace(/<\?/gi, "<!--CODE");

+content = content.replace(/\?>/gi, "CODE-->");

+

+			break;

+

+		case "get_from_editor_dom":

+

+			// Do custom cleanup code here. THIS PLUGIN DOESN'T USE THIS

+

+			break;

+

+		case "insert_to_editor_dom":

+

+			// Do custom cleanup code here. BUT I LEFT IT IN ANYWAY..

+

+			break;

+	}

+

+	return content;

+}

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/images/codeprotect.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/langs/da.js
@@ -1,1 +1,9 @@
+// DK lang variables contributed by Jan Moelgaard

+

+/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

+

+tinyMCE.addToLang('',{

+template_title : 'Dette er bare en pop-up-skabelon',

+template_desc : 'Dette er bare en testknap'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/langs/de.js
@@ -1,1 +1,10 @@
+// DE lang variables

+

+/* Remember to namespace the language parameters lang_<your plugin>_<some name> */


+

+tinyMCE.addToLang('',{

+template_title : 'Dies ist nur ein Beispiel-Popup',

+template_desc : 'Dies ist nur ein Beispiel-Button'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/langs/en.js
@@ -1,1 +1,9 @@
+// UK lang variables

+

+/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

+

+tinyMCE.addToLang('',{

+template_title : 'codeprotect settings',

+template_desc : 'codeprotect'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/langs/fr_ca.js
@@ -1,1 +1,9 @@
+// Canadian French lang variables by Virtuelcom   last modification: 2005-06-15

+

+/* Remember to namespace the language parameters <your plugin>_<some name> */

+

+tinyMCE.addToLang('',{

+template_title : 'Ceci est un exmple pour le gabarit de popup',

+template_desc : 'Ceci est un exmple pour le gabarit d\'un bouton'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/langs/he.js
@@ -1,1 +1,9 @@
+// HE lang variables

+

+/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

+

+tinyMCE.addToLang('',{



+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/langs/hu.js
@@ -1,1 +1,9 @@
+// HU lang variables

+

+/* Remember to namespace the language parameters lang_<your plugin>_<some name> */

+

+tinyMCE.addToLang('',{



+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/langs/zh_cn.js
@@ -1,1 +1,10 @@
+// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com)


+

+/* Remember to namespace the language parameters <your plugin>_<some name> */

+

+tinyMCE.addToLang('',{



+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/codeprotect/readme.txt
@@ -1,1 +1,25 @@
-
+ABOUT

+

+This simple plugin protects any code in the html you are editing, by turning 

+it's start- and end-tag into comment tags when the editor is started.

+

+<? becomes <!--CODE

+?> becomes CODE-->

+

+The plugin changes the tags back to normal when you save your html.

+

+If you need this plugin to be more complex, feel free to expand on this 

+plugin, it's easier than you think. If you do make it better, please 

+upload it to sourceforge.

+

+

+INSTALL

+

+To install, copy the codeprotect folder to the plugins directory and just 

+add the word "codeprotect" to the list of plugins in the "init" bit of your tinyMCE 

+page. The plugin doesn't have a button, so no need to worry about that.

+

+

+tested with tinyCME 2.0 rc3

+

+Tijmen Schep, 9 october 2005

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/compat2x/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.Compat2x',{getInfo:function(){return{longname:'Compat2x',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};}});(function(){tinymce.extend(tinyMCE,{addToLang:function(p,l){each(l,function(v,k){tinyMCE.i18n[(tinyMCE.settings.language||'en')+'.'+(p?p+'_':'')+k]=v;});},getInstanceById:function(n){return this.get(n);}});})();(function(){var EditorManager=tinymce.EditorManager;tinyMCE.instances={};tinyMCE.plugins={};tinymce.PluginManager.onAdd.add(function(pm,n,p){tinyMCE.plugins[n]=p;});tinyMCE.majorVersion=tinymce.majorVersion;tinyMCE.minorVersion=tinymce.minorVersion;tinyMCE.releaseDate=tinymce.releaseDate;tinyMCE.baseURL=tinymce.baseURL;tinyMCE.isIE=tinyMCE.isMSIE=tinymce.isIE||tinymce.isOpera;tinyMCE.isMSIE5=tinymce.isIE;tinyMCE.isMSIE5_0=tinymce.isIE;tinyMCE.isMSIE7=tinymce.isIE;tinyMCE.isGecko=tinymce.isGecko;tinyMCE.isSafari=tinymce.isWebKit;tinyMCE.isOpera=tinymce.isOpera;tinyMCE.isMac=false;tinyMCE.isNS7=false;tinyMCE.isNS71=false;tinyMCE.compat=true;TinyMCE_Engine=tinyMCE;tinymce.extend(tinyMCE,{getParam:function(n,dv){return this.activeEditor.getParam(n,dv);},addEvent:function(e,na,f,sc){tinymce.dom.Event.add(e,na,f,sc||this);},getControlHTML:function(n){return EditorManager.activeEditor.controlManager.createControl(n);},loadCSS:function(u){tinymce.DOM.loadCSS(u);},importCSS:function(doc,u){if(doc==document)this.loadCSS(u);else new tinymce.dom.DOMUtils(doc).loadCSS(u);},log:function(){console.debug.apply(console,arguments);},getLang:function(n,dv){var v=EditorManager.activeEditor.getLang(n.replace(/^lang_/g,''),dv);if(/^[0-9\-.]+$/g.test(v))return parseInt(v);return v;},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.execCommand;},triggerNodeChange:function(){EditorManager.activeEditor.nodeChanged();},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return tinymce.trim(s);},xmlEncode:function(s){return tinymce.DOM.encode(s);},explode:function(s,d){var o=[];tinymce.each(s.split(d),function(v){if(v!='')o.push(v);});return o;},switchClass:function(id,cls){var b;if(/^mceButton/.test(cls)){b=EditorManager.activeEditor.controlManager.get(id);if(!b)return;switch(cls){case"mceButtonNormal":b.setDisabled(false);b.setActive(false);return;case"mceButtonDisabled":b.setDisabled(true);return;case"mceButtonSelected":b.setActive(true);b.setDisabled(false);return;}}},addCSSClass:function(e,n,b){return tinymce.DOM.addClass(e,n,b);},hasCSSClass:function(e,n){return tinymce.DOM.hasClass(e,n);},removeCSSClass:function(e,n){return tinymce.DOM.removeClass(e,n);},getCSSClasses:function(){var cl=EditorManager.activeEditor.dom.getClasses(),o=[];each(cl,function(c){o.push(c['class']);});return o;},setWindowArg:function(n,v){EditorManager.activeEditor.windowManager.params[n]=v;},getWindowArg:function(n,dv){var wm=EditorManager.activeEditor.windowManager,v;v=wm.getParam(n);if(v==='')return'';return v||wm.getFeature(n)||dv;},getParentNode:function(n,f){return this._getDOM().getParent(n,f);},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a;},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn);},na?na:[]);},getAttrib:function(e,n,dv){return this._getDOM().getAttrib(e,n,dv);},setAttrib:function(e,n,v){return this._getDOM().setAttrib(e,n,v);},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i];}return o;},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a);}return a;},getContent:function(){return EditorManager.activeEditor.getContent();},getParentElement:function(n,na,f){if(na)na=new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$','g');return this._getDOM().getParent(n,function(n){return n.nodeType==1&&(!na||na.test(n.nodeName))&&(!f||f(n));},this.activeEditor.getBody());},importPluginLanguagePack:function(n){tinymce.PluginManager.requireLangPack(n);},getButtonHTML:function(cn,lang,img,c,u,v){var ed=EditorManager.activeEditor;img=img.replace(/\{\$pluginurl\}/g,tinyMCE.pluginURL);img=img.replace(/\{\$themeurl\}/g,tinyMCE.themeURL);lang=lang.replace(/^lang_/g,'');return ed.controlManager.createButton(cn,{title:lang,command:c,ui:u,value:v,scope:this,'class':'compat',image:img});},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w;}return false;},accessibleEventHandler:function(e){var elm,win=this._win;e=tinymce.isIE?win.event:e;elm=tinymce.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null;}return true;}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null;}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false;}return true;},cancelEvent:function(e){return tinymce.dom.Event.cancel(e);},handleVisualAid:function(e){EditorManager.activeEditor.addVisual(e);},getAbsPosition:function(n,r){return tinymce.DOM.getPos(n,r);},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s;},getVisualAidClass:function(s){return s;},parseStyle:function(s){return this._getDOM().parseStyle(s);},serializeStyle:function(s){return this._getDOM().serializeStyle(s);},openWindow:function(tpl,args){var ed=EditorManager.activeEditor,o={},n;for(n in tpl)o[n]=tpl[n];tpl=o;args=args||{};tpl.url=new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);tpl.inline=tpl.inline||args.inline;ed.windowManager.open(tpl,args);},closeWindow:function(win){EditorManager.activeEditor.windowManager.close(win);},getOuterHTML:function(e){return tinymce.DOM.getOuterHTML(e);},setOuterHTML:function(e,h,d){return tinymce.DOM.setOuterHTML(e,h,d);},hasPlugin:function(n){return tinymce.PluginManager.get(n)!=null;},_setEventsEnabled:function(){},addPlugin:function(pn,f){var t=this;function PluginWrapper(ed){tinyMCE.selectedInstance=ed;ed.onInit.add(function(){t.settings=ed.settings;t.settings['base_href']=tinyMCE.documentBasePath;tinyMCE.settings=t.settings;tinyMCE.documentBasePath=ed.documentBasePath;if(f.initInstance)f.initInstance(ed);ed.contentDocument=ed.getDoc();ed.contentWindow=ed.getWin();ed.undoRedo=ed.undoManager;ed.startContent=ed.getContent({format:'raw'});tinyMCE.instances[ed.id]=ed;tinyMCE.loadedFiles=[];});ed.onActivate.add(function(){tinyMCE.settings=ed.settings;tinyMCE.selectedInstance=ed;});if(f.handleNodeChange){ed.onNodeChange.add(function(ed,cm,n){f.handleNodeChange(ed.id,n,0,0,false,!ed.selection.isCollapsed());});}if(f.onChange){ed.onChange.add(function(ed,n){return f.onChange(ed);});}if(f.cleanup){ed.onGetContent.add(function(){});}this.getInfo=function(){return f.getInfo();};this.createControl=function(n){tinyMCE.pluginURL=tinymce.baseURL+'/plugins/'+pn;tinyMCE.themeURL=tinymce.baseURL+'/themes/'+tinyMCE.activeEditor.settings.theme;if(f.getControlHTML)return f.getControlHTML(n);return null;};this.execCommand=function(cmd,ui,val){if(f.execCommand)return f.execCommand(ed.id,ed.getBody(),cmd,ui,val);return false;};};tinymce.PluginManager.add(pn,PluginWrapper);},_getDOM:function(){return tinyMCE.activeEditor?tinyMCE.activeEditor.dom:tinymce.DOM;},convertRelativeToAbsoluteURL:function(b,u){return new tinymce.util.URI(b).toAbsolute(u);},convertAbsoluteURLToRelativeURL:function(b,u){return new tinymce.util.URI(b).toRelative(u);}});tinymce.extend(tinymce.Editor.prototype,{getFocusElement:function(){return this.selection.getNode();},getData:function(n){if(!this.data)this.data=[];if(!this.data[n])this.data[n]=[];return this.data[n];},hasPlugin:function(n){return this.plugins[n]!=null;},getContainerWin:function(){return window;},getHTML:function(raw){return this.getContent({format:raw?'raw':'html'});},setHTML:function(h){this.setContent(h);},getSel:function(){return this.selection.getSel();},getRng:function(){return this.selection.getRng();},isHidden:function(){var s;if(!tinymce.isGecko)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},translate:function(s){var c=this.settings.language,o;if(!s)return s;o=tinymce.EditorManager.i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{#'+b+'}';});o=o.replace(/{\$lang_([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{$lang_'+b+'}';});return o;},repaint:function(){this.execCommand('mceRepaint');}});tinymce.extend(tinymce.dom.Selection.prototype,{getSelectedText:function(){return this.getContent({format:'text'});},getSelectedHTML:function(){return this.getContent({format:'html'});},getFocusElement:function(){return this.getNode();},selectNode:function(node,collapse,select_text_node,to_start){var t=this;t.select(node,select_text_node||0);if(!is(collapse))collapse=true;if(collapse){if(!is(to_start))to_start=true;t.collapse(to_start);}}});}).call(this);tinymce.PluginManager.add('compat2x',tinymce.plugins.Compat2x);})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/compat2x/editor_plugin_src.js
@@ -1,1 +1,617 @@
+/**

+ * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $

+ *

+ * @author Moxiecode


+ */

+

+(function() {

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;

+

+	tinymce.create('tinymce.plugins.Compat2x', {

+		getInfo : function() {

+			return {

+				longname : 'Compat2x',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',

+				version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

+			};

+		}

+	});

+

+	(function() {

+		// Extend tinyMCE/EditorManager

+		tinymce.extend(tinyMCE, {

+			addToLang : function(p, l) {

+				each(l, function(v, k) {

+					tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;

+				});

+			},

+

+			getInstanceById : function(n) {

+				return this.get(n);

+			}

+		});

+	})();

+

+	(function() {

+		var EditorManager = tinymce.EditorManager;

+

+		tinyMCE.instances = {};

+		tinyMCE.plugins = {};

+		tinymce.PluginManager.onAdd.add(function(pm, n, p) {

+			tinyMCE.plugins[n] = p;

+		});

+

+		tinyMCE.majorVersion = tinymce.majorVersion;

+		tinyMCE.minorVersion = tinymce.minorVersion;

+		tinyMCE.releaseDate = tinymce.releaseDate;

+		tinyMCE.baseURL = tinymce.baseURL;

+		tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;

+		tinyMCE.isMSIE5 = tinymce.isIE;

+		tinyMCE.isMSIE5_0 = tinymce.isIE;

+		tinyMCE.isMSIE7 = tinymce.isIE;

+		tinyMCE.isGecko = tinymce.isGecko;

+		tinyMCE.isSafari = tinymce.isWebKit;

+		tinyMCE.isOpera = tinymce.isOpera;

+		tinyMCE.isMac = false;

+		tinyMCE.isNS7 = false;

+		tinyMCE.isNS71 = false;

+		tinyMCE.compat = true;

+

+		// Extend tinyMCE class

+		TinyMCE_Engine = tinyMCE;

+		tinymce.extend(tinyMCE, {

+			getParam : function(n, dv) {

+				return this.activeEditor.getParam(n, dv);

+			},

+

+			addEvent : function(e, na, f, sc) {

+				tinymce.dom.Event.add(e, na, f, sc || this);

+			},

+

+			getControlHTML : function(n) {

+				return EditorManager.activeEditor.controlManager.createControl(n);

+			},

+

+			loadCSS : function(u) {

+				tinymce.DOM.loadCSS(u);

+			},

+

+			importCSS : function(doc, u) {

+				if (doc == document)

+					this.loadCSS(u);

+				else

+					new tinymce.dom.DOMUtils(doc).loadCSS(u);

+			},

+

+			log : function() {

+				console.debug.apply(console, arguments);

+			},

+

+			getLang : function(n, dv) {

+				var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);

+

+				// Is number

+				if (/^[0-9\-.]+$/g.test(v))

+					return parseInt(v);

+

+				return v;

+			},

+

+			isInstance : function(o) {

+				return o != null && typeof(o) == "object" && o.execCommand;

+			},

+

+			triggerNodeChange : function() {

+				EditorManager.activeEditor.nodeChanged();

+			},

+

+			regexpReplace : function(in_str, reg_exp, replace_str, opts) {

+				var re;

+

+				if (in_str == null)

+					return in_str;

+

+				if (typeof(opts) == "undefined")

+					opts = 'g';

+

+				re = new RegExp(reg_exp, opts);

+

+				return in_str.replace(re, replace_str);

+			},

+

+			trim : function(s) {

+				return tinymce.trim(s);

+			},

+

+			xmlEncode : function(s) {

+				return tinymce.DOM.encode(s);

+			},

+

+			explode : function(s, d) {

+				var o = [];

+

+				tinymce.each(s.split(d), function(v) {

+					if (v != '')

+						o.push(v);

+				});

+

+				return o;

+			},

+

+			switchClass : function(id, cls) {

+				var b;

+

+				if (/^mceButton/.test(cls)) {

+					b = EditorManager.activeEditor.controlManager.get(id);

+

+					if (!b)

+						return;

+

+					switch (cls) {

+						case "mceButtonNormal":

+							b.setDisabled(false);

+							b.setActive(false);

+							return;

+

+						case "mceButtonDisabled":

+							b.setDisabled(true);

+							return;

+

+						case "mceButtonSelected":

+							b.setActive(true);

+							b.setDisabled(false);

+							return;

+					}

+				}

+			},

+

+			addCSSClass : function(e, n, b) {

+				return tinymce.DOM.addClass(e, n, b);

+			},

+

+			hasCSSClass : function(e, n) {

+				return tinymce.DOM.hasClass(e, n);

+			},

+

+			removeCSSClass : function(e, n) {

+				return tinymce.DOM.removeClass(e, n);

+			},

+

+			getCSSClasses : function() {

+				var cl = EditorManager.activeEditor.dom.getClasses(), o = [];

+

+				each(cl, function(c) {

+					o.push(c['class']);

+				});

+

+				return o;

+			},

+

+			setWindowArg : function(n, v) {

+				EditorManager.activeEditor.windowManager.params[n] = v;

+			},

+

+			getWindowArg : function(n, dv) {

+				var wm = EditorManager.activeEditor.windowManager, v;

+

+				v = wm.getParam(n);

+				if (v === '')

+					return '';

+

+				return v || wm.getFeature(n) || dv;

+			},

+

+			getParentNode : function(n, f) {

+				return this._getDOM().getParent(n, f);

+			},

+

+			selectElements : function(n, na, f) {

+				var i, a = [], nl, x;

+

+				for (x=0, na = na.split(','); x<na.length; x++)

+					for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)

+						(!f || f(nl[i])) && a.push(nl[i]);

+

+				return a;

+			},

+

+			getNodeTree : function(n, na, t, nn) {

+				return this.selectNodes(n, function(n) {

+					return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);

+				}, na ? na : []);

+			},

+

+			getAttrib : function(e, n, dv) {

+				return this._getDOM().getAttrib(e, n, dv);

+			},

+

+			setAttrib : function(e, n, v) {

+				return this._getDOM().setAttrib(e, n, v);

+			},

+

+			getElementsByAttributeValue : function(n, e, a, v) {

+				var i, nl = n.getElementsByTagName(e), o = [];

+

+				for (i=0; i<nl.length; i++) {

+					if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)

+						o[o.length] = nl[i];

+				}

+

+				return o;

+			},

+

+			selectNodes : function(n, f, a) {

+				var i;

+

+				if (!a)

+					a = [];

+

+				if (f(n))

+					a[a.length] = n;

+

+				if (n.hasChildNodes()) {

+					for (i=0; i<n.childNodes.length; i++)

+						tinyMCE.selectNodes(n.childNodes[i], f, a);

+				}

+

+				return a;

+			},

+

+			getContent : function() {

+				return EditorManager.activeEditor.getContent();

+			},

+

+			getParentElement : function(n, na, f) {

+				if (na)

+					na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');

+

+				return this._getDOM().getParent(n, function(n) {

+					return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));

+				}, this.activeEditor.getBody());

+			},

+

+			importPluginLanguagePack : function(n) {

+				tinymce.PluginManager.requireLangPack(n);

+			},

+

+			getButtonHTML : function(cn, lang, img, c, u, v) {

+				var ed = EditorManager.activeEditor;

+

+				img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);

+				img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);

+				lang = lang.replace(/^lang_/g, '');

+

+				return ed.controlManager.createButton(cn, {

+					title : lang,

+					command : c,

+					ui : u,

+					value : v,

+					scope : this,

+					'class' : 'compat',

+					image : img

+				});

+			},

+

+			addSelectAccessibility : function(e, s, w) {

+				// Add event handlers 

+				if (!s._isAccessible) {

+					s.onkeydown = tinyMCE.accessibleEventHandler;

+					s.onblur = tinyMCE.accessibleEventHandler;

+					s._isAccessible = true;

+					s._win = w;

+				}

+

+				return false;

+			},

+

+			accessibleEventHandler : function(e) {

+				var elm, win = this._win;

+

+				e = tinymce.isIE ? win.event : e;

+				elm = tinymce.isIE ? e.srcElement : e.target;

+

+				// Unpiggyback onchange on blur

+				if (e.type == "blur") {

+					if (elm.oldonchange) {

+						elm.onchange = elm.oldonchange;

+						elm.oldonchange = null;

+					}

+

+					return true;

+				}

+

+				// Piggyback onchange

+				if (elm.nodeName == "SELECT" && !elm.oldonchange) {

+					elm.oldonchange = elm.onchange;

+					elm.onchange = null;

+				}

+

+				// Execute onchange and remove piggyback

+				if (e.keyCode == 13 || e.keyCode == 32) {

+					elm.onchange = elm.oldonchange;

+					elm.onchange();

+					elm.oldonchange = null;

+

+					tinyMCE.cancelEvent(e);

+					return false;

+				}

+

+				return true;

+			},

+

+			cancelEvent : function(e) {

+				return tinymce.dom.Event.cancel(e);

+			},

+

+			handleVisualAid : function(e) {

+				EditorManager.activeEditor.addVisual(e);

+			},

+

+			getAbsPosition : function(n, r) {

+				return tinymce.DOM.getPos(n, r);

+			},

+

+			cleanupEventStr : function(s) {

+				s = "" + s;

+				s = s.replace('function anonymous()\n{\n', '');

+				s = s.replace('\n}', '');

+				s = s.replace(/^return true;/gi, ''); // Remove event blocker

+

+				return s;

+			},

+

+			getVisualAidClass : function(s) {

+				// TODO: Implement

+				return s;

+			},

+

+			parseStyle : function(s) {

+				return this._getDOM().parseStyle(s);

+			},

+

+			serializeStyle : function(s) {

+				return this._getDOM().serializeStyle(s);

+			},

+

+			openWindow : function(tpl, args) {

+				var ed = EditorManager.activeEditor, o = {}, n;

+

+				// Convert name/value array to object

+				for (n in tpl)

+					o[n] = tpl[n];

+

+				tpl = o;

+

+				args = args || {};

+				tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);

+				tpl.inline = tpl.inline || args.inline;

+

+				ed.windowManager.open(tpl, args);

+			},

+

+			closeWindow : function(win) {

+				EditorManager.activeEditor.windowManager.close(win);

+			},

+

+			getOuterHTML : function(e) {

+				return tinymce.DOM.getOuterHTML(e);

+			},

+

+			setOuterHTML : function(e, h, d) {

+				return tinymce.DOM.setOuterHTML(e, h, d);

+			},

+

+			hasPlugin : function(n) {

+				return tinymce.PluginManager.get(n) != null;

+			},

+

+			_setEventsEnabled : function() {

+				// Ignore it!!

+			},

+

+			addPlugin : function(pn, f) {

+				var t = this;

+

+				function PluginWrapper(ed) {

+					tinyMCE.selectedInstance = ed;

+

+					ed.onInit.add(function() {

+						t.settings = ed.settings;

+						t.settings['base_href'] = tinyMCE.documentBasePath;

+						tinyMCE.settings = t.settings;

+						tinyMCE.documentBasePath = ed.documentBasePath;

+						//ed.formElement = DOM.get(ed.id);

+

+						if (f.initInstance)

+							f.initInstance(ed);

+

+						ed.contentDocument = ed.getDoc();

+						ed.contentWindow = ed.getWin();

+						ed.undoRedo = ed.undoManager;

+						ed.startContent = ed.getContent({format : 'raw'});

+

+						tinyMCE.instances[ed.id] = ed;

+						tinyMCE.loadedFiles = [];

+					});

+

+					ed.onActivate.add(function() {

+						tinyMCE.settings = ed.settings;

+						tinyMCE.selectedInstance = ed;

+					});

+

+				/*	if (f.removeInstance) {

+						ed.onDestroy.add(function() {

+							return f.removeInstance(ed.id);

+						});

+					}*/

+

+					if (f.handleNodeChange) {

+						ed.onNodeChange.add(function(ed, cm, n) {

+							f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());

+						});

+					}

+

+					if (f.onChange) {

+						ed.onChange.add(function(ed, n) {

+							return f.onChange(ed);

+						});

+					}

+

+					if (f.cleanup) {

+						ed.onGetContent.add(function() {

+							//f.cleanup(type, content, inst);

+						});

+					}

+

+					this.getInfo = function() {

+						return f.getInfo();

+					};

+

+					this.createControl = function(n) {

+						tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;

+						tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;

+

+						if (f.getControlHTML)

+							return f.getControlHTML(n);

+

+						return null;

+					};

+

+					this.execCommand = function(cmd, ui, val) {

+						if (f.execCommand)

+							return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);

+

+						return false;

+					};

+				};

+

+				tinymce.PluginManager.add(pn, PluginWrapper);

+			},

+

+			_getDOM : function() {

+				return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;

+			},

+

+			convertRelativeToAbsoluteURL : function(b, u) {

+				return new tinymce.util.URI(b).toAbsolute(u);

+			},

+

+			convertAbsoluteURLToRelativeURL : function(b, u) {

+				return new tinymce.util.URI(b).toRelative(u);

+			}

+		});

+

+		// Extend Editor class

+		tinymce.extend(tinymce.Editor.prototype, {

+			getFocusElement : function() {

+				return this.selection.getNode();

+			},

+

+			getData : function(n) {

+				if (!this.data)

+					this.data = [];

+

+				if (!this.data[n])

+					this.data[n] = [];

+

+				return this.data[n];

+			},

+

+			hasPlugin : function(n) {

+				return this.plugins[n] != null;

+			},

+

+			getContainerWin : function() {

+				return window;

+			},

+

+			getHTML : function(raw) {

+				return this.getContent({ format : raw ? 'raw' : 'html'});

+			},

+

+			setHTML : function(h) {

+				this.setContent(h);

+			},

+

+			getSel : function() {

+				return this.selection.getSel();

+			},

+

+			getRng : function() {

+				return this.selection.getRng();

+			},

+

+			isHidden : function() {

+				var s;

+

+				if (!tinymce.isGecko)

+					return false;

+

+				s = this.getSel();

+

+				// Weird, wheres that cursor selection?

+				return (!s || !s.rangeCount || s.rangeCount == 0);

+			},

+

+			translate : function(s) {

+				var c = this.settings.language, o;

+

+				if (!s)

+					return s;

+

+				o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {

+					return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';

+				});

+

+				o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {

+					return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';

+				});

+

+				return o;

+			},

+

+			repaint : function() {

+				this.execCommand('mceRepaint');

+			}

+		});

+

+		// Extend selection

+		tinymce.extend(tinymce.dom.Selection.prototype, {

+			getSelectedText : function() {

+				return this.getContent({format : 'text'});

+			},

+

+			getSelectedHTML : function() {

+				return this.getContent({format : 'html'});

+			},

+

+			getFocusElement : function() {

+				return this.getNode();

+			},

+

+			selectNode : function(node, collapse, select_text_node, to_start) {

+				var t = this;

+

+				t.select(node, select_text_node || 0);

+

+				if (!is(collapse))

+					collapse = true;

+

+				if (collapse) {

+					if (!is(to_start))

+						to_start = true;

+

+					t.collapse(to_start);

+				}

+			}

+		});

+	}).call(this);

+

+	// Register plugin

+	tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);

+})();

+

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(e){var h=this,f,d,i;h.editor=e;d=e.settings.contextmenu_never_use_native;h.onContextMenu=new tinymce.util.Dispatcher(this);f=e.onContextMenu.add(function(j,k){if((i!==0?i:k.ctrlKey)&&!d){return}a.cancel(k);if(k.target.nodeName=="IMG"){j.selection.select(k.target)}h._getMenu(j).showMenu(k.clientX||k.pageX,k.clientY||k.pageY);a.add(j.getDoc(),"click",function(l){g(j,l)});j.nodeChanged()});e.onRemove.add(function(){if(h._menu){h._menu.removeAll()}});function g(j,k){i=0;if(k&&k.button==2){i=k.ctrlKey;return}if(h._menu){h._menu.removeAll();h._menu.destroy();a.remove(j.getDoc(),"click",g);h._menu=null}}e.onMouseDown.add(g);e.onKeyDown.add(g);e.onKeyDown.add(function(j,k){if(k.shiftKey&&!k.ctrlKey&&!k.altKey&&k.keyCode===121){a.cancel(k);f(j,k)}})},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(e){var g=this,d=g._menu,j=e.selection,f=j.isCollapsed(),h=j.getNode()||e.getBody(),i,k;if(d){d.removeAll();d.destroy()}k=b.getPos(e.getContentAreaContainer());d=e.controlManager.createDropMenu("contextmenu",{offset_x:k.x+e.getParam("contextmenu_offset_x",0),offset_y:k.y+e.getParam("contextmenu_offset_y",0),constrain:1,keyboard_focus:true});g._menu=d;d.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(f);d.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(f);d.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((h.nodeName=="A"&&!e.dom.getAttrib(h,"name"))||!f){d.addSeparator();d.add({title:"advanced.link_desc",icon:"link",cmd:e.plugins.advlink?"mceAdvLink":"mceLink",ui:true});d.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}d.addSeparator();d.add({title:"advanced.image_desc",icon:"image",cmd:e.plugins.advimage?"mceAdvImage":"mceImage",ui:true});d.addSeparator();i=d.addMenu({title:"contextmenu.align"});i.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});i.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});i.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});i.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});g.onContextMenu.dispatch(g,d,h,f);return d}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
@@ -1,1 +1,162 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;

+

+	/**

+	 * This plugin a context menu to TinyMCE editor instances.

+	 *

+	 * @class tinymce.plugins.ContextMenu

+	 */

+	tinymce.create('tinymce.plugins.ContextMenu', {

+		/**

+		 * Initializes the plugin, this will be executed after the plugin has been created.

+		 * This call is done before the editor instance has finished it's initialization so use the onInit event

+		 * of the editor instance to intercept that event.

+		 *

+		 * @method init

+		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.

+		 * @param {string} url Absolute URL to where the plugin is located.

+		 */

+		init : function(ed) {

+			var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey;

+

+			t.editor = ed;

+

+			contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;

+

+			/**

+			 * This event gets fired when the context menu is shown.

+			 *

+			 * @event onContextMenu

+			 * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.

+			 * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.

+			 */

+			t.onContextMenu = new tinymce.util.Dispatcher(this);

+

+			showMenu = ed.onContextMenu.add(function(ed, e) {

+				// Block TinyMCE menu on ctrlKey and work around Safari issue

+				if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative)

+					return;

+

+				Event.cancel(e);

+

+				// Select the image if it's clicked. WebKit would other wise expand the selection

+				if (e.target.nodeName == 'IMG')

+					ed.selection.select(e.target);

+

+				t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY);

+				Event.add(ed.getDoc(), 'click', function(e) {

+					hide(ed, e);

+				});

+

+				ed.nodeChanged();

+			});

+

+			ed.onRemove.add(function() {

+				if (t._menu)

+					t._menu.removeAll();

+			});

+

+			function hide(ed, e) {

+				realCtrlKey = 0;

+

+				// Since the contextmenu event moves

+				// the selection we need to store it away

+				if (e && e.button == 2) {

+					realCtrlKey = e.ctrlKey;

+					return;

+				}

+

+				if (t._menu) {

+					t._menu.removeAll();

+					t._menu.destroy();

+					Event.remove(ed.getDoc(), 'click', hide);

+					t._menu = null;

+				}

+			};

+

+			ed.onMouseDown.add(hide);

+			ed.onKeyDown.add(hide);

+			ed.onKeyDown.add(function(ed, e) {

+				if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) {

+					Event.cancel(e);

+					showMenu(ed, e);

+				}

+			});

+		},

+

+		/**

+		 * Returns information about the plugin as a name/value array.

+		 * The current keys are longname, author, authorurl, infourl and version.

+		 *

+		 * @method getInfo

+		 * @return {Object} Name/value array containing information about the plugin.

+		 */

+		getInfo : function() {

+			return {

+				longname : 'Contextmenu',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		_getMenu : function(ed) {

+			var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p;

+

+			if (m) {

+				m.removeAll();

+				m.destroy();

+			}

+

+			p = DOM.getPos(ed.getContentAreaContainer());

+

+			m = ed.controlManager.createDropMenu('contextmenu', {

+				offset_x : p.x + ed.getParam('contextmenu_offset_x', 0),

+				offset_y : p.y + ed.getParam('contextmenu_offset_y', 0),

+				constrain : 1,

+				keyboard_focus: true

+			});

+

+			t._menu = m;

+

+			m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);

+			m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);

+			m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});

+

+			if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {

+				m.addSeparator();

+				m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});

+				m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});

+			}

+

+			m.addSeparator();

+			m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});

+

+			m.addSeparator();

+			am = m.addMenu({title : 'contextmenu.align'});

+			am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});

+			am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});

+			am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});

+			am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});

+

+			t.onContextMenu.dispatch(t, m, el, col);

+

+			return m;

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/css/devkit.css
@@ -1,1 +1,118 @@
+body {

+	overflow: hidden;

+}

+

+h1 {

+	font-size: 14px;

+	margin: 0 0 10px 0;

+}

+

+h2 {

+	font-size: 12px;

+	margin: 3px 0 3px 0;

+}

+

+h3 {

+	font-size: 11px;

+	margin: 3px 0 3px 0;

+}

+

+#log {

+	font-family: Verdana;

+	border: 1px solid gray;

+	width: 100%; height: 240px;

+	overflow: scroll;

+	white-space: nowrap;

+}

+

+#log span {

+	display: block;

+}

+

+#log span.msg {

+	float: left;

+}

+

+#log span.time {

+	float: left;

+}

+

+#log br {

+	clear: both;

+}

+

+#logfilter {

+	width: 350px;

+}

+

+#logenabled {

+	border: 0;

+}

+

+#settings_panel span, #info_panel span, #content_panel span, #command_states_panel span, #undo_redo_panel span {

+	display: block;

+	margin: 5px 0 5px 0;

+}

+

+div.data {

+	width: 100%; height: 240px;

+	overflow: scroll;

+	border: 1px solid gray;

+}

+

+#misc_panel div.data {

+	height: 270px;

+}

+

+.data input {

+	width: 265px;

+	border: 0;

+}

+

+.data h2 {

+	margin-left: 5px;

+}

+

+.data h3 {

+	margin-left: 7px;

+}

+

+.data div {

+	margin-left: 7px;

+}

+

+.data table {

+	margin: 0 0 15px 15px;

+}

+

+.data p {

+	margin: 0; padding: 0;

+	margin-top: 5px;

+	margin-left: 5px;

+}

+

+table, td {

+	border: 1px solid gray;

+	border-collapse: collapse;

+}

+

+#flip {

+	position: absolute;

+	left: 295; top: 384px;

+}

+

+.bspec {

+	color: gray;

+}

+

+.dep {

+	color: #880000;

+}

+

+.col1 {

+	width: 265px;

+}

+

+div.undodata {

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/css/devkit_ui.css
@@ -1,1 +1,16 @@
+#devkit {

+	position: absolute;

+	top: -385px; right: 0;

+	width: 640px; height: 390px;

+	border: 1px solid black;

+	z-index: 10000;

+}

+

+.devkitup {

+	top: -385px !important;

+}

+

+.devkitdown {

+	top: 0 !important;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/devkit.htm
@@ -1,1 +1,141 @@
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{$lang_devkit_title}</title>

+	<script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script language="javascript" type="text/javascript" src="jscripts/devkit.js"></script>

+	<script language="javascript" type="text/javascript" src="jscripts/diff.js"></script>

+	<link href="css/devkit.css" rel="stylesheet" type="text/css" />

+	<base target="_self" />

+</head>

+<body id="devkit" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">

+    <form action="#">

+		<h1>{$lang_devkit_title}</h1>

+

+		<div class="tabs">

+			<ul>

+				<li id="log_tab" class="current"><span><a href="javascript:mcTabs.displayTab('log_tab','log_panel');" onmousedown="return false;">{$lang_devkit_log_tab}</a></span></li>

+				<li id="info_tab"><span><a href="javascript:mcTabs.displayTab('info_tab','info_panel');" onmousedown="return false;">{$lang_devkit_info_tab}</a></span></li>

+				<li id="settings_tab"><span><a href="javascript:mcTabs.displayTab('settings_tab','settings_panel');" onmousedown="return false;">{$lang_devkit_settings_tab}</a></span></li>

+				<li id="content_tab"><span><a href="javascript:mcTabs.displayTab('content_tab','content_panel');" onmousedown="return false;">{$lang_devkit_content_tab}</a></span></li>

+				<!-- <li id="command_states_tab"><span><a href="javascript:mcTabs.displayTab('command_states_tab','command_states_panel');" onmousedown="return false;">{$lang_devkit_command_states_tab}</a></span></li> -->

+				<li id="undo_redo_tab"><span><a href="javascript:mcTabs.displayTab('undo_redo_tab','undo_redo_panel');" onmousedown="return false;">{$lang_devkit_undo_redo_tab}</a></span></li>

+				<li id="misc_tab"><span><a href="javascript:mcTabs.displayTab('misc_tab','misc_panel');" onmousedown="return false;">{$lang_devkit_misc_tab}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="log_panel" class="panel current">

+				<fieldset>

+					<legend>{$lang_devkit_log_tab}</legend>

+

+					<div style="float: left">

+						<label>{$lang_devkit_filter} </label><input type="text" id="logfilter" name="logfilter" value="" onchange="changeFilter(this.value);" />

+					</div>

+

+					<div style="float: left">

+						<input type="checkbox" id="logenabled" name="logenabled" value="true" checked="checked" onclick="toggleLog(this.checked);" />

+					</div>

+

+					<div style="float: right">

+						<a href="javascript:clearLog();">[{$lang_devkit_clear_log}]</a>

+					</div>

+

+					<br style="clear: both" />

+

+					<div id="log">

+					</div>

+

+					<input type="checkbox" id="debug_events" name="debug_events" class="checkbox" onclick="toggleDebugEvents(this.checked);" /><label for="debug_events" onclick="toggleDebugEvents(this.form.debug_events.checked);">{$lang_devkit_debug_events}</label>

+				</fieldset>

+			</div>

+

+			<div id="info_panel" class="panel">

+				<fieldset>

+					<legend>{$lang_devkit_info_tab}</legend>

+

+					<span><a href="javascript:renderInfo();">[{$lang_devkit_refresh}]</a></span>

+

+					<div id="info" class="data">

+						<p>{$lang_devkit_info_help}</p>

+					</div>

+				</fieldset>

+			</div>

+

+			<div id="settings_panel" class="panel">

+			<fieldset>

+					<legend>{$lang_devkit_settings_tab}</legend>

+

+					<span><a href="javascript:renderSettings();">[{$lang_devkit_refresh}]</a></span>

+

+					<div id="settings" class="data">

+						<p>{$lang_devkit_settings_help}</p>

+					</div>

+				</fieldset>

+			</div>

+

+			<div id="content_panel" class="panel">

+			<fieldset>

+					<legend>{$lang_devkit_content_tab}</legend>

+

+					<span><a href="javascript:renderContent();">[{$lang_devkit_refresh}]</a></span>

+

+					<div id="content" class="data">

+						<p>{$lang_devkit_content_help}</p>

+					</div>

+				</fieldset>

+			</div>

+

+			<div id="command_states_panel" class="panel">

+			<fieldset>

+					<legend>{$lang_devkit_command_states_tab}</legend>

+

+					<span><a href="javascript:renderCommandStates();">[{$lang_devkit_refresh}]</a></span>

+

+					<div id="command_states" class="data">

+						<p>{$lang_devkit_command_states_help}</p>

+					</div>

+				</fieldset>

+			</div>

+

+			<div id="undo_redo_panel" class="panel">

+				<fieldset>

+					<legend>{$lang_devkit_undo_redo_tab}</legend>

+

+					<span><a href="javascript:renderUndoRedo();">[{$lang_devkit_refresh}]</a></span>

+

+					<div id="undo_redo" class="data">

+						<p>{$lang_devkit_undo_redo_help}</p>

+					</div>

+

+					<input type="checkbox" id="undo_diff" name="undo_diff" class="checkbox" /><label for="undo_diff">{$lang_devkit_undo_diff}</label>

+				</fieldset>

+			</div>

+

+			<div id="misc_panel" class="panel">

+				<fieldset>

+					<legend>{$lang_devkit_misc_tab}</legend>

+

+					<div class="data">

+						<p>{$lang_devkit_misc_help}</p>

+						<hr />

+						<p>Selection: <a href="#" onmousedown="return storeSelection();">[Store selection]</a> <a href="#" onmousedown="return restoreSelection();">[Restore selection]</a></p>

+						<hr />

+						<div><strong>Insert custom HTML content</strong></div>

+						<div><textarea id="htmlcont" name="htmlcont" style="width: 90%" rows="5"></textarea></div>

+						<div><a href="#" onclick="return tinyMCE.execCommand('mceInsertContent',false,document.getElementById('htmlcont').value);">[Insert content]</a></div>

+						<hr />

+						<div><strong>Eval JS:</strong></div>

+						<div><textarea id="jscont" name="jscont" style="width: 90%" rows="5">tinyMCE.execCommand('Bold',false,null);</textarea></div>

+						<div><a href="#" onclick="return parent.window.eval(document.getElementById('jscont').value);">[Evaluate]</a></div>

+					</div>

+				</fieldset>

+			</div>

+		</div>

+    </form>

+

+	<div id="flip"><a href="javascript:toggleFlip();" onmousedown="return false;"><img id="flipbtn" src="images/flip_down.gif" border="0" /></a></div>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/editor_plugin.js
@@ -1,1 +1,1 @@
-
+tinyMCE.importPluginLanguagePack('devkit');var TinyMCE_DevKitPlugin={_logFilter:'\\[(importCSS|execCommand|execInstanceCommand|debug)\\]',_logPadding:'',_startTime:null,_benchMark:false,_winLoaded:false,_isDebugEvents:false,getInfo:function(){return{longname:'Development Kit',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/devkit',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){this._setup()},_setup:function(){if(this._loaded)return;this._loaded=true;document.___TinyMCE=tinyMCE;this._logFilter=tinyMCE.getParam('devkit_log_filter',this._logFilter);this._benchMark=tinyMCE.getParam('devkit_bench_mark',false);var ifr=document.createElement('iframe');ifr.setAttribute("id","devkit");ifr.setAttribute("frameBorder","0");ifr.setAttribute("src",tinyMCE.baseURL+'/plugins/devkit/devkit.htm');document.body.appendChild(ifr);tinyMCE.importCSS(document,tinyMCE.baseURL+'/plugins/devkit/css/devkit_ui.css')},_start:function(){this._logPadding+='\u00a0';return new Date().getTime()},_end:function(st){if(this._logPadding.length>0)this._logPadding=this._logPadding.substring(0,this._logPadding.length-1);if(this._benchMark)this._log("benchmark","Execution time: "+(new Date().getTime()-st))},_log:function(t){var m,a,i,e=document.getElementById('devkit'),now=new Date().getTime();if(!this._startTime)this._startTime=now;m=(this._logPadding.length>1?this._logPadding:'')+'['+(now-this._startTime)+'] ['+t+'] ';a=this._log.arguments;for(i=1;i<a.length;i++){if(typeof(a[i])=='undefined')continue;if(i>1)m+=', ';m+=a[i]}if(!new RegExp(this._logFilter,'gi').test(m)){if(this._logPadding.length>0)this._logPadding=this._logPadding.substring(0,this._logPadding.length-1);return}if(!this._winLoaded)tinyMCE.log[tinyMCE.log.length]=m;else e.contentWindow.debug(m)},_debugEvents:function(s){var i,ld,inst,n,ev=['CheckboxStateChange','DOMAttrModified','DOMMenuItemActive','DOMMenuItemInactive','DOMMouseScroll','DOMNodeInserted','DOMNodeRemoved','RadioStateChange','blur','broadcast','change','click','close','command','commandupdate','contextmenu','dblclick','dragdrop','dragenter','dragexit','draggesture','dragover','focus','input','keydown','keypress','keyup','load','mousedown','mouseout','mouseover','mouseup','overflow','overflowchanged','popuphidden','popuphiding','popupshowing','popupshown','select','syncfrompreference','synctopreference','underflow','unload','abort','activate','afterprint','afterupdate','beforeactivate','beforecopy','beforecut','beforedeactivate','beforeeditfocus','beforepaste','beforeprint','beforeunload','beforeupdate','bounce','cellchange','controlselect','copy','cut','dataavailable','datasetchanged','datasetcomplete','deactivate','dragend','dragleave','dragstart','drop','error','errorupdate','filterchange','finish','focusin','focusout','help','layoutcomplete','losecapture','mouseenter','mouseleave','mousewheel','move','moveend','movestart','paste','propertychange','readystatechange','reset','resize','resizeend','resizestart','rowenter','rowexit','rowsdelete','rowsinserted','scroll','selectionchange','selectstart','start','stop','submit'];if(TinyMCE_DevKitPlugin._isDebugEvents==s)return;TinyMCE_DevKitPlugin._isDebugEvents=s;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst)||inst.getDoc()==ld)continue;ld=inst.getDoc();for(i=0;i<ev.length;i++){if(s)tinyMCE.addEvent(ld,ev[i],TinyMCE_DevKitPlugin._debugEvent);else tinyMCE.removeEvent(ld,ev[i],TinyMCE_DevKitPlugin._debugEvent)}}},_debugEvent:function(e){var t;e=e?e:tinyMCE.selectedInstance.getWin().event;t=e.srcElement?e.srcElement:e.target;tinyMCE.debug(e.type,t?t.nodeName:'')},_serialize:function(o){var i,v,s=TinyMCE_DevKitPlugin._serialize;if(o==null)return'null';switch(typeof o){case'string':v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(new RegExp('([\u0080-\uFFFF\\x00-\\x1f\\"])','g'),function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a})+'"';case'object':if(o instanceof Array){for(i=0,v='[';i<o.length;i++)v+=(i>0?',':'')+s(o[i]);return v+']'}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}'}return''+o}};tinyMCE.__debug=tinyMCE.debug;tinyMCE.debug=function(){var a,i,m='',now=new Date().getTime(),start=TinyMCE_DevKitPlugin._startTime;if(!start)TinyMCE_DevKitPlugin._startTime=start=now;a=this.debug.arguments;for(i=0;i<a.length;i++){if(typeof(a[i])=='undefined')continue;if(i>0)m+=', ';m+=a[i]}TinyMCE_DevKitPlugin._log('debug',m)};tinyMCE.dump=function(o){tinyMCE.debug(TinyMCE_DevKitPlugin._serialize(o))};tinyMCE.sleep=function(t){var s=new Date().getTime(),b;while(new Date().getTime()-s<t)b=1};tinyMCE.__execCommand=tinyMCE.execCommand;tinyMCE.execCommand=function(command,user_interface,value){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execCommand',command,user_interface,value);r=tinyMCE.__execCommand(command,user_interface,value);dk._end(st);return r};tinyMCE.__execInstanceCommand=tinyMCE.execInstanceCommand;tinyMCE.execInstanceCommand=function(editor_id,command,user_interface,value,focus){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execInstanceCommand',editor_id,command,user_interface,value);r=tinyMCE.__execInstanceCommand(editor_id,command,user_interface,value);dk._end(st);return r};TinyMCE_Engine.prototype.__handleEvent=TinyMCE_Engine.prototype.handleEvent;TinyMCE_Engine.prototype.handleEvent=function(e){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('handleEvent',e.type);r=tinyMCE.__handleEvent(e);dk._end(st);return r};tinyMCE.__importCSS=tinyMCE.importCSS;tinyMCE.importCSS=function(doc,css){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('importCSS',doc,css);r=tinyMCE.__importCSS(doc,css);dk._end(st);return r};tinyMCE.__triggerNodeChange=tinyMCE.triggerNodeChange;tinyMCE.triggerNodeChange=function(focus,setup_content){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('triggerNodeChange',focus,setup_content);r=tinyMCE.__triggerNodeChange(focus,setup_content);dk._end(st);return r};tinyMCE.__dispatchCallback=tinyMCE.dispatchCallback;tinyMCE.dispatchCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('dispatchCallback',i,p,n);r=tinyMCE.__dispatchCallback(i,p,n);dk._end(st);return r};tinyMCE.__executeCallback=tinyMCE.executeCallback;tinyMCE.executeCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('executeCallback',i,p,n);r=tinyMCE.__executeCallback(i,p,n);dk._end(st);return r};tinyMCE.__execCommandCallback=tinyMCE.execCommandCallback;tinyMCE.execCommandCallback=function(i,p,n){var r,st,dk=TinyMCE_DevKitPlugin;st=dk._start();dk._log('execCommandCallback',i,p,n);r=tinyMCE.__execCommandCallback(i,p,n);dk._end(st);return r};tinyMCE.addPlugin("devkit",TinyMCE_DevKitPlugin);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/editor_plugin_src.js
@@ -1,1 +1,326 @@
+/**

+ * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $

+ *

+ * @author Moxiecode


+ */

+

+tinyMCE.importPluginLanguagePack('devkit');

+

+var TinyMCE_DevKitPlugin = {

+	_logFilter : '\\[(importCSS|execCommand|execInstanceCommand|debug)\\]',

+	_logPadding : '',

+	_startTime : null,

+	_benchMark : false,

+	_winLoaded : false,

+	_isDebugEvents : false,

+

+	getInfo : function() {

+		return {

+			longname : 'Development Kit',

+			author : 'Moxiecode Systems AB',

+			authorurl : 'http://tinymce.moxiecode.com',

+			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/devkit',

+			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

+		};

+	},

+

+	initInstance : function(inst) {

+		this._setup();

+	},

+

+	_setup : function() {

+		if (this._loaded)

+			return;

+

+		this._loaded = true;

+

+		// Register a document reference for more easy access in the FF DOM inspector

+		document.___TinyMCE = tinyMCE;

+

+		// Setup devkit by settings

+		this._logFilter = tinyMCE.getParam('devkit_log_filter', this._logFilter);

+		this._benchMark = tinyMCE.getParam('devkit_bench_mark', false);

+

+		var ifr = document.createElement('iframe');

+

+		ifr.setAttribute("id", "devkit");

+		ifr.setAttribute("frameBorder", "0");

+		ifr.setAttribute("src", tinyMCE.baseURL + '/plugins/devkit/devkit.htm');

+

+		document.body.appendChild(ifr);

+

+		// Workaround for strange IE reload bug

+		//if (tinyMCE.isRealIE)

+		//	document.getElementById('devkit').outerHTML = document.getElementById('devkit').outerHTML;

+

+		tinyMCE.importCSS(document, tinyMCE.baseURL + '/plugins/devkit/css/devkit_ui.css');

+	},

+

+	_start : function() {

+		this._logPadding += '\u00a0';

+

+		return new Date().getTime();

+	},

+

+	_end : function(st) {

+		if (this._logPadding.length > 0)

+			this._logPadding = this._logPadding.substring(0, this._logPadding.length - 1);

+

+		if (this._benchMark)

+			this._log("benchmark", "Execution time: " + (new Date().getTime() - st));

+	},

+

+	_log : function(t) {

+		var m, a, i, e = document.getElementById('devkit'), now = new Date().getTime();

+

+		if (!this._startTime)

+			this._startTime = now;

+

+		m = (this._logPadding.length > 1 ? this._logPadding : '') + '[' + (now - this._startTime) + '] [' + t + '] ';

+

+		a = this._log.arguments;

+		for (i=1; i<a.length; i++) {

+			if (typeof(a[i]) == 'undefined')

+				continue;

+

+			if (i > 1)

+				m += ', ';

+

+			m += a[i];

+		}

+

+		if (!new RegExp(this._logFilter, 'gi').test(m)) {

+			if (this._logPadding.length > 0)

+				this._logPadding = this._logPadding.substring(0, this._logPadding.length - 1);

+

+			return;

+		}

+

+		if (!this._winLoaded)

+			tinyMCE.log[tinyMCE.log.length] = m;

+		else

+			e.contentWindow.debug(m);

+	},

+

+	_debugEvents : function(s) {

+		var i, ld, inst, n, ev = ['CheckboxStateChange','DOMAttrModified','DOMMenuItemActive',

+				'DOMMenuItemInactive','DOMMouseScroll','DOMNodeInserted','DOMNodeRemoved',

+				'RadioStateChange','blur','broadcast','change','click','close','command',

+				'commandupdate','contextmenu','dblclick','dragdrop','dragenter','dragexit',

+				'draggesture','dragover','focus','input','keydown','keypress','keyup','load',

+				'mousedown','mouseout','mouseover','mouseup','overflow','overflowchanged','popuphidden',

+				'popuphiding','popupshowing','popupshown','select','syncfrompreference','synctopreference',

+				'underflow','unload','abort','activate','afterprint','afterupdate','beforeactivate',

+				'beforecopy','beforecut','beforedeactivate','beforeeditfocus','beforepaste','beforeprint',

+				'beforeunload','beforeupdate','bounce','cellchange','controlselect','copy','cut',

+				'dataavailable','datasetchanged','datasetcomplete','deactivate','dragend','dragleave',

+				'dragstart','drop','error','errorupdate','filterchange','finish','focusin','focusout',

+				'help','layoutcomplete','losecapture','mouseenter','mouseleave','mousewheel',

+				'move','moveend','movestart','paste','propertychange','readystatechange','reset','resize',

+				'resizeend','resizestart','rowenter','rowexit','rowsdelete','rowsinserted','scroll',

+				'selectionchange','selectstart','start','stop','submit'];

+		// mousemove

+

+		if (TinyMCE_DevKitPlugin._isDebugEvents == s)

+			return;

+

+		TinyMCE_DevKitPlugin._isDebugEvents = s;

+

+		for (n in tinyMCE.instances) {

+			inst = tinyMCE.instances[n];

+

+			if (!tinyMCE.isInstance(inst) || inst.getDoc() == ld)

+				continue;

+

+			ld = inst.getDoc();

+

+			for (i=0; i<ev.length; i++) {

+				if (s)

+					tinyMCE.addEvent(ld, ev[i], TinyMCE_DevKitPlugin._debugEvent);

+				else

+					tinyMCE.removeEvent(ld, ev[i], TinyMCE_DevKitPlugin._debugEvent);

+			}

+		}

+	},

+

+	_debugEvent : function(e) {

+		var t;

+

+		e = e ? e : tinyMCE.selectedInstance.getWin().event;

+		t = e.srcElement ? e.srcElement : e.target;

+

+		tinyMCE.debug(e.type, t ? t.nodeName : '');

+	},

+

+	_serialize : function(o) {

+		var i, v, s = TinyMCE_DevKitPlugin._serialize;

+

+		if (o == null)

+			return 'null';

+

+		switch (typeof o) {

+			case 'string':

+				v = '\bb\tt\nn\ff\rr\""\'\'\\\\';

+

+				return '"' + o.replace(new RegExp('([\u0080-\uFFFF\\x00-\\x1f\\"])', 'g'), function(a, b) {

+					i = v.indexOf(b);

+

+					if (i+1)

+						return '\\' + v.charAt(i + 1);

+

+					a = b.charCodeAt().toString(16);

+

+					return '\\u' + '0000'.substring(a.length) + a;

+				}) + '"';

+

+			case 'object':

+				if (o instanceof Array) {

+					for (i=0, v = '['; i<o.length; i++)

+						v += (i > 0 ? ',' : '') + s(o[i]);

+

+					return v + ']';

+				}

+

+				v = '{';

+

+				for (i in o)

+					v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : '';

+

+				return v + '}';

+		}

+

+		return '' + o;

+	}

+};

+

+// Patch and piggy back functions

+tinyMCE.__debug = tinyMCE.debug;

+tinyMCE.debug = function() {

+	var a, i, m = '', now = new Date().getTime(), start = TinyMCE_DevKitPlugin._startTime;

+

+	if (!start)

+		TinyMCE_DevKitPlugin._startTime = start = now;

+

+	a = this.debug.arguments;

+	for (i=0; i<a.length; i++) {

+		if (typeof(a[i]) == 'undefined')

+			continue;

+

+		if (i > 0)

+			m += ', ';

+

+		m += a[i];

+	}

+

+	TinyMCE_DevKitPlugin._log('debug', m);

+};

+

+tinyMCE.dump = function(o) {

+	tinyMCE.debug(TinyMCE_DevKitPlugin._serialize(o));

+};

+

+tinyMCE.sleep = function(t) {

+	var s = new Date().getTime(), b;

+

+	while (new Date().getTime() - s < t) b=1;

+};

+

+tinyMCE.__execCommand = tinyMCE.execCommand;

+tinyMCE.execCommand = function(command, user_interface, value) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('execCommand', command, user_interface, value);

+	r = tinyMCE.__execCommand(command, user_interface, value);

+	dk._end(st);

+

+	return r;

+};

+

+tinyMCE.__execInstanceCommand = tinyMCE.execInstanceCommand;

+tinyMCE.execInstanceCommand = function(editor_id, command, user_interface, value, focus) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('execInstanceCommand', editor_id, command, user_interface, value);

+	r = tinyMCE.__execInstanceCommand(editor_id, command, user_interface, value);

+	dk._end(st);

+

+	return r;

+};

+

+TinyMCE_Engine.prototype.__handleEvent = TinyMCE_Engine.prototype.handleEvent;

+TinyMCE_Engine.prototype.handleEvent = function(e) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('handleEvent', e.type);

+	r = tinyMCE.__handleEvent(e);

+	dk._end(st);

+

+	return r;

+};

+

+tinyMCE.__importCSS = tinyMCE.importCSS;

+tinyMCE.importCSS = function(doc, css) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('importCSS', doc, css);

+	r = tinyMCE.__importCSS(doc, css);

+	dk._end(st);

+

+	return r;

+};

+

+tinyMCE.__triggerNodeChange = tinyMCE.triggerNodeChange;

+tinyMCE.triggerNodeChange = function(focus, setup_content) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('triggerNodeChange', focus, setup_content);

+	r = tinyMCE.__triggerNodeChange(focus, setup_content);

+	dk._end(st);

+

+	return r;

+};

+

+tinyMCE.__dispatchCallback = tinyMCE.dispatchCallback;

+tinyMCE.dispatchCallback = function(i, p, n) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('dispatchCallback', i, p, n);

+	r = tinyMCE.__dispatchCallback(i, p, n);

+	dk._end(st);

+

+	return r;

+};

+

+tinyMCE.__executeCallback = tinyMCE.executeCallback;

+tinyMCE.executeCallback = function(i, p, n) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('executeCallback', i, p, n);

+	r = tinyMCE.__executeCallback(i, p, n);

+	dk._end(st);

+

+	return r;

+};

+

+tinyMCE.__execCommandCallback = tinyMCE.execCommandCallback;

+tinyMCE.execCommandCallback = function(i, p, n) {

+	var r, st, dk = TinyMCE_DevKitPlugin;

+

+	st = dk._start();

+	dk._log('execCommandCallback', i, p, n);

+	r = tinyMCE.__execCommandCallback(i, p, n);

+	dk._end(st);

+

+	return r;

+};

+

+tinyMCE.addPlugin("devkit", TinyMCE_DevKitPlugin);

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/devkit/images/flip_down.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/devkit/images/flip_up.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/jscripts/devkit.js
@@ -1,1 +1,331 @@
-
+var devkit = parent.tinyMCE.plugins['devkit'], logEnabled = true, flip = false, book = null;

+

+function init() {

+	var log, i, f = document.forms[0];

+

+	devkit._winLoaded = true;

+

+	log = tinyMCE.log;

+

+	for (i=0; i<log.length; i++)

+		debug(log[i]);

+

+	f.logfilter.value = devkit._logFilter;

+}

+

+function changeFilter(f) {

+	devkit._logFilter = f;

+}

+

+function toggleLog(s) {

+	logEnabled = s;

+}

+

+function toggleFlip() {

+	document.getElementById('flipbtn').src = flip ? 'images/flip_down.gif' : 'images/flip_up.gif';

+

+	if (flip)

+		parent.document.getElementById('devkit').className = 'devkitup';

+	else

+		parent.document.getElementById('devkit').className = 'devkitdown';

+

+	flip = !flip;

+}

+

+function debug(s) {

+	var d, l, n;

+

+	if (!logEnabled || !new RegExp(devkit._logFilter, 'gi').test(s))

+		return;

+

+	d = document;

+	l = d.getElementById('log');

+	n = d.createElement('span');

+

+	n.innerHTML = tinyMCE.xmlEncode(s);

+

+	l.appendChild(n);

+	l.scrollTop = l.scrollHeight;

+}

+

+function renderInfo() {

+	var se = document.getElementById('info'), n, sn, inst, h = '', sel, rng, instCount = 0, rc;

+

+	h += '<h2>Browser info:</h2>';

+

+	h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

+	h += addRenderInfo('navigator.userAgent', navigator.userAgent);

+	h += addRenderInfo('navigator.appName', navigator.appName);

+	h += addRenderInfo('navigator.platform', navigator.platform);

+	h += addRenderInfo('navigator.language', navigator.language, 'bspec');

+	h += addRenderInfo('navigator.browserLanguage', navigator.browserLanguage, 'bspec');

+	h += addRenderInfo('navigator.systemLanguage', navigator.systemLanguage, 'bspec');

+	h += addRenderInfo('navigator.userLanguage', navigator.userLanguage, 'bspec');

+	h += addRenderInfo('opera.buildNumber("inconspicuous")', typeof(opera) != 'undefined' && opera.buildNumber ? opera.buildNumber('inconspicuous') : null, 'bspec');

+	h += addRenderInfo('window.innerWidth', parent.window.innerWidth, 'bspec');

+	h += addRenderInfo('window.innerHeight', parent.window.innerHeight, 'bspec');

+	h += addRenderInfo('document.body.offsetWidth', parent.document.body.offsetWidth);

+	h += addRenderInfo('document.body.offsetHeight', parent.document.body.offsetHeight);

+	h += addRenderInfo('screen.width', screen.width);

+	h += addRenderInfo('screen.height', screen.height);

+	h += addRenderInfo('screen.availWidth', screen.availWidth);

+	h += addRenderInfo('screen.availHeight', screen.availHeight);

+	h += addRenderInfo('screen.colorDepth', screen.colorDepth);

+	h += addRenderInfo('screen.pixelDepth', screen.pixelDepth, 'bspec');

+	h += addRenderInfo('document.contentType', document.contentType, 'bspec');

+	h += '</table>';

+

+	h += '<h2>TinyMCE_Engine info:</h2>';

+

+	h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

+	h += addRenderInfo('baseURL', tinyMCE.baseURL);

+	h += addRenderInfo('selectedInstance.editorId', tinyMCE.selectedInstance ? tinyMCE.selectedInstance.editorId : null);

+	h += addRenderInfo('selectedElement.nodeName', tinyMCE.selectedElement ? tinyMCE.selectedElement.nodeName : null, 'dep');

+	h += addRenderInfo('loadedFiles',tinyMCE.loadedFiles.join(','));

+	h += addRenderInfo('isMSIE', tinyMCE.isMSIE);

+	h += addRenderInfo('isMSIE5', tinyMCE.isMSIE5);

+	h += addRenderInfo('isMSIE5_0', tinyMCE.isMSIE5_0);

+	h += addRenderInfo('isMSIE7', tinyMCE.isMSIE7);

+	h += addRenderInfo('isGecko', tinyMCE.isGecko);

+	h += addRenderInfo('isSafari', tinyMCE.isSafari);

+	h += addRenderInfo('isOpera', tinyMCE.isOpera);

+	h += addRenderInfo('isMac', tinyMCE.isMac);

+	h += addRenderInfo('isNS7', tinyMCE.isNS7);

+	h += addRenderInfo('isNS71', tinyMCE.isNS71);

+	h += addRenderInfo('idCounter', tinyMCE.idCounter);

+	h += addRenderInfo('currentConfig', tinyMCE.currentConfig);

+	h += addRenderInfo('majorVersion', tinyMCE.majorVersion);

+	h += addRenderInfo('minorVersion', tinyMCE.minorVersion);

+	h += addRenderInfo('releaseDate', tinyMCE.releaseDate);

+	h += addRenderInfo('documentBasePath', tinyMCE.documentBasePath);

+	h += addRenderInfo('documentURL', tinyMCE.documentURL);

+	h += '</table>';

+

+	for (n in tinyMCE.instances) {

+		inst = tinyMCE.instances[n];

+

+		if (!tinyMCE.isInstance(inst))

+			continue;

+

+		sel = inst.selection.getSel();

+		rng = inst.selection.getRng();

+

+		h += '<h2>TinyMCE_Control(' + (instCount++) + ') id: ' + inst.editorId + '</h2>';

+		h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

+

+		h += addRenderInfo('editorId', inst.editorId);

+		h += addRenderInfo('visualAid', inst.visualAid);

+		h += addRenderInfo('foreColor', inst.foreColor);

+		h += addRenderInfo('backColor', inst.backColor);

+		h += addRenderInfo('formTargetElementId', inst.formTargetElementId);

+		h += addRenderInfo('formElement', inst.formElement ? inst.formElement.nodeName : null);

+		h += addRenderInfo('oldTargetElement', inst.oldTargetElement ? inst.oldTargetElement.nodeName : null);

+		h += addRenderInfo('linkElement', inst.linkElement ? inst.linkElement.nodeName : null, 'dep');

+		h += addRenderInfo('imgElement', inst.imgElement ? inst.imgElement.nodeName : null, 'dep');

+		h += addRenderInfo('selectedNode', inst.selectedNode ? inst.selectedNode.nodeName : null, 'dep');

+		h += addRenderInfo('targetElement', inst.targetElement ? inst.targetElement.nodeName : null);

+		h += addRenderInfo('getBody().nodeName', inst.getBody() ? inst.getBody().nodeName : null);

+		h += addRenderInfo('getBody().getAttribute("id")', inst.getBody() ? inst.getBody().getAttribute("id") : null);

+		h += addRenderInfo('getDoc().location', inst.getDoc() ? inst.getDoc().location : null);

+		h += addRenderInfo('startContent', inst.startContent);

+		h += addRenderInfo('isHidden()', inst.isHidden());

+		h += addRenderInfo('isDirty()', inst.isDirty());

+		h += addRenderInfo('undoRedo.undoLevels.length', inst.undoRedo.undoLevels.length);

+		h += addRenderInfo('undoRedo.undoIndex', inst.undoRedo.undoIndex);

+		h += addRenderInfo('selection.getSelectedHTML()', inst.selection.getSelectedHTML());

+		h += addRenderInfo('selection.isCollapsed()', inst.selection.isCollapsed() || 'false');

+		h += addRenderInfo('selection.getSelectedText()', inst.selection.getSelectedText());

+		h += addRenderInfo('selection.getFocusElement().nodeName', inst.selection.getFocusElement().nodeName);

+		h += addRenderInfo('selection.getFocusElement().outerHTML', tinyMCE.getOuterHTML(inst.selection.getFocusElement()));

+

+		if ((tinyMCE.isGecko || tinyMCE.isOpera) && sel && rng) {

+			h += addRenderInfo('selection.getSel().anchorNode.nodeName', sel.anchorNode ? sel.anchorNode.nodeName : null, 'bspec');

+			h += addRenderInfo('selection.getSel().anchorOffset', sel.anchorOffset, 'bspec');

+			h += addRenderInfo('selection.getSel().focusNode.nodeName', sel.focusNode ? sel.focusNode.nodeName : null, 'bspec');

+			h += addRenderInfo('selection.getSel().focusOffset', sel.focusOffset, 'bspec');

+			h += addRenderInfo('selection.getRng().startContainer.nodeName', rng.startContainer ? rng.startContainer.nodeName : null, 'bspec');

+			h += addRenderInfo('selection.getRng().startOffset', rng.startOffset, 'bspec');

+			h += addRenderInfo('selection.getRng().endContainer.nodeName', rng.endContainer ? rng.endContainer.nodeName : null, 'bspec');

+			h += addRenderInfo('selection.getRng().endOffset', rng.endOffset, 'bspec');

+		}

+

+		if (typeof(rng.item) != 'undefined' || typeof(rng.htmlText) != 'undefined') {

+			if (!rng.item) {

+				h += addRenderInfo('selection.getSel().type', sel.type, 'bspec');

+				h += addRenderInfo('selection.getRng().htmlText', rng.htmlText, 'bspec');

+				h += addRenderInfo('selection.getRng().text', rng.text, 'bspec');

+			} else

+				h += addRenderInfo('selection.getRng().item(0).nodeName', rng.item(0).nodeName, 'bspec');

+		}

+

+		h += '</table>';

+	}

+

+	h += '<p>Fields marked in <strong class="bspec">gray</strong> is not cross browser and should be used with care.</p>';

+	h += '<p>Fields marked <strong class="dep">red</strong> are marked deprecated and will be removed in the future.</p><br />';

+

+	se.innerHTML = h;

+}

+

+function addRenderInfo(n, v, c) {

+	return '<tr><td' + (c ? ' class="' + c + '"' : '')+ '>' + n + '</td><td><input type="text" value="' + tinyMCE.xmlEncode(v != null ? ('' + v).replace(/[\r\n]/g, '') : 'null') + '" /></td></tr>';

+}

+

+function renderSettings() {

+	var se = document.getElementById('settings'), n, sn, inst, h = '', v;

+

+	for (n in tinyMCE.instances) {

+		inst = tinyMCE.instances[n];

+

+		if (!tinyMCE.isInstance(inst))

+			continue;

+

+		h += '<h2>Instance id: ' + inst.editorId + '</h2>';

+		h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

+

+		for (sn in inst.settings) {

+			v = inst.settings[sn];

+

+			h += '<tr><td class="col1">' + tinyMCE.xmlEncode(sn) + '</td><td><input type="text" value="' + tinyMCE.xmlEncode(v) + '" /></td></tr>';

+		}

+

+		h += '</table>';

+	}

+

+	se.innerHTML = h;

+}

+

+function renderContent() {

+	var se = document.getElementById('content'), n, inst, h = '';

+

+	for (n in tinyMCE.instances) {

+		inst = tinyMCE.instances[n];

+

+		if (!tinyMCE.isInstance(inst))

+			continue;

+

+		h += '<h2>Instance id: ' + inst.editorId + '</h2>';

+

+		h += '<h3>Start content - inst.startContent:</h3>';

+		h += '<div>' + tinyMCE.xmlEncode(inst.startContent) + '</div>';

+

+		h += '<h3>Raw content - inst.getBody().innerHTML or inst.getHTML(true):</h3>';

+		h += '<div>' + tinyMCE.xmlEncode(inst.getHTML(true)) + '</div>';

+

+		h += '<h3>Cleaned content - inst.getHTML():</h3>';

+		h += '<div>' + tinyMCE.xmlEncode(inst.getHTML()) + '</div>';

+

+		if (inst.serializedHTML) {

+			h += '<h3>Serialized HTML content - inst.serializedHTML:</h3>';

+			h += '<div>' + tinyMCE.xmlEncode(inst.serializedHTML) + '</div>';

+		}

+	}

+

+	se.innerHTML = h;

+}

+

+function renderCommandStates() {

+	var se = document.getElementById('command_states'), n, inst, h = '', v, ex;

+	var cmds = new Array('2D-Position','AbsolutePosition','BackColor','BlockDirLTR','BlockDirRTL','Bold','BrowseMode','Copy','CreateBookmark','CreateLink','Cut','Delete','DirLTR','DirRTL','EditMode','enableInlineTableEditing','enableObjectResizing','FontName','FontSize','ForeColor','FormatBlock','Indent','InsertButton','InsertFieldset','InsertHorizontalRule','InsertIFrame','InsertImage','InsertInputButton','InsertInputCheckbox','InsertInputFileUpload','InsertInputHidden','InsertInputImage','InsertInputPassword','InsertInputRadio','InsertInputReset','InsertInputSubmit','InsertInputText','InsertMarquee','InsertOrderedList','InsertParagraph','InsertSelectDropdown','InsertSelectListbox','InsertTextArea','InsertUnorderedList','Italic','JustifyCenter','JustifyFull','JustifyLeft','JustifyNone','JustifyRight','LiveResize','MultipleSelection','Open','Outdent','OverWrite','Paste','PlayImage','Redo','Refresh','RemoveFormat','SaveAs','SelectAll','SizeToControl','SizeToControlHeight','SizeToControlWidth','Stop','StopImage','StrikeThrough','styleWithCSS','Subscript','Superscript','UnBookmark','Underline','Undo','Unlink','Unselect'), i;

+

+	for (n in tinyMCE.instances) {

+		inst = tinyMCE.instances[n];

+

+		if (!tinyMCE.isInstance(inst))

+			continue;

+

+		h += '<h2>Instance id: ' + inst.editorId + '</h2>';

+		h += '<table border="0" cellpadding="0" cellspacing="0" class="data">';

+

+		for (i=0; i<cmds.length; i++) {

+			v = null;

+

+			try {

+				v = tinyMCE.isGecko || inst.getDoc().queryCommandSupported(cmds[i]);

+				v = v ? inst.queryCommandState(cmds[i]) : 'Not supported';

+			} catch (ex) {

+				v = 'Not supported';

+			}

+

+			h += '<tr><td><input type="text" value="' + tinyMCE.xmlEncode(cmds[i]) + '" /></td><td><input type="text" value="' + tinyMCE.xmlEncode(v) + '" /></td></tr>';

+		}

+

+		h += '</table>';

+	}

+

+	se.innerHTML = h;

+}

+

+function renderUndoRedo() {

+	var se = document.getElementById('undo_redo'), inst, n, h = '', i, le, id, d, ur;

+	var f = document.forms[0];	

+

+	if (tinyMCE.undoLevels) {

+		le = tinyMCE.undoLevels;

+

+		h += '<h2>Global undo/redo</h2>';

+		h += '<table border="0" cellpadding="0" cellspacing="0" width="50%" class="data">';

+		h += '<tr><td>undoLevels.length</td><td>' + le.length + '</td></tr>';

+		h += '<tr><td>undoIndex</td><td>' + tinyMCE.undoIndex + '</td></tr>';

+		h += '</table>';

+

+		for (i=0; i<le.length; i++)

+			h += '<h3>Level: ' + i + ', Instance: ' + (le[i] ? le[i].editorId : 'null') + '</h3>';

+	}

+

+	for (n in tinyMCE.instances) {

+		inst = tinyMCE.instances[n];

+

+		if (!tinyMCE.isInstance(inst))

+			continue;

+

+		ur = inst.undoRedo;

+		le = ur.undoLevels;

+

+		h += '<hr /><h2>Instance id: ' + inst.editorId + '</h2>';

+		h += '<table border="0" cellpadding="0" cellspacing="0" width="50%" class="data">';

+		h += '<tr><td>undoLevels.length</td><td>' + le.length + '</td></tr>';

+		h += '<tr><td>undoIndex</td><td>' + ur.undoIndex + '</td></tr>';

+		h += '<tr><td>typingUndoIndex</td><td>' + ur.typingUndoIndex + '</td></tr>';

+		h += '<tr><td>undoRedo</td><td>' + ur.undoRedo + '</td></tr>';

+		h += '</table>';

+

+		for (i=0; i<le.length; i++) {

+			h += '<h3>Level: ' + i + (!le[i].bookmark ? "" : " [bookmark]") + '</h3>';

+			h += '<div class="undodata">' + tinyMCE.xmlEncode(le[i].content) + '</div>';

+

+			if (i > 0 && f.undo_diff.checked) {

+				d = diff_main(i > 0 ? le[i-1].content.replace(/[\r\n]+/g, '') : null, le[i].content.replace(/[\r\n]+/g, ''), false);

+				diff_cleanup_semantic(d);

+				h += '<h3>Diff ' + (i-1) + ',' + i + '</h3><div class="undodata">' + diff_prettyhtml(d) + '</div>';

+			}

+		}

+	}

+

+	se.innerHTML = h;

+}

+

+function clearLog() {

+	document.getElementById('log').innerHTML = '';

+	devkit._startTime = null;

+}

+

+function cancelAction() {

+	parent.document.getElementById('devkit').style.display = 'none';

+}

+

+function toggleDebugEvents(s) {

+	devkit._debugEvents(s);

+}

+

+function storeSelection() {

+	book = tinyMCE.selectedInstance.selection.getBookmark();

+

+	return false;

+}

+

+function restoreSelection() {

+	tinyMCE.selectedInstance.selection.moveToBookmark(book);

+

+	return false;

+}

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/jscripts/diff.js
@@ -1,1 +1,1193 @@
+// Diff_Match_Patch v1.3

+// Computes the difference between two texts to create a patch.

+// Applies the patch onto another text, allowing for errors.

+// Copyright (C) 2006 Neil Fraser

+// http://neil.fraser.name/software/diff_match_patch/

+

+// This program is free software; you can redistribute it and/or

+// modify it under the terms of the GNU General Public License

+// as published by the Free Software Foundation.

+

+// This program is distributed in the hope that it will be useful,

+// but WITHOUT ANY WARRANTY; without even the implied warranty of

+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+// GNU General Public License (www.gnu.org) for more details.

+

+

+// Constants.

+// Redefine these in your program to override the defaults.

+

+// Number of seconds to map a diff before giving up.  (0 for infinity)

+var DIFF_TIMEOUT = 1.0;

+// Cost of an empty edit operation in terms of edit characters.

+var DIFF_EDIT_COST = 4;

+// Tweak the relative importance (0.0 = accuracy, 1.0 = proximity)

+var MATCH_BALANCE = 0.5;

+// At what point is no match declared (0.0 = perfection, 1.0 = very loose)

+var MATCH_THRESHOLD = 0.5;

+// The min and max cutoffs used when computing text lengths.

+var MATCH_MINLENGTH = 100;

+var MATCH_MAXLENGTH = 1000;

+// Chunk size for context length.

+var PATCH_MARGIN = 4;

+

+

+  //////////////////////////////////////////////////////////////////////

+ //  Diff                                                            //

+//////////////////////////////////////////////////////////////////////

+

+// The data structure representing a diff is an array of tuples:

+// [[-1, "Hello"], [1, "Goodbye"], [0, " world."]]

+// which means: delete "Hello", add "Goodbye" and keep " world."

+

+

+function diff_main(text1, text2, checklines) {

+  // Find the differences between two texts.  Return an array of changes.

+  // If checklines is present and false, then don't run a line-level diff first to identify the changed areas.

+  // Check for equality (speedup)

+  if (text1 == text2)

+    return [[0, text1]];

+

+  if (typeof checklines == 'undefined')

+    checklines = true;

+

+  var a;

+  // Trim off common prefix (speedup)

+  a = diff_prefix(text1, text2);

+  text1 = a[0];

+  text2 = a[1];

+  var commonprefix = a[2];

+

+  // Trim off common suffix (speedup)

+  a = diff_suffix(text1, text2);

+  text1 = a[0];

+  text2 = a[1];

+  var commonsuffix = a[2];

+

+  var diff, i;

+  var longtext = text1.length > text2.length ? text1 : text2;

+  var shorttext = text1.length > text2.length ? text2 : text1;

+

+  if (!text1) {  // Just add some text (speedup)

+    diff = [[1, text2]];

+  } else if (!text2) { // Just delete some text (speedup)

+    diff = [[-1, text1]];

+  } else if ((i = longtext.indexOf(shorttext)) != -1) {

+    // Shorter text is inside the longer text (speedup)

+    diff = [[1, longtext.substring(0, i)], [0, shorttext], [1, longtext.substring(i+shorttext.length)]];

+    // Swap insertions for deletions if diff is reversed.

+    if (text1.length > text2.length)

+      diff[0][0] = diff[2][0] = -1;

+  } else {

+    longtext = shorttext = null; // Garbage collect

+    // Check to see if the problem can be split in two.

+    var hm = diff_halfmatch(text1, text2);

+    if (hm) {

+      // A half-match was found, sort out the return data.

+      var text1_a = hm[0];

+      var text1_b = hm[1];

+      var text2_a = hm[2];

+      var text2_b = hm[3];

+      var mid_common = hm[4];

+      // Send both pairs off for separate processing.

+      var diff_a = diff_main(text1_a, text2_a, checklines);

+      var diff_b = diff_main(text1_b, text2_b, checklines);

+      // Merge the results.

+      diff = diff_a.concat([[0, mid_common]], diff_b);

+    } else {

+      // Perform a real diff.

+      if (checklines && text1.length + text2.length < 250)

+        checklines = false; // Too trivial for the overhead.

+      if (checklines) {

+        // Scan the text on a line-by-line basis first.

+        a = diff_lines2chars(text1, text2);

+        text1 = a[0];

+        text2 = a[1];

+        var linearray = a[2];

+      }

+      diff = diff_map(text1, text2);

+      if (!diff) // No acceptable result.

+        diff = [[-1, text1], [1, text2]];

+      if (checklines) {

+        diff_chars2lines(diff, linearray); // Convert the diff back to original text.

+        diff_cleanup_semantic(diff); // Eliminate freak matches (e.g. blank lines)

+

+        // Rediff any replacement blocks, this time on character-by-character basis.

+        diff.push([0, '']);  // Add a dummy entry at the end.

+        var pointer = 0;

+        var count_delete = 0;

+        var count_insert = 0;

+        var text_delete = '';

+        var text_insert = '';

+        while(pointer < diff.length) {

+          if (diff[pointer][0] == 1) {

+            count_insert++;

+            text_insert += diff[pointer][1];

+          } else if (diff[pointer][0] == -1) {

+            count_delete++;

+            text_delete += diff[pointer][1];

+          } else {  // Upon reaching an equality, check for prior redundancies.

+            if (count_delete >= 1 && count_insert >= 1) {

+              // Delete the offending records and add the merged ones.

+              a = diff_main(text_delete, text_insert, false);

+              diff.splice(pointer - count_delete - count_insert, count_delete + count_insert);

+              pointer = pointer - count_delete - count_insert;

+              for (i=a.length-1; i>=0; i--)

+                diff.splice(pointer, 0, a[i]);

+              pointer = pointer + a.length;

+            }

+            count_insert = 0;

+            count_delete = 0;

+            text_delete = '';

+            text_insert = '';

+          }

+          pointer++;

+        }

+        diff.pop();  // Remove the dummy entry at the end.

+

+      }

+    }

+  }

+

+  if (commonprefix)

+    diff.unshift([0, commonprefix]);

+  if (commonsuffix)

+    diff.push([0, commonsuffix]);

+  diff_cleanup_merge(diff);

+  return diff;

+}

+

+

+function diff_lines2chars(text1, text2) {

+  // Split text into an array of strings.

+  // Reduce the texts to a string of hashes where each character represents one line.

+  var linearray = new Array();  // linearray[4] == "Hello\n"

+  var linehash = new Object();  // linehash["Hello\n"] == 4

+

+  // "\x00" is a valid JavaScript character, but the Venkman debugger doesn't like it (bug 335098)

+  // So we'll insert a junk entry to avoid generating a null character.

+  linearray.push('');

+

+  function diff_lines2chars_munge(text) {

+    // My first ever closure!

+    var i, line;

+    var chars = '';

+    while (text) {

+      i = text.indexOf('\n');

+      if (i == -1)

+        i = text.length;

+      line = text.substring(0, i+1);

+      text = text.substring(i+1);

+      if (linehash.hasOwnProperty ? linehash.hasOwnProperty(line) : (linehash[line] !== undefined)) {

+        chars += String.fromCharCode(linehash[line]);

+      } else {

+        linearray.push(line);

+        linehash[line] = linearray.length - 1;

+        chars += String.fromCharCode(linearray.length - 1);

+      }

+    }

+    return chars;

+  }

+

+  var chars1 = diff_lines2chars_munge(text1);

+  var chars2 = diff_lines2chars_munge(text2);

+  return [chars1, chars2, linearray];

+}

+

+

+function diff_chars2lines(diff, linearray) {

+  // Rehydrate the text in a diff from a string of line hashes to real lines of text.

+  var chars, text;

+  for (var x=0; x<diff.length; x++) {

+    chars = diff[x][1];

+    text = '';

+    for (var y=0; y<chars.length; y++)

+      text += linearray[chars.charCodeAt(y)];

+    diff[x][1] = text;

+  }

+}

+

+

+function diff_map(text1, text2) {

+  // Explore the intersection points between the two texts.

+  var now = new Date();

+  var ms_end = now.getTime() + DIFF_TIMEOUT * 1000; // Don't run for too long.

+  var max = (text1.length + text2.length) / 2;

+  var v_map1 = new Array();

+  var v_map2 = new Array();

+  var v1 = new Object();

+  var v2 = new Object();

+  v1[1] = 0;

+  v2[1] = 0;

+  var x, y;

+  var footstep; // Used to track overlapping paths.

+  var footsteps = new Object();

+  var done = false;

+  var hasOwnProperty = !!(footsteps.hasOwnProperty);

+  // If the total number of characters is odd, then the front path will collide with the reverse path.

+  var front = (text1.length + text2.length) % 2;

+  for (var d=0; d<max; d++) {

+    now = new Date();

+    if (DIFF_TIMEOUT > 0 && now.getTime() > ms_end) // Timeout reached

+      return null;

+

+    // Walk the front path one step.

+    v_map1[d] = new Object();

+    for (var k=-d; k<=d; k+=2) {

+      if (k == -d || k != d && v1[k-1] < v1[k+1])

+        x = v1[k+1];

+      else

+        x = v1[k-1]+1;

+      y = x - k;

+      footstep = x+","+y;

+      if (front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

+        done = true;

+      if (!front)

+        footsteps[footstep] = d;

+      while (!done && x < text1.length && y < text2.length && text1.charAt(x) == text2.charAt(y)) {

+        x++; y++;

+        footstep = x+","+y;

+        if (front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

+          done = true;

+        if (!front)

+          footsteps[footstep] = d;

+      }

+      v1[k] = x;

+      v_map1[d][x+","+y] = true;

+      if (done) {

+        // Front path ran over reverse path.

+        v_map2 = v_map2.slice(0, footsteps[footstep]+1);

+        var a = diff_path1(v_map1, text1.substring(0, x), text2.substring(0, y));

+        return a.concat(diff_path2(v_map2, text1.substring(x), text2.substring(y)));

+      }

+    }

+

+    // Walk the reverse path one step.

+    v_map2[d] = new Object();

+    for (var k=-d; k<=d; k+=2) {

+      if (k == -d || k != d && v2[k-1] < v2[k+1])

+        x = v2[k+1];

+      else

+        x = v2[k-1]+1;

+      y = x - k;

+      footstep = (text1.length-x)+","+(text2.length-y);

+      if (!front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

+        done = true;

+      if (front)

+        footsteps[footstep] = d;

+      while (!done && x < text1.length && y < text2.length && text1.charAt(text1.length-x-1) == text2.charAt(text2.length-y-1)) {

+        x++; y++;

+        footstep = (text1.length-x)+","+(text2.length-y);

+        if (!front && (hasOwnProperty ? footsteps.hasOwnProperty(footstep) : (footsteps[footstep] !== undefined)))

+          done = true;

+        if (front)

+          footsteps[footstep] = d;

+      }

+      v2[k] = x;

+      v_map2[d][x+","+y] = true;

+      if (done) {

+        // Reverse path ran over front path.

+        v_map1 = v_map1.slice(0, footsteps[footstep]+1);

+        var a = diff_path1(v_map1, text1.substring(0, text1.length-x), text2.substring(0, text2.length-y));

+        return a.concat(diff_path2(v_map2, text1.substring(text1.length-x), text2.substring(text2.length-y)));

+      }

+    }

+  }

+  // Number of diffs equals number of characters, no commonality at all.

+  return null;

+}

+

+

+function diff_path1(v_map, text1, text2) {

+  // Work from the middle back to the start to determine the path.

+  var path = [];

+  var x = text1.length;

+  var y = text2.length;

+  var last_op = null;

+  for (var d=v_map.length-2; d>=0; d--) {

+    while(1) {

+      if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty((x-1)+","+y) : (v_map[d][(x-1)+","+y] !== undefined)) {

+        x--;

+        if (last_op === -1)

+          path[0][1] = text1.charAt(x) + path[0][1];

+        else

+          path.unshift([-1, text1.charAt(x)]);

+        last_op = -1;

+        break;

+      } else if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty(x+","+(y-1)) : (v_map[d][x+","+(y-1)] !== undefined)) {

+        y--;

+        if (last_op === 1)

+          path[0][1] = text2.charAt(y) + path[0][1];

+        else

+          path.unshift([1, text2.charAt(y)]);

+        last_op = 1;

+        break;

+      } else {

+        x--;

+        y--;

+        //if (text1.charAt(x) != text2.charAt(y))

+        //  return alert("No diagonal.  Can't happen. (diff_path1)");

+        if (last_op === 0)

+          path[0][1] = text1.charAt(x) + path[0][1];

+        else

+          path.unshift([0, text1.charAt(x)]);

+        last_op = 0;

+      }

+    }

+  }

+  return path;

+}

+

+

+function diff_path2(v_map, text1, text2) {

+  // Work from the middle back to the end to determine the path.

+  var path = [];

+  var x = text1.length;

+  var y = text2.length;

+  var last_op = null;

+  for (var d=v_map.length-2; d>=0; d--) {

+    while(1) {

+      if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty((x-1)+","+y) : (v_map[d][(x-1)+","+y] !== undefined)) {

+        x--;

+        if (last_op === -1)

+          path[path.length-1][1] += text1.charAt(text1.length-x-1);

+        else

+          path.push([-1, text1.charAt(text1.length-x-1)]);

+        last_op = -1;

+        break;

+      } else if (v_map[d].hasOwnProperty ? v_map[d].hasOwnProperty(x+","+(y-1)) : (v_map[d][x+","+(y-1)] !== undefined)) {

+        y--;

+        if (last_op === 1)

+          path[path.length-1][1] += text2.charAt(text2.length-y-1);

+        else

+          path.push([1, text2.charAt(text2.length-y-1)]);

+        last_op = 1;

+        break;

+      } else {

+        x--;

+        y--;

+        //if (text1.charAt(text1.length-x-1) != text2.charAt(text2.length-y-1))

+        //  return alert("No diagonal.  Can't happen. (diff_path2)");

+        if (last_op === 0)

+          path[path.length-1][1] += text1.charAt(text1.length-x-1);

+        else

+          path.push([0, text1.charAt(text1.length-x-1)]);

+        last_op = 0;

+      }

+    }

+  }

+  return path;

+}

+

+

+function diff_prefix(text1, text2) {

+  // Trim off common prefix

+  var pointermin = 0;

+  var pointermax = Math.min(text1.length, text2.length);

+  var pointermid = pointermax;

+  while(pointermin < pointermid) {

+    if (text1.substring(0, pointermid) == text2.substring(0, pointermid))

+      pointermin = pointermid;

+    else

+      pointermax = pointermid;

+    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);

+  }

+  var commonprefix = text1.substring(0, pointermid);

+  text1 = text1.substring(pointermid);

+  text2 = text2.substring(pointermid);

+  return [text1, text2, commonprefix];

+}

+

+

+function diff_suffix(text1, text2) {

+  // Trim off common suffix

+  var pointermin = 0;

+  var pointermax = Math.min(text1.length, text2.length);

+  var pointermid = pointermax;

+  while(pointermin < pointermid) {

+    if (text1.substring(text1.length-pointermid) == text2.substring(text2.length-pointermid))

+      pointermin = pointermid;

+    else

+      pointermax = pointermid;

+    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);

+  }

+  var commonsuffix = text1.substring(text1.length-pointermid);

+  text1 = text1.substring(0, text1.length-pointermid);

+  text2 = text2.substring(0, text2.length-pointermid);

+  return [text1, text2, commonsuffix];

+}

+

+

+function diff_halfmatch(text1, text2) {

+  // Do the two texts share a substring which is at least half the length of the longer text?

+  var longtext = text1.length > text2.length ? text1 : text2;

+  var shorttext = text1.length > text2.length ? text2 : text1;

+  if (longtext.length < 10 || shorttext.length < 1)

+    return null; // Pointless.

+

+  function diff_halfmatch_i(longtext, shorttext, i) {

+    // Start with a 1/4 length substring at position i as a seed.

+    var seed = longtext.substring(i, i+Math.floor(longtext.length/4));

+    var j = -1;

+    var best_common = '';

+    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;

+    while ((j = shorttext.indexOf(seed, j+1)) != -1) {

+      var my_prefix = diff_prefix(longtext.substring(i), shorttext.substring(j));

+      var my_suffix = diff_suffix(longtext.substring(0, i), shorttext.substring(0, j));

+      if (best_common.length < (my_suffix[2] + my_prefix[2]).length) {

+        best_common = my_suffix[2] + my_prefix[2];

+        best_longtext_a = my_suffix[0];

+        best_longtext_b = my_prefix[0];

+        best_shorttext_a = my_suffix[1];

+        best_shorttext_b = my_prefix[1];

+      }

+    }

+    if (best_common.length >= longtext.length/2)

+      return [best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b, best_common];

+    else

+      return null;

+  }

+

+  // First check if the second quarter is the seed for a half-match.

+  var hm1 = diff_halfmatch_i(longtext, shorttext, Math.ceil(longtext.length/4));

+  // Check again based on the third quarter.

+  var hm2 = diff_halfmatch_i(longtext, shorttext, Math.ceil(longtext.length/2));

+  var hm;

+  if (!hm1 && !hm2)

+    return null;

+  else if (!hm2)

+    hm = hm1;

+  else if (!hm1)

+    hm = hm2;

+  else // Both matched.  Select the longest.

+    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;

+

+  // A half-match was found, sort out the return data.

+  if (text1.length > text2.length) {

+    var text1_a = hm[0];

+    var text1_b = hm[1];

+    var text2_a = hm[2];

+    var text2_b = hm[3];

+  } else {

+    var text2_a = hm[0];

+    var text2_b = hm[1];

+    var text1_a = hm[2];

+    var text1_b = hm[3];

+  }

+  var mid_common = hm[4];

+  return [text1_a, text1_b, text2_a, text2_b, mid_common];

+}

+

+

+function diff_cleanup_semantic(diff) {

+  // Reduce the number of edits by eliminating semantically trivial equalities.

+  var changes = false;

+  var equalities = []; // Stack of indices where equalities are found.

+  var lastequality = null; // Always equal to equalities[equalities.length-1][1]

+  var pointer = 0; // Index of current position.

+  var length_changes1 = 0; // Number of characters that changed prior to the equality.

+  var length_changes2 = 0; // Number of characters that changed after the equality.

+  while (pointer < diff.length) {

+    if (diff[pointer][0] == 0) { // equality found

+      equalities.push(pointer);

+      length_changes1 = length_changes2;

+      length_changes2 = 0;

+      lastequality = diff[pointer][1];

+    } else { // an insertion or deletion

+      length_changes2 += diff[pointer][1].length;

+      if (lastequality != null && (lastequality.length <= length_changes1) && (lastequality.length <= length_changes2)) {

+        //alert("Splitting: '"+lastequality+"'");

+        diff.splice(equalities[equalities.length-1], 0, [-1, lastequality]); // Duplicate record

+        diff[equalities[equalities.length-1]+1][0] = 1; // Change second copy to insert.

+        equalities.pop();  // Throw away the equality we just deleted;

+        equalities.pop();  // Throw away the previous equality;

+        pointer = equalities.length ? equalities[equalities.length-1] : -1;

+        length_changes1 = 0; // Reset the counters.

+        length_changes2 = 0;

+        lastequality = null;

+        changes = true;

+      }

+    }

+    pointer++;

+  }

+

+  if (changes)

+    diff_cleanup_merge(diff);

+}

+

+

+function diff_cleanup_efficiency(diff) {

+  // Reduce the number of edits by eliminating operationally trivial equalities.

+  var changes = false;

+  var equalities = []; // Stack of indices where equalities are found.

+  var lastequality = ''; // Always equal to equalities[equalities.length-1][1]

+  var pointer = 0; // Index of current position.

+  var pre_ins = false; // Is there an insertion operation before the last equality.

+  var pre_del = false; // Is there an deletion operation before the last equality.

+  var post_ins = false; // Is there an insertion operation after the last equality.

+  var post_del = false; // Is there an deletion operation after the last equality.

+  while (pointer < diff.length) {

+    if (diff[pointer][0] == 0) { // equality found

+      if (diff[pointer][1].length < DIFF_EDIT_COST && (post_ins || post_del)) {

+        // Candidate found.

+        equalities.push(pointer);

+        pre_ins = post_ins;

+        pre_del = post_del;

+        lastequality = diff[pointer][1];

+      } else {

+        // Not a candidate, and can never become one.

+        equalities = [];

+        lastequality = '';

+      }

+      post_ins = post_del = false;

+    } else { // an insertion or deletion

+      if (diff[pointer][0] == -1)

+        post_del = true;

+      else

+        post_ins = true;

+      // Five types to be split:

+      // <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>

+      // <ins>A</ins>X<ins>C</ins><del>D</del>

+      // <ins>A</ins><del>B</del>X<ins>C</ins>

+      // <ins>A</del>X<ins>C</ins><del>D</del>

+      // <ins>A</ins><del>B</del>X<del>C</del>

+      if (lastequality && ((pre_ins && pre_del && post_ins && post_del) || ((lastequality.length < DIFF_EDIT_COST/2) && (pre_ins + pre_del + post_ins + post_del) == 3))) {

+        //alert("Splitting: '"+lastequality+"'");

+        diff.splice(equalities[equalities.length-1], 0, [-1, lastequality]); // Duplicate record

+        diff[equalities[equalities.length-1]+1][0] = 1; // Change second copy to insert.

+        equalities.pop();  // Throw away the equality we just deleted;

+        lastequality = '';

+        if (pre_ins && pre_del) {

+          // No changes made which could affect previous entry, keep going.

+          post_ins = post_del = true;

+          equalities = [];

+        } else {

+          equalities.pop();  // Throw away the previous equality;

+          pointer = equalities.length ? equalities[equalities.length-1] : -1;

+          post_ins = post_del = false;

+        }

+        changes = true;

+      }

+    }

+    pointer++;

+  }

+

+  if (changes)

+    diff_cleanup_merge(diff);

+}

+

+

+function diff_cleanup_merge(diff) {

+  // Reorder and merge like edit sections.  Merge equalities.

+  // Any edit section can move as long as it doesn't cross an equality.

+  diff.push([0, '']);  // Add a dummy entry at the end.

+  var pointer = 0;

+  var count_delete = 0;

+  var count_insert = 0;

+  var text_delete = '';

+  var text_insert = '';

+  var record_insert, record_delete;

+  var my_xfix;

+  while(pointer < diff.length) {

+    if (diff[pointer][0] == 1) {

+      count_insert++;

+      text_insert += diff[pointer][1];

+      pointer++;

+    } else if (diff[pointer][0] == -1) {

+      count_delete++;

+      text_delete += diff[pointer][1];

+      pointer++;

+    } else {  // Upon reaching an equality, check for prior redundancies.

+      if (count_delete > 1 || count_insert > 1) {

+        if (count_delete > 1 && count_insert > 1) {

+          // Factor out any common prefixies.

+          my_xfix = diff_prefix(text_insert, text_delete);

+          if (my_xfix[2] != '') {

+            if ((pointer - count_delete - count_insert) > 0 && diff[pointer - count_delete - count_insert - 1][0] == 0) {

+              text_insert = my_xfix[0];

+              text_delete = my_xfix[1];

+              diff[pointer - count_delete - count_insert - 1][1] += my_xfix[2];

+            }

+          }

+          // Factor out any common suffixies.

+          my_xfix = diff_suffix(text_insert, text_delete);

+          if (my_xfix[2] != '') {

+            text_insert = my_xfix[0];

+            text_delete = my_xfix[1];

+            diff[pointer][1] = my_xfix[2] + diff[pointer][1];

+          }

+        }

+        // Delete the offending records and add the merged ones.

+        if (count_delete == 0)

+          diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [1, text_insert]);

+        else if (count_insert == 0)

+          diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [-1, text_delete]);

+        else

+          diff.splice(pointer - count_delete - count_insert, count_delete + count_insert, [-1, text_delete], [1, text_insert]);

+        pointer = pointer - count_delete - count_insert + (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;

+      } else if (pointer != 0 && diff[pointer-1][0] == 0) {

+        // Merge this equality with the previous one.

+        diff[pointer-1][1] += diff[pointer][1];

+        diff.splice(pointer, 1);

+      } else {

+        pointer++;

+      }

+      count_insert = 0;

+      count_delete = 0;

+      text_delete = '';

+      text_insert = '';

+    }

+  }

+  if (diff[diff.length-1][1] == '')

+    diff.pop();  // Remove the dummy entry at the end.

+}

+

+

+function diff_addindex(diff) {

+  // Add an index to each tuple, represents where the tuple is located in text2.

+  // e.g. [[-1, 'h', 0], [1, 'c', 0], [0, 'at', 1]]

+  var i = 0;

+  for (var x=0; x<diff.length; x++) {

+    diff[x].push(i);

+    if (diff[x][0] != -1)

+      i += diff[x][1].length;

+  }

+}

+

+

+function diff_xindex(diff, loc) {

+  // loc is a location in text1, compute and return the equivalent location in text2.

+  // e.g. "The cat" vs "The big cat", 1->1, 5->8

+  var chars1 = 0;

+  var chars2 = 0;

+  var last_chars1 = 0;

+  var last_chars2 = 0;

+  for (var x=0; x<diff.length; x++) {

+    if (diff[x][0] != 1) // Equality or deletion.

+      chars1 += diff[x][1].length;

+    if (diff[x][0] != -1) // Equality or insertion.

+      chars2 += diff[x][1].length;

+    if (chars1 > loc) // Overshot the location.

+      break;

+    last_chars1 = chars1;

+    last_chars2 = chars2;

+  }

+  if (diff.length != x && diff[x][0] == -1) // The location was deleted.

+    return last_chars2;

+  // Add the remaining character length.

+  return last_chars2 + (loc - last_chars1);

+}

+

+

+function diff_prettyhtml(diff) {

+  // Convert a diff array into a pretty HTML report.

+  diff_addindex(diff);

+  var html = '';

+  for (var x=0; x<diff.length; x++) {

+    var m = diff[x][0]; // Mode (-1=delete, 0=copy, 1=add)

+    var t = diff[x][1]; // Text of change.

+    var i = diff[x][2]; // Index of change.

+    t = t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");

+    t = t.replace(/\n/g, "&para;<BR>");

+    if (m == -1)

+      html += "<DEL STYLE='background:#FFE6E6;' TITLE='i="+i+"'>"+t+"</DEL>";

+    else if (m == 1)

+      html += "<INS STYLE='background:#E6FFE6;' TITLE='i="+i+"'>"+t+"</INS>";

+    else

+      html += "<SPAN TITLE='i="+i+"'>"+t+"</SPAN>";

+  }

+  return html;

+}

+

+

+  //////////////////////////////////////////////////////////////////////

+ //  Match                                                           //

+//////////////////////////////////////////////////////////////////////

+

+

+function match_getmaxbits() {

+  // Compute the number of bits in an int.

+  // The normal answer for JavaScript is 32.

+  var maxbits = 0;

+  var oldi = 1;

+  var newi = 2;

+  while (oldi != newi) {

+    maxbits++;

+    oldi = newi;

+    newi = newi << 1;

+  }

+  return maxbits;

+}

+var MATCH_MAXBITS = match_getmaxbits();

+

+

+function match_main(text, pattern, loc) {

+  // Locate the best instance of 'pattern' in 'text' near 'loc'.

+  loc = Math.max(0, Math.min(loc, text.length-pattern.length));

+  if (text == pattern) {

+    // Shortcut (potentially not guaranteed by the algorithm)

+    return 0;

+  } else if (text.length == 0) {

+    // Nothing to match.

+    return null;

+  } else if (text.substring(loc, loc + pattern.length) == pattern) {

+    // Perfect match at the perfect spot!  (Includes case of null pattern)

+    return loc;

+  } else {

+    // Do a fuzzy compare.

+    var match = match_bitap(text, pattern, loc);

+    return match;

+  }

+}

+

+

+function match_bitap(text, pattern, loc) {

+  // Locate the best instance of 'pattern' in 'text' near 'loc' using the Bitap algorithm.

+  if (pattern.length > MATCH_MAXBITS)

+    return alert("Pattern too long for this browser.");

+

+  // Initialise the alphabet.

+  var s = match_alphabet(pattern);

+

+  var score_text_length = text.length;

+  // Coerce the text length between reasonable maximums and minimums.

+  score_text_length = Math.max(score_text_length, MATCH_MINLENGTH);

+  score_text_length = Math.min(score_text_length, MATCH_MAXLENGTH);

+

+  function match_bitap_score (e, x) {

+    // Compute and return the score for a match with e errors and x location.

+    var d = Math.abs(loc-x);

+    return (e / pattern.length / MATCH_BALANCE) + (d / score_text_length / (1.0 - MATCH_BALANCE));

+  }

+

+  // Highest score beyond which we give up.

+  var score_threshold = MATCH_THRESHOLD;

+  // Is there a nearby exact match? (speedup)

+  var best_loc = text.indexOf(pattern, loc);

+  if (best_loc != -1)

+    score_threshold = Math.min(match_bitap_score(0, best_loc), score_threshold);

+  // What about in the other direction? (speedup)

+  best_loc = text.lastIndexOf(pattern, loc+pattern.length);

+  if (best_loc != -1)

+    score_threshold = Math.min(match_bitap_score(0, best_loc), score_threshold);

+

+  // Initialise the bit arrays.

+  var r = Array();

+  var d = -1;

+  var matchmask = Math.pow(2, pattern.length-1);

+  best_loc = null;

+

+  var bin_min, bin_mid;

+  var bin_max = Math.max(loc+loc, text.length);

+  var last_rd;

+  for (var d=0; d<pattern.length; d++) {

+    // Scan for the best match; each iteration allows for one more error.

+    var rd = Array(text.length);

+

+    // Run a binary search to determine how far from 'loc' we can stray at this error level.

+    bin_min = loc;

+    bin_mid = bin_max;

+    while(bin_min < bin_mid) {

+      if (match_bitap_score(d, bin_mid) < score_threshold)

+        bin_min = bin_mid;

+      else

+        bin_max = bin_mid;

+      bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);

+    }

+    bin_max = bin_mid; // Use the result from this iteration as the maximum for the next.

+    var start = Math.max(0, loc - (bin_mid - loc) - 1);

+    var finish = Math.min(text.length-1, pattern.length + bin_mid);

+

+    if (text.charAt(finish) == pattern.charAt(pattern.length-1))

+      rd[finish] = Math.pow(2, d+1)-1;

+    else

+      rd[finish] = Math.pow(2, d)-1;

+    for (var j=finish-1; j>=start; j--) {

+      // The alphabet (s) is a sparse hash, so the following lines generate warnings.

+      if (d == 0) // First pass: exact match.

+        rd[j] = ((rd[j+1] << 1) | 1) & s[text.charAt(j)];

+      else // Subsequent passes: fuzzy match.

+        rd[j] = ((rd[j+1] << 1) | 1) & s[text.charAt(j)] | ((last_rd[j+1] << 1) | 1) | ((last_rd[j] << 1) | 1) | last_rd[j+1];

+      if (rd[j] & matchmask) {

+        var score = match_bitap_score(d, j);

+        // This match will almost certainly be better than any existing match.  But check anyway.

+        if (score <= score_threshold) {

+          // Told you so.

+          score_threshold = score;

+          best_loc = j;

+          if (j > loc) {

+            // When passing loc, don't exceed our current distance from loc.

+            start = Math.max(0, loc - (j - loc));

+          } else {

+            // Already passed loc, downhill from here on in.

+            break;

+          }

+        }

+      }

+    }

+    if (match_bitap_score(d+1, loc) > score_threshold) // No hope for a (better) match at greater error levels.

+      break;

+    last_rd = rd;

+  }

+  return best_loc;

+}

+

+

+function match_alphabet(pattern) {

+  // Initialise the alphabet for the Bitap algorithm.

+  var s = Object();

+  for (var i=0; i<pattern.length; i++)

+    s[pattern.charAt(i)] = 0;

+  for (var i=0; i<pattern.length; i++)

+    s[pattern.charAt(i)] |= Math.pow(2, pattern.length-i-1);

+  return s;

+}

+

+

+  //////////////////////////////////////////////////////////////////////

+ //  Patch                                                           //

+//////////////////////////////////////////////////////////////////////

+

+

+function patch_obj() {

+  // Constructor for a patch object.

+  this.diffs = [];

+  this.start1 = null;

+  this.start2 = null;

+  this.length1 = 0;

+  this.length2 = 0;

+

+  this.toString = function() {

+    // Emmulate GNU diff's format.

+    // Header: @@ -382,8 +481,9 @@

+    // Indicies are printed as 1-based, not 0-based.

+    var coords1, coords2;

+    if (this.length1 == 0)

+      coords1 = this.start1+",0";

+    else if (this.length1 == 1)

+      coords1 = this.start1+1;

+    else

+      coords1 = (this.start1+1)+","+this.length1;

+    if (this.length2 == 0)

+      coords2 = this.start2+",0";

+    else if (this.length2 == 1)

+      coords2 = this.start2+1;

+    else

+      coords2 = (this.start2+1)+","+this.length2;

+    var txt = "@@ -"+coords1+" +"+coords2+" @@\n";

+    // Escape the body of the patch with %xx notation.

+    for (var x=0; x<this.diffs.length; x++)

+      txt += ("- +".charAt(this.diffs[x][0]+1)) + encodeURI(this.diffs[x][1]) + "\n";

+    return txt.replace(/%20/g, ' ');

+  }

+

+  this.text1 = function() {

+    // Compute and return the source text (all equalities and deletions).

+    var txt = '';

+    for (var x=0; x<this.diffs.length; x++)

+      if (this.diffs[x][0] == 0 || this.diffs[x][0] == -1)

+        txt += this.diffs[x][1];

+    return txt;

+  }

+

+  this.text2 = function() {

+    // Compute and return the destination text (all equalities and insertions).

+    var txt = '';

+    for (var x=0; x<this.diffs.length; x++)

+      if (this.diffs[x][0] == 0 || this.diffs[x][0] == 1)

+        txt += this.diffs[x][1];

+    return txt;

+  }

+}

+

+

+function patch_addcontext(patch, text) {

+  var pattern = text.substring(patch.start2, patch.start2+patch.length1);

+  var padding = 0;

+  // Increase the context until we're unique (but don't let the pattern expand beyond MATCH_MAXBITS).

+  while (text.indexOf(pattern) != text.lastIndexOf(pattern) && pattern.length < MATCH_MAXBITS-PATCH_MARGIN-PATCH_MARGIN) {

+    padding += PATCH_MARGIN;

+    pattern = text.substring(patch.start2 - padding, patch.start2+patch.length1 + padding);

+  }

+  // Add one chunk for good luck.

+  padding += PATCH_MARGIN;

+  // Add the prefix.

+  var prefix = text.substring(patch.start2 - padding, patch.start2);

+  if (prefix != '')

+    patch.diffs.unshift([0, prefix]);

+  // Add the suffix

+  var suffix = text.substring(patch.start2+patch.length1, patch.start2+patch.length1 + padding);

+  if (suffix != '')

+    patch.diffs.push([0, suffix]);

+

+  // Roll back the start points.

+  patch.start1 -= prefix.length;

+  patch.start2 -= prefix.length;

+  // Extend the lengths.

+  patch.length1 += prefix.length + suffix.length;

+  patch.length2 += prefix.length + suffix.length;

+}

+

+

+function patch_make(text1, text2, diff) {

+  // Compute a list of patches to turn text1 into text2.

+  // Use diff if provided, otherwise compute it ourselves.

+  if (typeof diff == 'undefined') {

+    diff = diff_main(text1, text2, true);

+    if (diff.length > 2) {

+      diff_cleanup_semantic(diff);

+      diff_cleanup_efficiency(diff);

+    }

+  }

+  if (diff.length == 0)

+    return []; // Get rid of the null case.

+  var patches = [];

+  var patch = new patch_obj();

+  var char_count1 = 0; // Number of characters into the text1 string.

+  var char_count2 = 0; // Number of characters into the text2 string.

+  var last_type = null;

+  var prepatch_text = text1; // Recreate the patches to determine context info.

+  var postpatch_text = text1;

+  for (var x=0; x<diff.length; x++) {

+    var diff_type = diff[x][0];

+    var diff_text = diff[x][1];

+

+    if (patch.diffs.length == 0 && diff_type != 0) {

+      // A new patch starts here.

+      patch.start1 = char_count1;

+      patch.start2 = char_count2;

+    }

+

+    if (diff_type == 1) {

+      // Insertion

+      patch.diffs.push(diff[x]);

+      patch.length2 += diff_text.length;

+      postpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2);

+    } else if (diff_type == -1) {

+      // Deletion.

+      patch.length1 += diff_text.length;

+      patch.diffs.push(diff[x]);

+      postpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length);

+    } else if (diff_type == 0 && diff_text.length <= 2*PATCH_MARGIN && patch.diffs.length != 0 && diff.length != x+1) {

+      // Small equality inside a patch.

+      patch.diffs.push(diff[x]);

+      patch.length1 += diff_text.length;

+      patch.length2 += diff_text.length;

+    }

+

+    last_type = diff_type;

+    if (diff_type == 0 && diff_text.length >= 2*PATCH_MARGIN) {

+      // Time for a new patch.

+      if (patch.diffs.length != 0) {

+        patch_addcontext(patch, prepatch_text);

+        patches.push(patch);

+        var patch = new patch_obj();

+        last_type = null;

+        prepatch_text = postpatch_text;

+      }

+    }

+

+    // Update the current character count.

+    if (diff_type != 1)

+      char_count1 += diff_text.length;

+    if (diff_type != -1)

+      char_count2 += diff_text.length;

+  }

+  // Pick up the leftover patch if not empty.

+  if (patch.diffs.length != 0) {

+    patch_addcontext(patch, prepatch_text);

+    patches.push(patch);

+  }

+

+  return patches;

+}

+

+

+function patch_apply(patches, text) {

+  // Merge a set of patches onto the text.

+  // Return a patched text, as well as a list of true/false values indicating which patches were applied.

+  patch_splitmax(patches);

+  var results = [];

+  var delta = 0;

+  var expected_loc, start_loc;

+  var text1, text2;

+  var diff, mod, index1, index2;

+  for (var x=0; x<patches.length; x++) {

+    expected_loc = patches[x].start2 + delta;

+    text1 = patches[x].text1();

+    start_loc = match_main(text, text1, expected_loc);

+    if (start_loc == null) {

+      // No match found.  :(

+      results.push(false);

+    } else {

+      // Found a match.  :)

+      results.push(true);

+      delta = start_loc - expected_loc;

+      text2 = text.substring(start_loc, start_loc + text1.length);

+      if (text1 == text2) {

+        // Perfect match, just shove the replacement text in.

+        text = text.substring(0, start_loc) + patches[x].text2() + text.substring(start_loc + text1.length);

+      } else {

+        // Imperfect match.  Run a diff to get a framework of equivalent indicies.

+        diff = diff_main(text1, text2, false);

+        index1 = 0;

+        for (var y=0; y<patches[x].diffs.length; y++) {

+          mod = patches[x].diffs[y];

+          if (mod[0] != 0)

+            index2 = diff_xindex(diff, index1);

+          if (mod[0] == 1) // Insertion

+            text = text.substring(0, start_loc + index2) + mod[1] + text.substring(start_loc + index2);

+          else if (mod[0] == -1) // Deletion

+            text = text.substring(0, start_loc + index2) + text.substring(start_loc + diff_xindex(diff, index1 + mod[1].length));

+          if (mod[0] != -1)

+            index1 += mod[1].length;

+        }

+      }

+    }

+  }

+  return [text, results];

+}

+

+

+function patch_splitmax(patches) {

+  // Look through the patches and break up any which are longer than the maximum limit of the match algorithm.

+  var bigpatch, patch, patch_size, start1, start2, diff_type, diff_text, precontext, postcontext, empty;

+  for (var x=0; x<patches.length; x++) {

+    if (patches[x].length1 > MATCH_MAXBITS) {

+      bigpatch = patches[x];

+      // Remove the big old patch.

+      patches.splice(x, 1);

+      patch_size = MATCH_MAXBITS;

+      start1 = bigpatch.start1;

+      start2 = bigpatch.start2;

+      precontext = '';

+      while (bigpatch.diffs.length != 0) {

+        // Create one of several smaller patches.

+        patch = new patch_obj();

+        empty = true;

+        patch.start1 = start1 - precontext.length;

+        patch.start2 = start2 - precontext.length;

+        if (precontext  != '') {

+          patch.length1 = patch.length2 = precontext.length;

+          patch.diffs.push([0, precontext]);

+        }

+        while (bigpatch.diffs.length != 0 && patch.length1 < patch_size - PATCH_MARGIN) {

+          diff_type = bigpatch.diffs[0][0];

+          diff_text = bigpatch.diffs[0][1];

+          if (diff_type == 1) {

+            // Insertions are harmless.

+            patch.length2 += diff_text.length;

+            start2 += diff_text.length;

+            patch.diffs.push(bigpatch.diffs.shift());

+            empty = false;

+          } else {

+            // Deletion or equality.  Only take as much as we can stomach.

+            diff_text = diff_text.substring(0, patch_size - patch.length1 - PATCH_MARGIN);

+            patch.length1 += diff_text.length;

+            start1 += diff_text.length;

+            if (diff_type == 0) {

+              patch.length2 += diff_text.length;

+              start2 += diff_text.length;

+            } else {

+              empty = false;

+            }

+            patch.diffs.push([diff_type, diff_text]);

+            if (diff_text == bigpatch.diffs[0][1])

+              bigpatch.diffs.shift();

+            else

+              bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length);

+          }

+        }

+        // Compute the head context for the next patch.

+        precontext = patch.text2();

+        precontext = precontext.substring(precontext.length - PATCH_MARGIN);

+        // Append the end context for this patch.

+        postcontext = bigpatch.text1().substring(0, PATCH_MARGIN);

+        if (postcontext  != '') {

+          patch.length1 += postcontext.length;

+          patch.length2 += postcontext.length;

+          if (patch.diffs.length > 0 && patch.diffs[patch.diffs.length-1][0] == 0)

+            patch.diffs[patch.diffs.length-1][1] += postcontext;

+          else

+            patch.diffs.push([0, postcontext]);

+        }

+        if (!empty)

+          patches.splice(x++, 0, patch);

+      }

+    }

+  }

+}

+

+

+function patch_totext(patches) {

+  // Take a list of patches and return a textual representation.

+  var text = '';

+  for (var x=0; x<patches.length; x++)

+    text += patches[x];

+  return text;

+}

+

+

+function patch_fromtext(text) {

+  // Take a textual representation of patches and return a list of patch objects.

+  var patches = [];

+  text = text.split('\n');

+  var patch, m, chars1, chars2, sign, line;

+  while (text.length != 0) {

+    m = text[0].match(/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/);

+    if (!m)

+      return alert("Invalid patch string:\n"+text[0]);

+    patch = new patch_obj();

+    patches.push(patch);

+    patch.start1 = parseInt(m[1]);

+    if (m[2] == '') {

+      patch.start1--;

+      patch.length1 = 1;

+    } else if (m[2] == '0') {

+      patch.length1 = 0;

+    } else {

+      patch.start1--;

+      patch.length1 = parseInt(m[2]);

+    }

+

+    patch.start2 = parseInt(m[3]);

+    if (m[4] == '') {

+      patch.start2--;

+      patch.length2 = 1;

+    } else if (m[4] == '0') {

+      patch.length2 = 0;

+    } else {

+      patch.start2--;

+      patch.length2 = parseInt(m[4]);

+    }

+    text.shift();

+

+    while (text.length != 0) {

+      sign = text[0].charAt(0);

+      line = decodeURIComponent(text[0].substring(1));

+      if (sign == '-') {

+        // Deletion.

+        patch.diffs.push([-1, line]);

+      } else if (sign == '+') {

+        // Insertion.

+        patch.diffs.push([1, line]);

+      } else if (sign == ' ') {

+        // Minor equality.

+        patch.diffs.push([0, line]);

+      } else if (sign == '@') {

+        // Start of next patch.

+        break;

+      } else if (sign == '') {

+        // Blank line?  Whatever.

+      } else {

+        // WTF?

+        return alert("Invalid patch mode: '"+sign+"'\n"+line);

+      }

+      text.shift();

+    }

+  }

+  return patches;

+}

+

+// EOF

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/devkit/langs/en.js
@@ -1,1 +1,24 @@
+// UK lang variables

+

+tinyMCE.addToLang('devkit',{

+title : 'TinyMCE Development Kit',

+info_tab : 'Info',

+settings_tab : 'Settings',

+log_tab : 'Log',

+content_tab : 'Content',

+command_states_tab : 'Commands',

+undo_redo_tab : 'Undo/Redo',

+misc_tab : 'Misc',

+filter : 'Filter:',

+clear_log : 'Clear log',

+refresh : 'Refresh',

+info_help : 'Press Refresh to view info.',

+settings_help : 'Press Refresh to display the settings array for each TinyMCE_Control instance.',

+content_help : 'Press Refresh to display the raw and cleaned HTML content for each TinyMCE_Control instance.',

+command_states_help : 'Press Refresh to display the current command states from inst.queryCommandState. This list will also mark unsupported commands.',

+undo_redo_help : 'Press Refresh to display the global and instance undo/redo levels.',

+misc_help : 'Here are various tools for debugging and development purposes.',

+debug_events : 'Debug events',

+undo_diff : 'Diff undo levels'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/directionality/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js
@@ -1,1 +1,82 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.Directionality', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			ed.addCommand('mceDirectionLTR', function() {

+				var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);

+

+				if (e) {

+					if (ed.dom.getAttrib(e, "dir") != "ltr")

+						ed.dom.setAttrib(e, "dir", "ltr");

+					else

+						ed.dom.setAttrib(e, "dir", "");

+				}

+

+				ed.nodeChanged();

+			});

+

+			ed.addCommand('mceDirectionRTL', function() {

+				var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);

+

+				if (e) {

+					if (ed.dom.getAttrib(e, "dir") != "rtl")

+						ed.dom.setAttrib(e, "dir", "rtl");

+					else

+						ed.dom.setAttrib(e, "dir", "");

+				}

+

+				ed.nodeChanged();

+			});

+

+			ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});

+			ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});

+

+			ed.onNodeChange.add(t._nodeChange, t);

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Directionality',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Private methods

+

+		_nodeChange : function(ed, cm, n) {

+			var dom = ed.dom, dir;

+

+			n = dom.getParent(n, dom.isBlock);

+			if (!n) {

+				cm.setDisabled('ltr', 1);

+				cm.setDisabled('rtl', 1);

+				return;

+			}

+

+			dir = dom.getAttrib(n, 'dir');

+			cm.setActive('ltr', dir == "ltr");

+			cm.setDisabled('ltr', 0);

+			cm.setActive('rtl', dir == "rtl");

+			cm.setDisabled('rtl', 0);

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/emotions/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js
@@ -1,1 +1,43 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function(tinymce) {

+	tinymce.create('tinymce.plugins.EmotionsPlugin', {

+		init : function(ed, url) {

+			// Register commands

+			ed.addCommand('mceEmotion', function() {

+				ed.windowManager.open({

+					file : url + '/emotions.htm',

+					width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),

+					height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			// Register buttons

+			ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Emotions',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);

+})(tinymce);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/emotions/emotions.htm
@@ -1,1 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#emotions_dlg.title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/emotions.js"></script>

+</head>

+<body style="display: none" role="application" aria-labelledby="app_title">

+<span style="display:none;" id="app_title">{#emotions_dlg.title}</span>

+<div align="center">

+	<div class="title">{#emotions_dlg.title}:<br /><br /></div>

+

+	<table id="emoticon_table" role="presentation" border="0" cellspacing="0" cellpadding="4">

+		<tr>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.cool}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.cry}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}"  /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" /></a></td>

+		</tr>

+		<tr>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.frown}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}. {#emotions_dlg.usage}"  /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" /></a></td>

+		</tr>

+		<tr>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}"/></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.smile}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" /></a></td>

+		</tr>

+		<tr>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.tongue_out}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.wink}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}. {#emotions_dlg.usage}" /></a></td>

+			<td><a class="emoticon_link" role="button" title="{#emotions_dlg.yell}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}. {#emotions_dlg.usage}" /></a></td>

+		</tr>

+	</table>

+	<div>{#emotions_dlg.usage}</div>

+</div>

+</body>

+</html>

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/emotions/js/emotions.js
@@ -1,1 +1,44 @@
+tinyMCEPopup.requireLangPack();

+

+var EmotionsDialog = {

+	addKeyboardNavigation: function(){

+		var tableElm, cells, settings;

+			

+		cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table");

+			

+		settings ={

+			root: "emoticon_table",

+			items: cells

+		};

+		cells[0].tabindex=0;

+		tinyMCEPopup.dom.addClass(cells[0], "mceFocus");

+		if (tinymce.isGecko) {

+			cells[0].focus();		

+		} else {

+			setTimeout(function(){

+				cells[0].focus();

+			}, 100);

+		}

+		tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);

+	}, 

+	init : function(ed) {

+		tinyMCEPopup.resizeToInnerSize();

+		this.addKeyboardNavigation();

+	},

+

+	insert : function(file, title) {

+		var ed = tinyMCEPopup.editor, dom = ed.dom;

+

+		tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {

+			src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,

+			alt : ed.getLang(title),

+			title : ed.getLang(title),

+			border : 0

+		}));

+

+		tinyMCEPopup.close();

+	}

+};

+

+tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js
@@ -1,1 +1,2 @@
+tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"});
 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example/dialog.htm
@@ -1,1 +1,23 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#example_dlg.title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/dialog.js"></script>

+</head>

+<body>

+

+<form onsubmit="ExampleDialog.insert();return false;" action="#">

+	<p>Here is a example dialog.</p>

+	<p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>

+	<p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>

+

+	<div class="mceActionPanel">

+		<input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example/editor_plugin_src.js
@@ -1,1 +1,84 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	// Load plugin specific language pack

+	tinymce.PluginManager.requireLangPack('example');

+

+	tinymce.create('tinymce.plugins.ExamplePlugin', {

+		/**

+		 * Initializes the plugin, this will be executed after the plugin has been created.

+		 * This call is done before the editor instance has finished it's initialization so use the onInit event

+		 * of the editor instance to intercept that event.

+		 *

+		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.

+		 * @param {string} url Absolute URL to where the plugin is located.

+		 */

+		init : function(ed, url) {

+			// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');

+			ed.addCommand('mceExample', function() {

+				ed.windowManager.open({

+					file : url + '/dialog.htm',

+					width : 320 + parseInt(ed.getLang('example.delta_width', 0)),

+					height : 120 + parseInt(ed.getLang('example.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url, // Plugin absolute URL

+					some_custom_arg : 'custom arg' // Custom argument

+				});

+			});

+

+			// Register example button

+			ed.addButton('example', {

+				title : 'example.desc',

+				cmd : 'mceExample',

+				image : url + '/img/example.gif'

+			});

+

+			// Add a node change handler, selects the button in the UI when a image is selected

+			ed.onNodeChange.add(function(ed, cm, n) {

+				cm.setActive('example', n.nodeName == 'IMG');

+			});

+		},

+

+		/**

+		 * Creates control instances based in the incomming name. This method is normally not

+		 * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons

+		 * but you sometimes need to create more complex controls like listboxes, split buttons etc then this

+		 * method can be used to create those.

+		 *

+		 * @param {String} n Name of the control to create.

+		 * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.

+		 * @return {tinymce.ui.Control} New control instance or null if no control was created.

+		 */

+		createControl : function(n, cm) {

+			return null;

+		},

+

+		/**

+		 * Returns information about the plugin as a name/value array.

+		 * The current keys are longname, author, authorurl, infourl and version.

+		 *

+		 * @return {Object} Name/value array containing information about the plugin.

+		 */

+		getInfo : function() {

+			return {

+				longname : 'Example plugin',

+				author : 'Some author',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',

+				version : "1.0"

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);

+})();

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/example/img/example.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example/js/dialog.js
@@ -1,1 +1,20 @@
+tinyMCEPopup.requireLangPack();

+

+var ExampleDialog = {

+	init : function() {

+		var f = document.forms[0];

+

+		// Get the selected contents as text and place it in the input

+		f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});

+		f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');

+	},

+

+	insert : function() {

+		// Insert the contents from the input into the document

+		tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);

+		tinyMCEPopup.close();

+	}

+};

+

+tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example/langs/en.js
@@ -1,1 +1,4 @@
+tinyMCE.addI18n('en.example',{

+	desc : 'This is just a template button'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example/langs/en_dlg.js
@@ -1,1 +1,4 @@
+tinyMCE.addI18n('en.example_dlg',{

+	title : 'This is just a example title'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.ExampleDependencyPlugin",{init:function(a,b){},getInfo:function(){return{longname:"Example Dependency plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency",version:"1.0"}}});tinymce.PluginManager.add("example_dependency",tinymce.plugins.ExampleDependencyPlugin,["example"])})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js
@@ -1,1 +1,51 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
 
+(function() {
+
+	tinymce.create('tinymce.plugins.ExampleDependencyPlugin', {
+		/**
+		 * Initializes the plugin, this will be executed after the plugin has been created.
+		 * This call is done before the editor instance has finished it's initialization so use the onInit event
+		 * of the editor instance to intercept that event.
+		 *
+		 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
+		 * @param {string} url Absolute URL to where the plugin is located.
+		 */
+		init : function(ed, url) {
+		},
+
+
+		/**
+		 * Returns information about the plugin as a name/value array.
+		 * The current keys are longname, author, authorurl, infourl and version.
+		 *
+		 * @return {Object} Name/value array containing information about the plugin.
+		 */
+		getInfo : function() {
+			return {
+				longname : 'Example Dependency plugin',
+				author : 'Some author',
+				authorurl : 'http://tinymce.moxiecode.com',
+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency',
+				version : "1.0"
+			};
+		}
+	});
+
+	/**
+	 * Register the plugin, specifying the list of the plugins that this plugin depends on.  They are specified in a list, with the list loaded in order.
+	 * plugins in this list will be initialised when this plugin is initialized. (before the init method is called).
+	 * plugins in a depends list should typically be specified using the short name).  If neccesary this can be done
+	 * with an object which has the url to the plugin and the shortname.
+	 */
+	tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']);
+})();
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/css/content.css
@@ -1,1 +1,8 @@
+.mceItemFlash {

+	border: 1px dotted #cc0000;

+	background-image: url('../images/flash.gif');

+	background-position: center;

+	background-repeat: no-repeat;

+	background-color: #ffffcc;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/css/flash.css
@@ -1,1 +1,12 @@
+.panel_wrapper div.current {

+	height: 100px;

+}

+

+#width, #height {

+	width: 50px;

+}

+

+#file {

+	width: 250px;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/editor_plugin.js
@@ -1,1 +1,1 @@
-
+tinyMCE.importPluginLanguagePack('flash');var TinyMCE_FlashPlugin={getInfo:function(){return{longname:'Flash',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/flash',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(!tinyMCE.settings['flash_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/flash/css/content.css")},getControlHTML:function(cn){switch(cn){case"flash":return tinyMCE.getButtonHTML(cn,'lang_flash_desc','{$pluginurl}/images/flash.gif','mceFlash')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceFlash":var name="",swffile="",swfwidth="",swfheight="",action="insert";var template=new Array();var inst=tinyMCE.getInstanceById(editor_id);var focusElm=inst.getFocusElement();template['file']='../../plugins/flash/flash.htm';template['width']=430;template['height']=175;template['width']+=tinyMCE.getLang('lang_flash_delta_width',0);template['height']+=tinyMCE.getLang('lang_flash_delta_height',0);if(focusElm!=null&&focusElm.nodeName.toLowerCase()=="img"){name=tinyMCE.getAttrib(focusElm,'class');if(name.indexOf('mceItemFlash')==-1)return true;swffile=tinyMCE.getAttrib(focusElm,'alt');if(tinyMCE.getParam('convert_urls'))swffile=eval(tinyMCE.settings['urlconverter_callback']+"(swffile, null, true);");swfwidth=tinyMCE.getAttrib(focusElm,'width');swfheight=tinyMCE.getAttrib(focusElm,'height');action="update"}tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes",swffile:swffile,swfwidth:swfwidth,swfheight:swfheight,action:action});return true}return false},cleanup:function(type,content){switch(type){case"insert_to_editor_dom":if(tinyMCE.getParam('convert_urls')){var imgs=content.getElementsByTagName("img");for(var i=0;i<imgs.length;i++){if(tinyMCE.getAttrib(imgs[i],"class")=="mceItemFlash"){var src=tinyMCE.getAttrib(imgs[i],"alt");if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, null, true);");imgs[i].setAttribute('alt',src);imgs[i].setAttribute('title',src)}}}break;case"get_from_editor_dom":var imgs=content.getElementsByTagName("img");for(var i=0;i<imgs.length;i++){if(tinyMCE.getAttrib(imgs[i],"class")=="mceItemFlash"){var src=tinyMCE.getAttrib(imgs[i],"alt");if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, null, true);");imgs[i].setAttribute('alt',src);imgs[i].setAttribute('title',src)}}break;case"insert_to_editor":var startPos=0;var embedList=new Array();content=content.replace(new RegExp('<[ ]*embed','gi'),'<embed');content=content.replace(new RegExp('<[ ]*/embed[ ]*>','gi'),'</embed>');content=content.replace(new RegExp('<[ ]*object','gi'),'<object');content=content.replace(new RegExp('<[ ]*/object[ ]*>','gi'),'</object>');while((startPos=content.indexOf('<embed',startPos+1))!=-1){var endPos=content.indexOf('>',startPos);var attribs=TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos+6,endPos));embedList[embedList.length]=attribs}var index=0;while((startPos=content.indexOf('<object',startPos))!=-1){if(index>=embedList.length)break;var attribs=embedList[index];endPos=content.indexOf('</object>',startPos);endPos+=9;var contentAfter=content.substring(endPos);content=content.substring(0,startPos);content+='<img width="'+attribs["width"]+'" height="'+attribs["height"]+'"';content+=' src="'+(tinyMCE.getParam("theme_href")+'/images/spacer.gif')+'" title="'+attribs["src"]+'"';content+=' alt="'+attribs["src"]+'" class="mceItemFlash" />'+content.substring(endPos);content+=contentAfter;index++;startPos++}var index=0;while((startPos=content.indexOf('<embed',startPos))!=-1){if(index>=embedList.length)break;var attribs=embedList[index];endPos=content.indexOf('>',startPos);endPos+=9;var contentAfter=content.substring(endPos);content=content.substring(0,startPos);content+='<img width="'+attribs["width"]+'" height="'+attribs["height"]+'"';content+=' src="'+(tinyMCE.getParam("theme_href")+'/images/spacer.gif')+'" title="'+attribs["src"]+'"';content+=' alt="'+attribs["src"]+'" class="mceItemFlash" />'+content.substring(endPos);content+=contentAfter;index++;startPos++}break;case"get_from_editor":var startPos=-1;while((startPos=content.indexOf('<img',startPos+1))!=-1){var endPos=content.indexOf('/>',startPos);var attribs=TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos+4,endPos));if(attribs['class']!="mceItemFlash")continue;endPos+=2;var embedHTML='';var wmode=tinyMCE.getParam("flash_wmode","");var quality=tinyMCE.getParam("flash_quality","high");var menu=tinyMCE.getParam("flash_menu","false");embedHTML+='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';embedHTML+=' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"';embedHTML+=' width="'+attribs["width"]+'" height="'+attribs["height"]+'">';embedHTML+='<param name="movie" value="'+attribs["title"]+'" />';embedHTML+='<param name="quality" value="'+quality+'" />';embedHTML+='<param name="menu" value="'+menu+'" />';embedHTML+='<param name="wmode" value="'+wmode+'" />';embedHTML+='<embed src="'+attribs["title"]+'" wmode="'+wmode+'" quality="'+quality+'" menu="'+menu+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="'+attribs["width"]+'" height="'+attribs["height"]+'"></embed></object>';chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter}break}return content},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){if(node==null)return;do{if(node.nodeName=="IMG"&&tinyMCE.getAttrib(node,'class').indexOf('mceItemFlash')==0){tinyMCE.switchClass(editor_id+'_flash','mceButtonSelected');return true}}while((node=node.parentNode));tinyMCE.switchClass(editor_id+'_flash','mceButtonNormal');return true},_parseAttributes:function(attribute_string){var attributeName="";var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i<attribute_string.length;i++){var chr=attribute_string.charAt(i);if((chr=='"'||chr=="'")&&!withInValue)withInValue=true;else if((chr=='"'||chr=="'")&&withInValue){withInValue=false;var pos=attributeName.lastIndexOf(' ');if(pos!=-1)attributeName=attributeName.substring(pos+1);attributes[attributeName.toLowerCase()]=attributeValue.substring(1);attributeName="";attributeValue=""}else if(!whiteSpaceRegExp.test(chr)&&!withInName&&!withInValue)withInName=true;if(chr=='='&&withInName)withInName=false;if(withInName)attributeName+=chr;if(withInValue)attributeValue+=chr}return attributes}};tinyMCE.addPlugin("flash",TinyMCE_FlashPlugin);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/editor_plugin_src.js
@@ -1,1 +1,286 @@
+/**

+ * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $

+ *

+ * @author Moxiecode


+ */

+

+/* Import plugin specific language pack */

+tinyMCE.importPluginLanguagePack('flash');

+

+var TinyMCE_FlashPlugin = {

+	getInfo : function() {

+		return {

+			longname : 'Flash',

+			author : 'Moxiecode Systems AB',

+			authorurl : 'http://tinymce.moxiecode.com',

+			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/flash',

+			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

+		};

+	},

+

+	initInstance : function(inst) {

+		if (!tinyMCE.settings['flash_skip_plugin_css'])

+			tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/flash/css/content.css");

+	},

+

+	getControlHTML : function(cn) {

+		switch (cn) {

+			case "flash":

+				return tinyMCE.getButtonHTML(cn, 'lang_flash_desc', '{$pluginurl}/images/flash.gif', 'mceFlash');

+		}

+

+		return "";

+	},

+

+	execCommand : function(editor_id, element, command, user_interface, value) {

+		// Handle commands

+		switch (command) {

+			case "mceFlash":

+				var name = "", swffile = "", swfwidth = "", swfheight = "", action = "insert";

+				var template = new Array();

+				var inst = tinyMCE.getInstanceById(editor_id);

+				var focusElm = inst.getFocusElement();

+

+				template['file']   = '../../plugins/flash/flash.htm'; // Relative to theme

+				template['width']  = 430;

+				template['height'] = 175;

+

+				template['width'] += tinyMCE.getLang('lang_flash_delta_width', 0);

+				template['height'] += tinyMCE.getLang('lang_flash_delta_height', 0);

+

+				// Is selection a image

+				if (focusElm != null && focusElm.nodeName.toLowerCase() == "img") {

+					name = tinyMCE.getAttrib(focusElm, 'class');

+

+					if (name.indexOf('mceItemFlash') == -1) // Not a Flash

+						return true;

+

+					// Get rest of Flash items

+					swffile = tinyMCE.getAttrib(focusElm, 'alt');

+

+					if (tinyMCE.getParam('convert_urls'))

+						swffile = eval(tinyMCE.settings['urlconverter_callback'] + "(swffile, null, true);");

+

+					swfwidth = tinyMCE.getAttrib(focusElm, 'width');

+					swfheight = tinyMCE.getAttrib(focusElm, 'height');

+					action = "update";

+				}

+

+				tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes", swffile : swffile, swfwidth : swfwidth, swfheight : swfheight, action : action});

+			return true;

+	   }

+

+	   // Pass to next handler in chain

+	   return false;

+	},

+

+	cleanup : function(type, content) {

+		switch (type) {

+			case "insert_to_editor_dom":

+				// Force relative/absolute

+				if (tinyMCE.getParam('convert_urls')) {

+					var imgs = content.getElementsByTagName("img");

+					for (var i=0; i<imgs.length; i++) {

+						if (tinyMCE.getAttrib(imgs[i], "class") == "mceItemFlash") {

+							var src = tinyMCE.getAttrib(imgs[i], "alt");

+

+							if (tinyMCE.getParam('convert_urls'))

+								src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, null, true);");

+

+							imgs[i].setAttribute('alt', src);

+							imgs[i].setAttribute('title', src);

+						}

+					}

+				}

+				break;

+

+			case "get_from_editor_dom":

+				var imgs = content.getElementsByTagName("img");

+				for (var i=0; i<imgs.length; i++) {

+					if (tinyMCE.getAttrib(imgs[i], "class") == "mceItemFlash") {

+						var src = tinyMCE.getAttrib(imgs[i], "alt");

+

+						if (tinyMCE.getParam('convert_urls'))

+							src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, null, true);");

+

+						imgs[i].setAttribute('alt', src);

+						imgs[i].setAttribute('title', src);

+					}

+				}

+				break;

+

+			case "insert_to_editor":

+				var startPos = 0;

+				var embedList = new Array();

+

+				// Fix the embed and object elements

+				content = content.replace(new RegExp('<[ ]*embed','gi'),'<embed');

+				content = content.replace(new RegExp('<[ ]*/embed[ ]*>','gi'),'</embed>');

+				content = content.replace(new RegExp('<[ ]*object','gi'),'<object');

+				content = content.replace(new RegExp('<[ ]*/object[ ]*>','gi'),'</object>');

+

+				// Parse all embed tags

+				while ((startPos = content.indexOf('<embed', startPos+1)) != -1) {

+					var endPos = content.indexOf('>', startPos);

+					var attribs = TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos + 6, endPos));

+					embedList[embedList.length] = attribs;

+				}

+

+				// Parse all object tags and replace them with images from the embed data

+				var index = 0;

+				while ((startPos = content.indexOf('<object', startPos)) != -1) {

+					if (index >= embedList.length)

+						break;

+

+					var attribs = embedList[index];

+

+					// Find end of object

+					endPos = content.indexOf('</object>', startPos);

+					endPos += 9;

+

+					// Insert image

+					var contentAfter = content.substring(endPos);

+					content = content.substring(0, startPos);

+					content += '<img width="' + attribs["width"] + '" height="' + attribs["height"] + '"';

+					content += ' src="' + (tinyMCE.getParam("theme_href") + '/images/spacer.gif') + '" title="' + attribs["src"] + '"';

+					content += ' alt="' + attribs["src"] + '" class="mceItemFlash" />' + content.substring(endPos);

+					content += contentAfter;

+					index++;

+

+					startPos++;

+				}

+

+				// Parse all embed tags and replace them with images from the embed data

+				var index = 0;

+				while ((startPos = content.indexOf('<embed', startPos)) != -1) {

+					if (index >= embedList.length)

+						break;

+

+					var attribs = embedList[index];

+

+					// Find end of embed

+					endPos = content.indexOf('>', startPos);

+					endPos += 9;

+

+					// Insert image

+					var contentAfter = content.substring(endPos);

+					content = content.substring(0, startPos);

+					content += '<img width="' + attribs["width"] + '" height="' + attribs["height"] + '"';

+					content += ' src="' + (tinyMCE.getParam("theme_href") + '/images/spacer.gif') + '" title="' + attribs["src"] + '"';

+					content += ' alt="' + attribs["src"] + '" class="mceItemFlash" />' + content.substring(endPos);

+					content += contentAfter;

+					index++;

+

+					startPos++;

+				}

+

+				break;

+

+			case "get_from_editor":

+				// Parse all img tags and replace them with object+embed

+				var startPos = -1;

+

+				while ((startPos = content.indexOf('<img', startPos+1)) != -1) {

+					var endPos = content.indexOf('/>', startPos);

+					var attribs = TinyMCE_FlashPlugin._parseAttributes(content.substring(startPos + 4, endPos));

+

+					// Is not flash, skip it

+					if (attribs['class'] != "mceItemFlash")

+						continue;

+

+					endPos += 2;

+

+					var embedHTML = '';

+					var wmode = tinyMCE.getParam("flash_wmode", "");

+					var quality = tinyMCE.getParam("flash_quality", "high");

+					var menu = tinyMCE.getParam("flash_menu", "false");

+

+					// Insert object + embed

+					embedHTML += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';

+					embedHTML += ' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"';

+					embedHTML += ' width="' + attribs["width"] + '" height="' + attribs["height"] + '">';

+					embedHTML += '<param name="movie" value="' + attribs["title"] + '" />';

+					embedHTML += '<param name="quality" value="' + quality + '" />';

+					embedHTML += '<param name="menu" value="' + menu + '" />';

+					embedHTML += '<param name="wmode" value="' + wmode + '" />';

+					embedHTML += '<embed src="' + attribs["title"] + '" wmode="' + wmode + '" quality="' + quality + '" menu="' + menu + '" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="' + attribs["width"] + '" height="' + attribs["height"] + '"></embed></object>';

+

+					// Insert embed/object chunk

+					chunkBefore = content.substring(0, startPos);

+					chunkAfter = content.substring(endPos);

+					content = chunkBefore + embedHTML + chunkAfter;

+				}

+				break;

+		}

+

+		// Pass through to next handler in chain

+		return content;

+	},

+

+	handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {

+		if (node == null)

+			return;

+

+		do {

+			if (node.nodeName == "IMG" && tinyMCE.getAttrib(node, 'class').indexOf('mceItemFlash') == 0) {

+				tinyMCE.switchClass(editor_id + '_flash', 'mceButtonSelected');

+				return true;

+			}

+		} while ((node = node.parentNode));

+

+		tinyMCE.switchClass(editor_id + '_flash', 'mceButtonNormal');

+

+		return true;

+	},

+

+	// Private plugin internal functions

+

+	_parseAttributes : function(attribute_string) {

+		var attributeName = "";

+		var attributeValue = "";

+		var withInName;

+		var withInValue;

+		var attributes = new Array();

+		var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g');

+

+		if (attribute_string == null || attribute_string.length < 2)

+			return null;

+

+		withInName = withInValue = false;

+

+		for (var i=0; i<attribute_string.length; i++) {

+			var chr = attribute_string.charAt(i);

+

+			if ((chr == '"' || chr == "'") && !withInValue)

+				withInValue = true;

+			else if ((chr == '"' || chr == "'") && withInValue) {

+				withInValue = false;

+

+				var pos = attributeName.lastIndexOf(' ');

+				if (pos != -1)

+					attributeName = attributeName.substring(pos+1);

+

+				attributes[attributeName.toLowerCase()] = attributeValue.substring(1);

+

+				attributeName = "";

+				attributeValue = "";

+			} else if (!whiteSpaceRegExp.test(chr) && !withInName && !withInValue)

+				withInName = true;

+

+			if (chr == '=' && withInName)

+				withInName = false;

+

+			if (withInName)

+				attributeName += chr;

+

+			if (withInValue)

+				attributeValue += chr;

+		}

+

+		return attributes;

+	}

+};

+

+tinyMCE.addPlugin("flash", TinyMCE_FlashPlugin);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/flash.htm
@@ -1,1 +1,71 @@
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{$lang_flash_title}</title>

+	<script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script language="javascript" type="text/javascript" src="jscripts/flash.js"></script>

+	<script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>

+	<link href="css/flash.css" rel="stylesheet" type="text/css" />

+	<base target="_self" />

+</head>

+<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">

+    <form onsubmit="insertFlash();return false;" action="#">

+		<div class="tabs">

+			<ul>

+				<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_flash_general}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="general_panel" class="panel current">

+				<fieldset>

+					<legend>{$lang_flash_general}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+							<tr>

+							<td nowrap="nowrap"><label for="file">{$lang_flash_file}</label></td>

+							  <td nowrap="nowrap">

+									<table border="0" cellspacing="0" cellpadding="0">

+									  <tr>

+										<td><input id="file" name="file" type="text" value="" onfocus="this.select();" /></td>

+										<td id="filebrowsercontainer">&nbsp;</td>

+									  </tr>

+									</table>

+								</td>

+							</tr>

+							<tr id="linklistrow">

+								<td><label for="linklist">{$lang_flash_list}</label></td>

+								<td id="linklistcontainer">&nbsp;</td>

+							</tr>

+							<tr>

+								<td nowrap="nowrap"><label>{$lang_flash_size}</label></td>

+								<td nowrap="nowrap">

+									<input type="text" id="width" name="width" value="" onfocus="this.select();" />

+									<select name="width2" id="width2" style="width: 50px">

+										<option value="">px</option>

+										<option value="%">%</option>

+									</select>&nbsp;x&nbsp;<input id="height" name="height" type="text"  value="" onfocus="this.select();" />

+									<select name="height2" id="height2" style="width: 50px">

+										<option value="">px</option>

+										<option value="%">%</option>

+									</select>

+								</td>

+							</tr>

+					</table>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<div style="float: left">

+				<input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertFlash();" />

+			</div>

+

+			<div style="float: right">

+				<input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />

+			</div>

+		</div>

+	</form>

+</body>

+</html>

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/flash/images/flash.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/jscripts/flash.js
@@ -1,1 +1,108 @@
+var url = tinyMCE.getParam("flash_external_list_url");

+if (url != null) {

+	// Fix relative

+	if (url.charAt(0) != '/' && url.indexOf('://') == -1)

+		url = tinyMCE.documentBasePath + "/" + url;

+

+	document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');

+}

+

+function init() {

+	tinyMCEPopup.resizeToInnerSize();

+

+	document.getElementById("filebrowsercontainer").innerHTML = getBrowserHTML('filebrowser','file','flash','flash');

+

+	// Image list outsrc

+	var html = getFlashListHTML('filebrowser','file','flash','flash');

+	if (html == "")

+		document.getElementById("linklistrow").style.display = 'none';

+	else

+		document.getElementById("linklistcontainer").innerHTML = html;

+

+	var formObj = document.forms[0];

+	var swffile   = tinyMCE.getWindowArg('swffile');

+	var swfwidth  = '' + tinyMCE.getWindowArg('swfwidth');

+	var swfheight = '' + tinyMCE.getWindowArg('swfheight');

+

+	if (swfwidth.indexOf('%')!=-1) {

+		formObj.width2.value = "%";

+		formObj.width.value  = swfwidth.substring(0,swfwidth.length-1);

+	} else {

+		formObj.width2.value = "px";

+		formObj.width.value  = swfwidth;

+	}

+

+	if (swfheight.indexOf('%')!=-1) {

+		formObj.height2.value = "%";

+		formObj.height.value  = swfheight.substring(0,swfheight.length-1);

+	} else {

+		formObj.height2.value = "px";

+		formObj.height.value  = swfheight;

+	}

+

+	formObj.file.value = swffile;

+	formObj.insert.value = tinyMCE.getLang('lang_' + tinyMCE.getWindowArg('action'), 'Insert', true);

+

+	selectByValue(formObj, 'linklist', swffile);

+

+	// Handle file browser

+	if (isVisible('filebrowser'))

+		document.getElementById('file').style.width = '230px';

+

+	// Auto select flash in list

+	if (typeof(tinyMCEFlashList) != "undefined" && tinyMCEFlashList.length > 0) {

+		for (var i=0; i<formObj.linklist.length; i++) {

+			if (formObj.linklist.options[i].value == tinyMCE.getWindowArg('swffile'))

+				formObj.linklist.options[i].selected = true;

+		}

+	}

+}

+

+function getFlashListHTML() {

+	if (typeof(tinyMCEFlashList) != "undefined" && tinyMCEFlashList.length > 0) {

+		var html = "";

+

+		html += '<select id="linklist" name="linklist" style="width: 250px" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.file.value=this.options[this.selectedIndex].value;">';

+		html += '<option value="">---</option>';

+

+		for (var i=0; i<tinyMCEFlashList.length; i++)

+			html += '<option value="' + tinyMCEFlashList[i][1] + '">' + tinyMCEFlashList[i][0] + '</option>';

+

+		html += '</select>';

+

+		return html;

+	}

+

+	return "";

+}

+

+function insertFlash() {

+	var formObj = document.forms[0];

+	var html      = '';

+	var file      = formObj.file.value;

+	var width     = formObj.width.value;

+	var height    = formObj.height.value;

+	if (formObj.width2.value=='%') {

+		width = width + '%';

+	}

+	if (formObj.height2.value=='%') {

+		height = height + '%';

+	}

+

+	if (width == "")

+		width = 100;

+

+	if (height == "")

+		height = 100;

+

+	html += ''

+		+ '<img src="' + (tinyMCE.getParam("theme_href") + "/images/spacer.gif") + '" mce_src="' + (tinyMCE.getParam("theme_href") + "/images/spacer.gif") + '" '

+		+ 'width="' + width + '" height="' + height + '" '

+		+ 'border="0" alt="' + file + '" title="' + file + '" class="mceItemFlash" />';

+

+	tinyMCEPopup.execCommand("mceInsertContent", true, html);

+	tinyMCE.selectedInstance.repaint();

+

+	tinyMCEPopup.close();

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/langs/en.js
@@ -1,1 +1,12 @@
+// UK lang variables

+

+tinyMCE.addToLang('flash',{

+title : 'Insert / edit Flash Movie',

+desc : 'Insert / edit Flash Movie',

+file : 'Flash-File (.swf)',

+size : 'Size',

+list : 'Flash files',

+props : 'Flash properties',

+general : 'General'

+});

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/flash/readme.txt
@@ -1,1 +1,2 @@
+Check the TinyMCE documentation for details on this plugin.

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css
@@ -1,1 +1,143 @@
-
+/* Hide the advanced tab */

+#advanced_tab {

+	display: none;

+}

+

+#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {

+	width: 280px;

+}

+

+#doctype, #docencoding {

+	width: 200px;

+}

+

+#langcode {

+	width: 30px;

+}

+

+#bgimage {

+	width: 220px;	

+}

+

+#fontface {

+	width: 240px;

+}

+

+#leftmargin, #rightmargin, #topmargin, #bottommargin {

+	width: 50px;

+}

+

+.panel_wrapper div.current {

+	height: 400px;

+}

+

+#stylesheet, #style {

+	width: 240px;

+}

+

+#doctypes {

+	width: 200px;

+}

+

+/* Head list classes */

+

+.headlistwrapper {

+	width: 100%;

+}

+

+.selected {

+	border: 1px solid #0A246A;

+	background-color: #B6BDD2;

+}

+

+.toolbar {

+	width: 100%;

+}

+

+#headlist {

+	width: 100%;

+	margin-top: 3px;

+	font-size: 11px;

+}

+

+#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {

+	display: none;

+}

+

+#addmenu {

+	position: absolute;

+	border: 1px solid gray;

+	display: none;

+	z-index: 100;

+	background-color: white;

+}

+

+#addmenu a {

+	display: block;

+	width: 100%;

+	line-height: 20px;

+	text-decoration: none;

+	background-color: white;

+}

+

+#addmenu a:hover {

+	background-color: #B6BDD2;

+	color: black;

+}

+

+#addmenu span {

+	padding-left: 10px;

+	padding-right: 10px;

+}

+

+#updateElementPanel {

+	display: none;

+}

+

+#script_element .panel_wrapper div.current {

+	height: 108px;

+}

+

+#style_element .panel_wrapper div.current {

+	height: 108px;

+}

+

+#link_element  .panel_wrapper div.current {

+	height: 140px;

+}

+

+#element_script_value {

+	width: 100%;

+	height: 100px;

+}

+

+#element_comment_value {

+	width: 100%;

+	height: 120px;

+}

+

+#element_style_value {

+	width: 100%;

+	height: 100px;

+}

+

+#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {

+	width: 250px;

+}

+

+.updateElementButton {

+	margin-top: 3px;

+}

+

+/* MSIE specific styles */

+

+* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {

+	width: 22px;

+	height: 22px;

+}

+

+textarea {

+	height: 55px;

+}

+

+.panel_wrapper div.current {height:420px;}

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var f=this._parseHeader(),h={},c,i,g,e=this.editor;function d(l,j){var k=l.attr(j);return k||""}h.fontface=e.getParam("fullpage_default_fontface","");h.fontsize=e.getParam("fullpage_default_fontsize","");i=f.firstChild;if(i.type==7){h.xml_pi=true;g=/encoding="([^"]+)"/.exec(i.value);if(g){h.docencoding=g[1]}}i=f.getAll("#doctype")[0];if(i){h.doctype="<!DOCTYPE"+i.value+">"}i=f.getAll("title")[0];if(i&&i.firstChild){h.metatitle=i.firstChild.value}b(f.getAll("meta"),function(m){var k=m.attr("name"),j=m.attr("http-equiv"),l;if(k){h["meta"+k.toLowerCase()]=m.attr("content")}else{if(j=="Content-Type"){l=/charset\s*=\s*(.*)\s*/gi.exec(m.attr("content"));if(l){h.docencoding=l[1]}}}});i=f.getAll("html")[0];if(i){h.langcode=d(i,"lang")||d(i,"xml:lang")}i=f.getAll("link")[0];if(i&&i.attr("rel")=="stylesheet"){h.stylesheet=i.attr("href")}i=f.getAll("body")[0];if(i){h.langdir=d(i,"dir");h.style=d(i,"style");h.visited_color=d(i,"vlink");h.link_color=d(i,"link");h.active_color=d(i,"alink")}return h},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n<l.length;n++){p=l[n];if(p.attr("name")==m){if(o){p.attr("content",o)}else{p.remove()}return}}if(o){j=new a("meta",1);j.attr("name",m);j.attr("content",o);j.shortEnded=true;i(j)}});j=f.getAll("link")[0];if(j&&j.attr("rel")=="stylesheet"){if(g.stylesheet){j.attr("href",g.stylesheet)}else{j.remove()}}else{if(g.stylesheet){j=new a("link",1);j.attr({rel:"stylesheet",text:"text/css",href:g.stylesheet});j.shortEnded=true;i(j)}}j=f.getAll("body")[0];if(j){c(j,"dir",g.langdir);c(j,"style",g.style);c(j,"vlink",g.visited_color);c(j,"link",g.link_color);c(j,"alink",g.active_color);e.setAttribs(this.editor.getBody(),{style:g.style,dir:g.dir,vLink:g.visited_color,link:g.link_color,aLink:g.active_color})}j=f.getAll("html")[0];if(j){c(j,"lang",g.langcode);c(j,"xml:lang",g.langcode)}h=new tinymce.html.Serializer({validate:false,indent:true,apply_source_formatting:true,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(f);this.head=h.substring(0,h.indexOf("</body>"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("<body");if(i!=-1){i=h.indexOf(">",i);m.head=k(h.substring(0,i+1));c=h.indexOf("</body",i);if(c==-1){c=h.length}d.content=h.substring(i+1,c);m.foot=k(h.substring(c))}else{m.head=this._getDefaultHeader();m.foot="\n</body>\n</html>"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='<?xml version="1.0" encoding="'+c.getParam("fullpage_default_encoding","ISO-8859-1")+'" ?>\n'}f+=c.getParam("fullpage_default_doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');f+="\n<html>\n<head>\n";if(e=c.getParam("fullpage_default_title")){f+="<title>"+e+"</title>\n"}if(e=c.getParam("fullpage_default_encoding")){f+='<meta http-equiv="Content-Type" content="text/html; charset='+e+'" />\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="</head>\n<body"+(d?' style="'+d+'"':"")+">\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
@@ -1,1 +1,406 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var each = tinymce.each, Node = tinymce.html.Node;

+

+	tinymce.create('tinymce.plugins.FullPagePlugin', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceFullPageProperties', function() {

+				ed.windowManager.open({

+					file : url + '/fullpage.htm',

+					width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),

+					height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url,

+					data : t._htmlToData()

+				});

+			});

+

+			// Register buttons

+			ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});

+

+			ed.onBeforeSetContent.add(t._setContent, t);

+			ed.onGetContent.add(t._getContent, t);

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Fullpage',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Private plugin internal methods

+

+		_htmlToData : function() {

+			var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;

+

+			function getAttr(elm, name) {

+				var value = elm.attr(name);

+

+				return value || '';

+			};

+

+			// Default some values

+			data.fontface = editor.getParam("fullpage_default_fontface", "");

+			data.fontsize = editor.getParam("fullpage_default_fontsize", "");

+

+			// Parse XML PI

+			elm = headerFragment.firstChild;

+			if (elm.type == 7) {

+				data.xml_pi = true;

+				matches = /encoding="([^"]+)"/.exec(elm.value);

+				if (matches)

+					data.docencoding = matches[1];

+			}

+

+			// Parse doctype

+			elm = headerFragment.getAll('#doctype')[0];

+			if (elm)

+				data.doctype = '<!DOCTYPE' + elm.value + ">"; 

+

+			// Parse title element

+			elm = headerFragment.getAll('title')[0];

+			if (elm && elm.firstChild) {

+				data.metatitle = elm.firstChild.value;

+			}

+

+			// Parse meta elements

+			each(headerFragment.getAll('meta'), function(meta) {

+				var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches;

+

+				if (name)

+					data['meta' + name.toLowerCase()] = meta.attr('content');

+				else if (httpEquiv == "Content-Type") {

+					matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content'));

+

+					if (matches)

+						data.docencoding = matches[1];

+				}

+			});

+

+			// Parse html attribs

+			elm = headerFragment.getAll('html')[0];

+			if (elm)

+				data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');

+	

+			// Parse stylesheet

+			elm = headerFragment.getAll('link')[0];

+			if (elm && elm.attr('rel') == 'stylesheet')

+				data.stylesheet = elm.attr('href');

+

+			// Parse body parts

+			elm = headerFragment.getAll('body')[0];

+			if (elm) {

+				data.langdir = getAttr(elm, 'dir');

+				data.style = getAttr(elm, 'style');

+				data.visited_color = getAttr(elm, 'vlink');

+				data.link_color = getAttr(elm, 'link');

+				data.active_color = getAttr(elm, 'alink');

+			}

+

+			return data;

+		},

+

+		_dataToHtml : function(data) {

+			var headerFragment, headElement, html, elm, value, dom = this.editor.dom;

+

+			function setAttr(elm, name, value) {

+				elm.attr(name, value ? value : undefined);

+			};

+

+			function addHeadNode(node) {

+				if (headElement.firstChild)

+					headElement.insert(node, headElement.firstChild);

+				else

+					headElement.append(node);

+			};

+

+			headerFragment = this._parseHeader();

+			headElement = headerFragment.getAll('head')[0];

+			if (!headElement) {

+				elm = headerFragment.getAll('html')[0];

+				headElement = new Node('head', 1);

+

+				if (elm.firstChild)

+					elm.insert(headElement, elm.firstChild, true);

+				else

+					elm.append(headElement);

+			}

+

+			// Add/update/remove XML-PI

+			elm = headerFragment.firstChild;

+			if (data.xml_pi) {

+				value = 'version="1.0"';

+

+				if (data.docencoding)

+					value += ' encoding="' + data.docencoding + '"';

+

+				if (elm.type != 7) {

+					elm = new Node('xml', 7);

+					headerFragment.insert(elm, headerFragment.firstChild, true);

+				}

+

+				elm.value = value;

+			} else if (elm && elm.type == 7)

+				elm.remove();

+

+			// Add/update/remove doctype

+			elm = headerFragment.getAll('#doctype')[0];

+			if (data.doctype) {

+				if (!elm) {

+					elm = new Node('#doctype', 10);

+

+					if (data.xml_pi)

+						headerFragment.insert(elm, headerFragment.firstChild);

+					else

+						addHeadNode(elm);

+				}

+

+				elm.value = data.doctype.substring(9, data.doctype.length - 1);

+			} else if (elm)

+				elm.remove();

+

+			// Add/update/remove title

+			elm = headerFragment.getAll('title')[0];

+			if (data.metatitle) {

+				if (!elm) {

+					elm = new Node('title', 1);

+					elm.append(new Node('#text', 3)).value = data.metatitle;

+					addHeadNode(elm);

+				}

+			}

+

+			// Add meta encoding

+			if (data.docencoding) {

+				elm = null;

+				each(headerFragment.getAll('meta'), function(meta) {

+					if (meta.attr('http-equiv') == 'Content-Type')

+						elm = meta;

+				});

+

+				if (!elm) {

+					elm = new Node('meta', 1);

+					elm.attr('http-equiv', 'Content-Type');

+					elm.shortEnded = true;

+					addHeadNode(elm);

+				}

+

+				elm.attr('content', 'text/html; charset=' + data.docencoding);

+			}

+

+			// Add/update/remove meta

+			each('keywords,description,author,copyright,robots'.split(','), function(name) {

+				var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];

+

+				for (i = 0; i < nodes.length; i++) {

+					meta = nodes[i];

+

+					if (meta.attr('name') == name) {

+						if (value)

+							meta.attr('content', value);

+						else

+							meta.remove();

+

+						return;

+					}

+				}

+

+				if (value) {

+					elm = new Node('meta', 1);

+					elm.attr('name', name);

+					elm.attr('content', value);

+					elm.shortEnded = true;

+

+					addHeadNode(elm);

+				}

+			});

+

+			// Add/update/delete link

+			elm = headerFragment.getAll('link')[0];

+			if (elm && elm.attr('rel') == 'stylesheet') {

+				if (data.stylesheet)

+					elm.attr('href', data.stylesheet);

+				else

+					elm.remove();

+			} else if (data.stylesheet) {

+				elm = new Node('link', 1);

+				elm.attr({

+					rel : 'stylesheet',

+					text : 'text/css',

+					href : data.stylesheet

+				});

+				elm.shortEnded = true;

+

+				addHeadNode(elm);

+			}

+

+			// Update body attributes

+			elm = headerFragment.getAll('body')[0];

+			if (elm) {

+				setAttr(elm, 'dir', data.langdir);

+				setAttr(elm, 'style', data.style);

+				setAttr(elm, 'vlink', data.visited_color);

+				setAttr(elm, 'link', data.link_color);

+				setAttr(elm, 'alink', data.active_color);

+

+				// Update iframe body as well

+				dom.setAttribs(this.editor.getBody(), {

+					style : data.style,

+					dir : data.dir,

+					vLink : data.visited_color,

+					link : data.link_color,

+					aLink : data.active_color

+				});

+			}

+

+			// Set html attributes

+			elm = headerFragment.getAll('html')[0];

+			if (elm) {

+				setAttr(elm, 'lang', data.langcode);

+				setAttr(elm, 'xml:lang', data.langcode);

+			}

+

+			// Serialize header fragment and crop away body part

+			html = new tinymce.html.Serializer({

+				validate: false,

+				indent: true,

+				apply_source_formatting : true,

+				indent_before: 'head,html,body,meta,title,script,link,style',

+				indent_after: 'head,html,body,meta,title,script,link,style'

+			}).serialize(headerFragment);

+

+			this.head = html.substring(0, html.indexOf('</body>'));

+		},

+

+		_parseHeader : function() {

+			// Parse the contents with a DOM parser

+			return new tinymce.html.DomParser({

+				validate: false,

+				root_name: '#document'

+			}).parse(this.head);

+		},

+

+		_setContent : function(ed, o) {

+			var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm;

+

+			function low(s) {

+				return s.replace(/<\/?[A-Z]+/g, function(a) {

+					return a.toLowerCase();

+				})

+			};

+

+			// Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate

+			if (o.format == 'raw' && self.head)

+				return;

+

+			if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))

+				return;

+

+			// Parse out head, body and footer

+			content = content.replace(/<(\/?)BODY/gi, '<$1body');

+			startPos = content.indexOf('<body');

+

+			if (startPos != -1) {

+				startPos = content.indexOf('>', startPos);

+				self.head = low(content.substring(0, startPos + 1));

+

+				endPos = content.indexOf('</body', startPos);

+				if (endPos == -1)

+					endPos = content.length;

+

+				o.content = content.substring(startPos + 1, endPos);

+				self.foot = low(content.substring(endPos));

+			} else {

+				self.head = this._getDefaultHeader();

+				self.foot = '\n</body>\n</html>';

+			}

+

+			// Parse header and update iframe

+			headerFragment = self._parseHeader();

+			each(headerFragment.getAll('style'), function(node) {

+				if (node.firstChild)

+					styles += node.firstChild.value;

+			});

+

+			elm = headerFragment.getAll('body')[0];

+			if (elm) {

+				dom.setAttribs(self.editor.getBody(), {

+					style : elm.attr('style') || '',

+					dir : elm.attr('dir') || '',

+					vLink : elm.attr('vlink') || '',

+					link : elm.attr('link') || '',

+					aLink : elm.attr('alink') || ''

+				});

+			}

+

+			dom.remove('fullpage_styles');

+

+			if (styles) {

+				dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);

+

+				// Needed for IE 6/7

+				elm = dom.get('fullpage_styles');

+				if (elm.styleSheet)

+					elm.styleSheet.cssText = styles;

+			}

+		},

+

+		_getDefaultHeader : function() {

+			var header = '', editor = this.editor, value, styles = '';

+

+			if (editor.getParam('fullpage_default_xml_pi'))

+				header += '<?xml version="1.0" encoding="' + editor.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';

+

+			header += editor.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');

+			header += '\n<html>\n<head>\n';

+

+			if (value = editor.getParam('fullpage_default_title'))

+				header += '<title>' + value + '</title>\n';

+

+			if (value = editor.getParam('fullpage_default_encoding'))

+				header += '<meta http-equiv="Content-Type" content="text/html; charset=' + value + '" />\n';

+

+			if (value = editor.getParam('fullpage_default_font_family'))

+				styles += 'font-family: ' + value + ';';

+

+			if (value = editor.getParam('fullpage_default_font_size'))

+				styles += 'font-size: ' + value + ';';

+

+			if (value = editor.getParam('fullpage_default_text_color'))

+				styles += 'color: ' + value + ';';

+

+			header += '</head>\n<body' + (styles ? ' style="' + styles + '"' : '') + '>\n';

+

+			return header;

+		},

+

+		_getContent : function(ed, o) {

+			var self = this;

+

+			if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))

+				o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullpage/fullpage.htm
@@ -1,1 +1,260 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#fullpage_dlg.title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="js/fullpage.js"></script>

+	<link href="css/fullpage.css" rel="stylesheet" type="text/css" />

+</head>

+<body id="fullpage" style="display: none">

+<form onsubmit="FullPageDialog.update();return false;" name="fullpage" action="#">

+		<div class="tabs">

+			<ul>

+				<li id="meta_tab" class="current"><span><a href="javascript:mcTabs.displayTab('meta_tab','meta_panel');" onmousedown="return false;">{#fullpage_dlg.meta_tab}</a></span></li>

+				<li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#fullpage_dlg.appearance_tab}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="meta_panel" class="panel current">

+				<fieldset>

+					<legend>{#fullpage_dlg.meta_props}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>

+							<td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>

+							<td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>

+							<td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>

+							<td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>

+							<td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>

+							<td>

+								<select id="metarobots" name="metarobots">

+											<option value="">{#not_set}</option> 

+											<option value="index,follow">{#fullpage_dlg.meta_index_follow}</option>

+											<option value="index,nofollow">{#fullpage_dlg.meta_index_nofollow}</option>

+											<option value="noindex,follow">{#fullpage_dlg.meta_noindex_follow}</option>

+											<option value="noindex,nofollow">{#fullpage_dlg.meta_noindex_nofollow}</option>

+								</select>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#fullpage_dlg.langprops}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="column1"><label for="docencoding">{#fullpage_dlg.encoding}</label></td> 

+							<td>

+								<select id="docencoding" name="docencoding"> 

+										<option value="">{#not_set}</option>

+								</select>

+							</td> 

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="doctype">{#fullpage_dlg.doctypes}</label>&nbsp;</td>

+							<td>

+								<select id="doctype" name="doctype">

+										<option value="">{#not_set}</option>

+								</select>

+							</td>

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>

+							<td><input type="text" id="langcode" name="langcode" value="" /></td>

+						</tr>

+						<tr>

+							<td class="column1"><label for="langdir">{#fullpage_dlg.langdir}</label></td> 

+							<td>

+								<select id="langdir" name="langdir"> 

+										<option value="">{#not_set}</option> 

+										<option value="ltr">{#fullpage_dlg.ltr}</option> 

+										<option value="rtl">{#fullpage_dlg.rtl}</option> 

+								</select>

+							</td> 

+						</tr>

+						<tr>

+							<td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td>

+							<td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="appearance_panel" class="panel">

+				<fieldset>

+					<legend>{#fullpage_dlg.appearance_textprops}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="column1"><label for="fontface">{#fullpage_dlg.fontface}</label></td> 

+							<td>

+								<select id="fontface" name="fontface" onchange="FullPageDialog.changedStyleProp();">

+										<option value="">{#not_set}</option>

+								</select>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="fontsize">{#fullpage_dlg.fontsize}</label></td> 

+							<td>

+								<select id="fontsize" name="fontsize" onchange="FullPageDialog.changedStyleProp();">

+										<option value="">{#not_set}</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="textcolor">{#fullpage_dlg.textcolor}</label></td> 

+							<td>

+								<table border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="textcolor" name="textcolor" type="text" value="" size="9" onchange="updateColor('textcolor_pick','textcolor');FullPageDialog.changedStyleProp();" /></td>

+										<td id="textcolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#fullpage_dlg.appearance_bgprops}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="column1"><label for="bgimage">{#fullpage_dlg.bgimage}</label></td> 

+							<td>

+								<table border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bgimage" name="bgimage" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

+										<td id="bgimage_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+						<tr>

+							<td class="column1"><label for="bgcolor">{#fullpage_dlg.bgcolor}</label></td> 

+							<td>

+								<table border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');FullPageDialog.changedStyleProp();" /></td>

+										<td id="bgcolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#fullpage_dlg.appearance_marginprops}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="column1"><label for="leftmargin">{#fullpage_dlg.left_margin}</label></td> 

+							<td><input id="leftmargin" name="leftmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

+							<td class="column1"><label for="rightmargin">{#fullpage_dlg.right_margin}</label></td> 

+							<td><input id="rightmargin" name="rightmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

+						</tr>

+						<tr>

+							<td class="column1"><label for="topmargin">{#fullpage_dlg.top_margin}</label></td> 

+							<td><input id="topmargin" name="topmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

+							<td class="column1"><label for="bottommargin">{#fullpage_dlg.bottom_margin}</label></td> 

+							<td><input id="bottommargin" name="bottommargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#fullpage_dlg.appearance_linkprops}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="column1"><label for="link_color">{#fullpage_dlg.link_color}</label></td> 

+							<td>

+								<table border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="link_color" name="link_color" type="text" value="" size="9" onchange="updateColor('link_color_pick','link_color');FullPageDialog.changedStyleProp();" /></td>

+										<td id="link_color_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+

+							<td class="column1"><label for="visited_color">{#fullpage_dlg.visited_color}</label></td> 

+							<td>

+								<table border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="visited_color" name="visited_color" type="text" value="" size="9" onchange="updateColor('visited_color_pick','visited_color');FullPageDialog.changedStyleProp();" /></td>

+										<td id="visited_color_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="active_color">{#fullpage_dlg.active_color}</label></td> 

+							<td>

+								<table border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="active_color" name="active_color" type="text" value="" size="9" onchange="updateColor('active_color_pick','active_color');FullPageDialog.changedStyleProp();" /></td>

+										<td id="active_color_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+

+							<td>&nbsp;</td>

+							<td>&nbsp;</td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#fullpage_dlg.appearance_style}</legend>

+

+					<table border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td class="column1"><label for="stylesheet">{#fullpage_dlg.stylesheet}</label></td> 

+							<td><table border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="stylesheet" name="stylesheet" type="text" value="" /></td>

+										<td id="stylesheet_browsercontainer">&nbsp;</td>

+									</tr>

+								</table></td>

+						</tr>

+						<tr>

+							<td class="column1"><label for="style">{#fullpage_dlg.style}</label></td> 

+							<td><input id="style" name="style" type="text" value="" onchange="FullPageDialog.changedStyle();" /></td>

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<input type="submit" id="insert" name="update" value="{#update}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js
@@ -1,1 +1,233 @@
+/**

+ * fullpage.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinyMCEPopup.requireLangPack();

+

+	var defaultDocTypes = 

+		'XHTML 1.0 Transitional=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">,' +

+		'XHTML 1.0 Frameset=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">,' +

+		'XHTML 1.0 Strict=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">,' +

+		'XHTML 1.1=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">,' +

+		'HTML 4.01 Transitional=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">,' +

+		'HTML 4.01 Strict=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">,' +

+		'HTML 4.01 Frameset=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">';

+

+	var defaultEncodings = 

+		'Western european (iso-8859-1)=iso-8859-1,' +

+		'Central European (iso-8859-2)=iso-8859-2,' +

+		'Unicode (UTF-8)=utf-8,' +

+		'Chinese traditional (Big5)=big5,' +

+		'Cyrillic (iso-8859-5)=iso-8859-5,' +

+		'Japanese (iso-2022-jp)=iso-2022-jp,' +

+		'Greek (iso-8859-7)=iso-8859-7,' +

+		'Korean (iso-2022-kr)=iso-2022-kr,' +

+		'ASCII (us-ascii)=us-ascii';

+

+	var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';

+	var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px';

+

+	function setVal(id, value) {

+		var elm = document.getElementById(id);

+

+		if (elm) {

+			value = value || '';

+

+			if (elm.nodeName == "SELECT")

+				selectByValue(document.forms[0], id, value);

+			else if (elm.type == "checkbox")

+				elm.checked = !!value;

+			else

+				elm.value = value;

+		}

+	};

+

+	function getVal(id) {

+		var elm = document.getElementById(id);

+

+		if (elm.nodeName == "SELECT")

+			return elm.options[elm.selectedIndex].value;

+

+		if (elm.type == "checkbox")

+			return elm.checked;

+

+		return elm.value;

+	};

+

+	window.FullPageDialog = {

+		changedStyle : function() {

+			var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style'));

+

+			setVal('fontface', styles['font-face']);

+			setVal('fontsize', styles['font-size']);

+			setVal('textcolor', styles['color']);

+

+			if (val = styles['background-image'])

+				setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"));

+			else

+				setVal('bgimage', '');

+

+			setVal('bgcolor', styles['background-color']);

+

+			// Reset margin form elements

+			setVal('topmargin', '');

+			setVal('rightmargin', '');

+			setVal('bottommargin', '');

+			setVal('leftmargin', '');

+

+			// Expand margin

+			if (val = styles['margin']) {

+				val = val.split(' ');

+				styles['margin-top'] = val[0] || '';

+				styles['margin-right'] = val[1] || val[0] || '';

+				styles['margin-bottom'] = val[2] || val[0] || '';

+				styles['margin-left'] = val[3] || val[0] || '';

+			}

+

+			if (val = styles['margin-top'])

+				setVal('topmargin', val.replace(/px/, ''));

+

+			if (val = styles['margin-right'])

+				setVal('rightmargin', val.replace(/px/, ''));

+

+			if (val = styles['margin-bottom'])

+				setVal('bottommargin', val.replace(/px/, ''));

+

+			if (val = styles['margin-left'])

+				setVal('leftmargin', val.replace(/px/, ''));

+

+			updateColor('bgcolor_pick', 'bgcolor');

+			updateColor('textcolor_pick', 'textcolor');

+		},

+

+		changedStyleProp : function() {

+			var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style'));

+	

+			styles['font-face'] = getVal('fontface');

+			styles['font-size'] = getVal('fontsize');

+			styles['color'] = getVal('textcolor');

+			styles['background-color'] = getVal('bgcolor');

+

+			if (val = getVal('bgimage'))

+				styles['background-image'] = "url('" + val + "')";

+			else

+				styles['background-image'] = '';

+

+			delete styles['margin'];

+

+			if (val = getVal('topmargin'))

+				styles['margin-top'] = val + "px";

+			else

+				styles['margin-top'] = '';

+

+			if (val = getVal('rightmargin'))

+				styles['margin-right'] = val + "px";

+			else

+				styles['margin-right'] = '';

+

+			if (val = getVal('bottommargin'))

+				styles['margin-bottom'] = val + "px";

+			else

+				styles['margin-bottom'] = '';

+

+			if (val = getVal('leftmargin'))

+				styles['margin-left'] = val + "px";

+			else

+				styles['margin-left'] = '';

+

+			// Serialize, parse and reserialize this will compress redundant styles

+			setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles))));

+			this.changedStyle();

+		},

+		

+		update : function() {

+			var data = {};

+

+			tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) {

+				data[node.id] = getVal(node.id);

+			});

+

+			tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data);

+			tinyMCEPopup.close();

+		}

+	};

+	

+	function init() {

+		var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor;

+

+		// Setup doctype select box

+		list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(',');

+		for (i = 0; i < list.length; i++) {

+			item = list[i].split('=');

+

+			if (item.length > 1)

+				addSelectValue(form, 'doctype', item[0], item[1]);

+		}

+

+		// Setup fonts select box

+		list = editor.getParam("fullpage_fonts", defaultFontNames).split(';');

+		for (i = 0; i < list.length; i++) {

+			item = list[i].split('=');

+

+			if (item.length > 1)

+				addSelectValue(form, 'fontface', item[0], item[1]);

+		}

+

+		// Setup fontsize select box

+		list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(',');

+		for (i = 0; i < list.length; i++)

+			addSelectValue(form, 'fontsize', list[i], list[i]);

+

+		// Setup encodings select box

+		list = editor.getParam("fullpage_encodings", defaultEncodings).split(',');

+		for (i = 0; i < list.length; i++) {

+			item = list[i].split('=');

+

+			if (item.length > 1)

+				addSelectValue(form, 'docencoding', item[0], item[1]);

+		}

+

+		// Setup color pickers

+		document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

+		document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color');

+		document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color');

+		document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color');

+		document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor');

+		document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage');

+		document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage');

+

+		// Resize some elements

+		if (isVisible('stylesheetbrowser'))

+			document.getElementById('stylesheet').style.width = '220px';

+

+		if (isVisible('link_href_browser'))

+			document.getElementById('element_link_href').style.width = '230px';

+

+		if (isVisible('bgimage_browser'))

+			document.getElementById('bgimage').style.width = '210px';

+

+		// Update form

+		tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) {

+			setVal(key, value);

+		});

+

+		FullPageDialog.changedStyle();

+

+		// Update colors

+		updateColor('textcolor_pick', 'textcolor');

+		updateColor('bgcolor_pick', 'bgcolor');

+		updateColor('visited_color_pick', 'visited_color');

+		updateColor('active_color_pick', 'active_color');

+		updateColor('link_color_pick', 'link_color');

+	};

+

+	tinyMCEPopup.onInit.add(init);

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().firstChild);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
@@ -1,1 +1,159 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var DOM = tinymce.DOM;

+

+	tinymce.create('tinymce.plugins.FullScreenPlugin', {

+		init : function(ed, url) {

+			var t = this, s = {}, vp, posCss;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceFullScreen', function() {

+				var win, de = DOM.doc.documentElement;

+

+				if (ed.getParam('fullscreen_is_enabled')) {

+					if (ed.getParam('fullscreen_new_window'))

+						closeFullscreen(); // Call to close in new window

+					else {

+						DOM.win.setTimeout(function() {

+							tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);

+							tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent());

+							tinyMCE.remove(ed);

+							DOM.remove('mce_fullscreen_container');

+							de.style.overflow = ed.getParam('fullscreen_html_overflow');

+							DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));

+							DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));

+							tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings

+						}, 10);

+					}

+

+					return;

+				}

+

+				if (ed.getParam('fullscreen_new_window')) {

+					win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);

+					try {

+						win.resizeTo(screen.availWidth, screen.availHeight);

+					} catch (e) {

+						// Ignore

+					}

+				} else {

+					tinyMCE.oldSettings = tinyMCE.settings; // Store old settings

+					s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';

+					s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);

+					vp = DOM.getViewPort();

+					s.fullscreen_scrollx = vp.x;

+					s.fullscreen_scrolly = vp.y;

+

+					// Fixes an Opera bug where the scrollbars doesn't reappear

+					if (tinymce.isOpera && s.fullscreen_overflow == 'visible')

+						s.fullscreen_overflow = 'auto';

+

+					// Fixes an IE bug where horizontal scrollbars would appear

+					if (tinymce.isIE && s.fullscreen_overflow == 'scroll')

+						s.fullscreen_overflow = 'auto';

+

+					// Fixes an IE bug where the scrollbars doesn't reappear

+					if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))

+						s.fullscreen_html_overflow = 'auto'; 

+

+					if (s.fullscreen_overflow == '0px')

+						s.fullscreen_overflow = '';

+

+					DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');

+					de.style.overflow = 'hidden'; //Fix for IE6/7

+					vp = DOM.getViewPort();

+					DOM.win.scrollTo(0, 0);

+

+					if (tinymce.isIE)

+						vp.h -= 1;

+

+					// Use fixed position if it exists

+					if (tinymce.isIE6)

+						posCss = 'absolute;top:' + vp.y;

+					else

+						posCss = 'fixed;top:0';

+

+					n = DOM.add(DOM.doc.body, 'div', {

+						id : 'mce_fullscreen_container', 

+						style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});

+					DOM.add(n, 'div', {id : 'mce_fullscreen'});

+

+					tinymce.each(ed.settings, function(v, n) {

+						s[n] = v;

+					});

+

+					s.id = 'mce_fullscreen';

+					s.width = n.clientWidth;

+					s.height = n.clientHeight - 15;

+					s.fullscreen_is_enabled = true;

+					s.fullscreen_editor_id = ed.id;

+					s.theme_advanced_resizing = false;

+					s.save_onsavecallback = function() {

+						ed.setContent(tinyMCE.get(s.id).getContent());

+						ed.execCommand('mceSave');

+					};

+

+					tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {

+						s[k] = v;

+					});

+

+					if (s.theme_advanced_toolbar_location === 'external')

+						s.theme_advanced_toolbar_location = 'top';

+

+					t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);

+					t.fullscreenEditor.onInit.add(function() {

+						t.fullscreenEditor.setContent(ed.getContent());

+						t.fullscreenEditor.focus();

+					});

+

+					t.fullscreenEditor.render();

+

+					t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');

+					t.fullscreenElement.update();

+					//document.body.overflow = 'hidden';

+

+					t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {

+						var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;

+

+						// Get outer/inner size to get a delta size that can be used to calc the new iframe size

+						outerSize = fed.dom.getSize(fed.getContainer().firstChild);

+						innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);

+

+						fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);

+					});

+				}

+			});

+

+			// Register buttons

+			ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});

+

+			ed.onNodeChange.add(function(ed, cm) {

+				cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Fullscreen',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm
@@ -1,1 +1,111 @@
+<!DOCTYPE html>

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title></title>

+	<meta http-equiv="X-UA-Compatible" content="IE=edge" />

+	<script type="text/javascript" src="../../tiny_mce.js"></script>

+	<script type="text/javascript">

+		function patchCallback(settings, key) {

+			if (settings[key])

+				settings[key] = "window.opener." + settings[key];

+		}

+

+		var settings = {}, paSe = window.opener.tinyMCE.activeEditor.settings, oeID = window.opener.tinyMCE.activeEditor.id;

+

+		// Clone array

+		for (var n in paSe)

+			settings[n] = paSe[n];

+

+		// Override options for fullscreen

+		for (var n in paSe.fullscreen_settings)

+			settings[n] = paSe.fullscreen_settings[n];

+

+		// Patch callbacks, make them point to window.opener

+		patchCallback(settings, 'urlconverter_callback');

+		patchCallback(settings, 'insertlink_callback');

+		patchCallback(settings, 'insertimage_callback');

+		patchCallback(settings, 'setupcontent_callback');

+		patchCallback(settings, 'save_callback');

+		patchCallback(settings, 'onchange_callback');

+		patchCallback(settings, 'init_instance_callback');

+		patchCallback(settings, 'file_browser_callback');

+		patchCallback(settings, 'cleanup_callback');

+		patchCallback(settings, 'execcommand_callback');

+		patchCallback(settings, 'oninit');

+

+		// Set options

+		delete settings.id;

+		settings['mode'] = 'exact';

+		settings['elements'] = 'fullscreenarea';

+		settings['add_unload_trigger'] = false;

+		settings['ask'] = false;

+		settings['document_base_url'] = window.opener.tinyMCE.activeEditor.documentBaseURI.getURI();

+		settings['fullscreen_is_enabled'] = true;

+		settings['fullscreen_editor_id'] = oeID;

+		settings['theme_advanced_resizing'] = false;

+		settings['strict_loading_mode'] = true;

+

+		settings.save_onsavecallback = function() {

+			window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'});

+			window.opener.tinyMCE.get(oeID).execCommand('mceSave');

+			window.close();

+		};

+

+		function unloadHandler(e) {

+			moveContent();

+		}

+

+		function moveContent() {

+			window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent());

+		}

+

+		function closeFullscreen() {

+			moveContent();

+			window.close();

+		}

+

+		function doParentSubmit() {

+			moveContent();

+

+			if (window.opener.tinyMCE.selectedInstance.formElement.form)

+				window.opener.tinyMCE.selectedInstance.formElement.form.submit();

+

+			window.close();

+

+			return false;

+		}

+

+		function render() {

+			var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM;

+

+			e.value = window.opener.tinyMCE.get(oeID).getContent();

+

+			vp = dom.getViewPort();

+			settings.width = vp.w;

+			settings.height = vp.h - 15;

+

+			tinymce.dom.Event.add(window, 'resize', function() {

+				var vp = dom.getViewPort();

+

+				tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);

+			});

+

+			tinyMCE.init(settings);

+		}

+

+		// Add onunload

+		tinymce.dom.Event.add(window, "beforeunload", unloadHandler);

+	</script>

+</head>

+<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">

+<form onsubmit="doParentSubmit();">

+<textarea id="fullscreenarea" style="width:100%; height:100%"></textarea>

+</form>

+

+<script type="text/javascript">

+	render();

+</script>

+

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/iespell/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js
@@ -1,1 +1,54 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.IESpell', {

+		init : function(ed, url) {

+			var t = this, sp;

+

+			if (!tinymce.isIE)

+				return;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceIESpell', function() {

+				try {

+					sp = new ActiveXObject("ieSpell.ieSpellExtension");

+					sp.CheckDocumentNode(ed.getDoc().documentElement);

+				} catch (e) {

+					if (e.number == -2146827859) {

+						ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) {

+							if (s)

+								window.open('http://www.iespell.com/download.php', 'ieSpellDownload', '');

+						});

+					} else

+						ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number);

+				}

+			});

+

+			// Register buttons

+			ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'IESpell (IE Only)',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","<br />"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(i,k){var g=this,f,j=d.doc,h,k;k=g._findId(k||i);if(!g.windows[k]){g.parent(i);return}g.count--;if(g.count==0){d.remove("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","false");g.editor.focus()}if(f=g.windows[k]){g.onClose.dispatch(g);a.remove(j,"mousedown",f.mousedownFunc);a.remove(j,"click",f.clickFunc);a.clear(k);a.clear(k+"_ifr");d.setAttrib(k+"_ifr","src",'javascript:""');f.element.remove();delete g.windows[k];h=g._frontWindow();if(h){g.focus(h.id)}}},_frontWindow:function(){var g,f=0;e(this.windows,function(h){if(h.zIndex>f){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
@@ -1,1 +1,700 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;

+

+	tinymce.create('tinymce.plugins.InlinePopups', {

+		init : function(ed, url) {

+			// Replace window manager

+			ed.onBeforeRenderUI.add(function() {

+				ed.windowManager = new tinymce.InlineWindowManager(ed);

+				DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css");

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'InlinePopups',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', {

+		InlineWindowManager : function(ed) {

+			var t = this;

+

+			t.parent(ed);

+			t.zIndex = 300000;

+			t.count = 0;

+			t.windows = {};

+		},

+

+		open : function(f, p) {

+			var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow;

+

+			f = f || {};

+			p = p || {};

+

+			// Run native windows

+			if (!f.inline)

+				return t.parent(f, p);

+

+			parentWindow = t._frontWindow();

+			if (parentWindow && DOM.get(parentWindow.id + '_ifr')) {

+				parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement;

+			}

+			

+			// Only store selection if the type is a normal window

+			if (!f.type)

+				t.bookmark = ed.selection.getBookmark(1);

+

+			id = DOM.uniqueId();

+			vp = DOM.getViewPort();

+			f.width = parseInt(f.width || 320);

+			f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);

+			f.min_width = parseInt(f.min_width || 150);

+			f.min_height = parseInt(f.min_height || 100);

+			f.max_width = parseInt(f.max_width || 2000);

+			f.max_height = parseInt(f.max_height || 2000);

+			f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0)));

+			f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0)));

+			f.movable = f.resizable = true;

+			p.mce_width = f.width;

+			p.mce_height = f.height;

+			p.mce_inline = true;

+			p.mce_window_id = id;

+			p.mce_auto_focus = f.auto_focus;

+

+			// Transpose

+//			po = DOM.getPos(ed.getContainer());

+//			f.left -= po.x;

+//			f.top -= po.y;

+

+			t.features = f;

+			t.params = p;

+			t.onOpen.dispatch(t, f, p);

+

+			if (f.type) {

+				opt += ' mceModal';

+

+				if (f.type)

+					opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1);

+

+				f.resizable = false;

+			}

+

+			if (f.statusbar)

+				opt += ' mceStatusbar';

+

+			if (f.resizable)

+				opt += ' mceResizable';

+

+			if (f.minimizable)

+				opt += ' mceMinimizable';

+

+			if (f.maximizable)

+				opt += ' mceMaximizable';

+

+			if (f.movable)

+				opt += ' mceMovable';

+

+			// Create DOM objects

+			t._addAll(DOM.doc.body, 

+				['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, 

+					['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},

+						['div', {id : id + '_top', 'class' : 'mceTop'}, 

+							['div', {'class' : 'mceLeft'}],

+							['div', {'class' : 'mceCenter'}],

+							['div', {'class' : 'mceRight'}],

+							['span', {id : id + '_title'}, f.title || '']

+						],

+

+						['div', {id : id + '_middle', 'class' : 'mceMiddle'}, 

+							['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}],

+							['span', {id : id + '_content'}],

+							['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}]

+						],

+

+						['div', {id : id + '_bottom', 'class' : 'mceBottom'},

+							['div', {'class' : 'mceLeft'}],

+							['div', {'class' : 'mceCenter'}],

+							['div', {'class' : 'mceRight'}],

+							['span', {id : id + '_status'}, 'Content']

+						],

+

+						['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}],

+						['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

+						['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

+						['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

+						['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],

+						['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}],

+						['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}],

+						['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}],

+						['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}],

+						['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}],

+						['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}],

+						['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}],

+						['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}]

+					]

+				]

+			);

+

+			DOM.setStyles(id, {top : -10000, left : -10000});

+

+			// Fix gecko rendering bug, where the editors iframe messed with window contents

+			if (tinymce.isGecko)

+				DOM.setStyle(id, 'overflow', 'auto');

+

+			// Measure borders

+			if (!f.type) {

+				dw += DOM.get(id + '_left').clientWidth;

+				dw += DOM.get(id + '_right').clientWidth;

+				dh += DOM.get(id + '_top').clientHeight;

+				dh += DOM.get(id + '_bottom').clientHeight;

+			}

+

+			// Resize window

+			DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh});

+

+			u = f.url || f.file;

+			if (u) {

+				if (tinymce.relaxedDomain)

+					u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;

+

+				u = tinymce._addVer(u);

+			}

+

+			if (!f.type) {

+				DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'});

+				DOM.setStyles(id + '_ifr', {width : f.width, height : f.height});

+				DOM.setAttrib(id + '_ifr', 'src', u);

+			} else {

+				DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok');

+

+				if (f.type == 'confirm')

+					DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel');

+

+				DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'});

+				DOM.setHTML(id + '_content', f.content.replace('\n', '<br />'));

+				

+				Event.add(id, 'keyup', function(evt) {

+					var VK_ESCAPE = 27;

+					if (evt.keyCode === VK_ESCAPE) {

+						f.button_func(false);

+						return Event.cancel(evt);

+					}

+				});

+

+				Event.add(id, 'keydown', function(evt) {

+					var cancelButton, VK_TAB = 9;

+					if (evt.keyCode === VK_TAB) {

+						cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0];

+						if (cancelButton && cancelButton !== evt.target) {

+							cancelButton.focus();

+						} else {

+							DOM.get(id + '_ok').focus();

+						}

+						return Event.cancel(evt);

+					}

+				});

+			}

+

+			// Register events

+			mdf = Event.add(id, 'mousedown', function(e) {

+				var n = e.target, w, vp;

+

+				w = t.windows[id];

+				t.focus(id);

+

+				if (n.nodeName == 'A' || n.nodeName == 'a') {

+					if (n.className == 'mceClose') {

+						t.close(null, id);

+						return Event.cancel(e);

+					} else if (n.className == 'mceMax') {

+						w.oldPos = w.element.getXY();

+						w.oldSize = w.element.getSize();

+

+						vp = DOM.getViewPort();

+

+						// Reduce viewport size to avoid scrollbars

+						vp.w -= 2;

+						vp.h -= 2;

+

+						w.element.moveTo(vp.x, vp.y);

+						w.element.resizeTo(vp.w, vp.h);

+						DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight});

+						DOM.addClass(id + '_wrapper', 'mceMaximized');

+					} else if (n.className == 'mceMed') {

+						// Reset to old size

+						w.element.moveTo(w.oldPos.x, w.oldPos.y);

+						w.element.resizeTo(w.oldSize.w, w.oldSize.h);

+						w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight);

+

+						DOM.removeClass(id + '_wrapper', 'mceMaximized');

+					} else if (n.className == 'mceMove')

+						return t._startDrag(id, e, n.className);

+					else if (DOM.hasClass(n, 'mceResize'))

+						return t._startDrag(id, e, n.className.substring(13));

+				}

+			});

+

+			clf = Event.add(id, 'click', function(e) {

+				var n = e.target;

+

+				t.focus(id);

+

+				if (n.nodeName == 'A' || n.nodeName == 'a') {

+					switch (n.className) {

+						case 'mceClose':

+							t.close(null, id);

+							return Event.cancel(e);

+

+						case 'mceButton mceOk':

+						case 'mceButton mceCancel':

+							f.button_func(n.className == 'mceButton mceOk');

+							return Event.cancel(e);

+					}

+				}

+			});

+			

+			// Make sure the tab order loops within the dialog.

+			Event.add([id + '_left', id + '_right'], 'focus', function(evt) {

+				var iframe = DOM.get(id + '_ifr');

+				if (iframe) {

+					var body = iframe.contentWindow.document.body;

+					var focusable = DOM.select(':input:enabled,*[tabindex=0]', body);

+					if (evt.target.id === (id + '_left')) {

+						focusable[focusable.length - 1].focus();

+					} else {

+						focusable[0].focus();

+					}

+				} else {

+					DOM.get(id + '_ok').focus();

+				}

+			});

+			

+			// Add window

+			w = t.windows[id] = {

+				id : id,

+				mousedown_func : mdf,

+				click_func : clf,

+				element : new Element(id, {blocker : 1, container : ed.getContainer()}),

+				iframeElement : new Element(id + '_ifr'),

+				features : f,

+				deltaWidth : dw,

+				deltaHeight : dh

+			};

+

+			w.iframeElement.on('focus', function() {

+				t.focus(id);

+			});

+

+			// Setup blocker

+			if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') {

+				DOM.add(DOM.doc.body, 'div', {

+					id : 'mceModalBlocker',

+					'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker',

+					style : {zIndex : t.zIndex - 1}

+				});

+

+				DOM.show('mceModalBlocker'); // Reduces flicker in IE

+				DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true');

+			} else

+				DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);

+

+			if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))

+				DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});

+

+			DOM.setAttrib(id, 'aria-hidden', 'false');

+			t.focus(id);

+			t._fixIELayout(id, 1);

+

+			// Focus ok button

+			if (DOM.get(id + '_ok'))

+				DOM.get(id + '_ok').focus();

+			t.count++;

+

+			return w;

+		},

+

+		focus : function(id) {

+			var t = this, w;

+

+			if (w = t.windows[id]) {

+				w.zIndex = this.zIndex++;

+				w.element.setStyle('zIndex', w.zIndex);

+				w.element.update();

+

+				id = id + '_wrapper';

+				DOM.removeClass(t.lastId, 'mceFocus');

+				DOM.addClass(id, 'mceFocus');

+				t.lastId = id;

+				

+				if (w.focussedElement) {

+					w.focussedElement.focus();

+				} else if (DOM.get(id + '_ok')) {

+					DOM.get(w.id + '_ok').focus();

+				} else if (DOM.get(w.id + '_ifr')) {

+					DOM.get(w.id + '_ifr').focus();

+				}

+			}

+		},

+

+		_addAll : function(te, ne) {

+			var i, n, t = this, dom = tinymce.DOM;

+

+			if (is(ne, 'string'))

+				te.appendChild(dom.doc.createTextNode(ne));

+			else if (ne.length) {

+				te = te.appendChild(dom.create(ne[0], ne[1]));

+

+				for (i=2; i<ne.length; i++)

+					t._addAll(te, ne[i]);

+			}

+		},

+

+		_startDrag : function(id, se, ac) {

+			var t = this, mu, mm, d = DOM.doc, eb, w = t.windows[id], we = w.element, sp = we.getXY(), p, sz, ph, cp, vp, sx, sy, sex, sey, dx, dy, dw, dh;

+

+			// Get positons and sizes

+//			cp = DOM.getPos(t.editor.getContainer());

+			cp = {x : 0, y : 0};

+			vp = DOM.getViewPort();

+

+			// Reduce viewport size to avoid scrollbars while dragging

+			vp.w -= 2;

+			vp.h -= 2;

+

+			sex = se.screenX;

+			sey = se.screenY;

+			dx = dy = dw = dh = 0;

+

+			// Handle mouse up

+			mu = Event.add(d, 'mouseup', function(e) {

+				Event.remove(d, 'mouseup', mu);

+				Event.remove(d, 'mousemove', mm);

+

+				if (eb)

+					eb.remove();

+

+				we.moveBy(dx, dy);

+				we.resizeBy(dw, dh);

+				sz = we.getSize();

+				DOM.setStyles(id + '_ifr', {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight});

+				t._fixIELayout(id, 1);

+

+				return Event.cancel(e);

+			});

+

+			if (ac != 'Move')

+				startMove();

+

+			function startMove() {

+				if (eb)

+					return;

+

+				t._fixIELayout(id, 0);

+

+				// Setup event blocker

+				DOM.add(d.body, 'div', {

+					id : 'mceEventBlocker',

+					'class' : 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'),

+					style : {zIndex : t.zIndex + 1}

+				});

+

+				if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))

+					DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});

+

+				eb = new Element('mceEventBlocker');

+				eb.update();

+

+				// Setup placeholder

+				p = we.getXY();

+				sz = we.getSize();

+				sx = cp.x + p.x - vp.x;

+				sy = cp.y + p.y - vp.y;

+				DOM.add(eb.get(), 'div', {id : 'mcePlaceHolder', 'class' : 'mcePlaceHolder', style : {left : sx, top : sy, width : sz.w, height : sz.h}});

+				ph = new Element('mcePlaceHolder');

+			};

+

+			// Handle mouse move/drag

+			mm = Event.add(d, 'mousemove', function(e) {

+				var x, y, v;

+

+				startMove();

+

+				x = e.screenX - sex;

+				y = e.screenY - sey;

+

+				switch (ac) {

+					case 'ResizeW':

+						dx = x;

+						dw = 0 - x;

+						break;

+

+					case 'ResizeE':

+						dw = x;

+						break;

+

+					case 'ResizeN':

+					case 'ResizeNW':

+					case 'ResizeNE':

+						if (ac == "ResizeNW") {

+							dx = x;

+							dw = 0 - x;

+						} else if (ac == "ResizeNE")

+							dw = x;

+

+						dy = y;

+						dh = 0 - y;

+						break;

+

+					case 'ResizeS':

+					case 'ResizeSW':

+					case 'ResizeSE':

+						if (ac == "ResizeSW") {

+							dx = x;

+							dw = 0 - x;

+						} else if (ac == "ResizeSE")

+							dw = x;

+

+						dh = y;

+						break;

+

+					case 'mceMove':

+						dx = x;

+						dy = y;

+						break;

+				}

+

+				// Boundary check

+				if (dw < (v = w.features.min_width - sz.w)) {

+					if (dx !== 0)

+						dx += dw - v;

+

+					dw = v;

+				}

+	

+				if (dh < (v = w.features.min_height - sz.h)) {

+					if (dy !== 0)

+						dy += dh - v;

+

+					dh = v;

+				}

+

+				dw = Math.min(dw, w.features.max_width - sz.w);

+				dh = Math.min(dh, w.features.max_height - sz.h);

+				dx = Math.max(dx, vp.x - (sx + vp.x));

+				dy = Math.max(dy, vp.y - (sy + vp.y));

+				dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x));

+				dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y));

+

+				// Move if needed

+				if (dx + dy !== 0) {

+					if (sx + dx < 0)

+						dx = 0;

+	

+					if (sy + dy < 0)

+						dy = 0;

+

+					ph.moveTo(sx + dx, sy + dy);

+				}

+

+				// Resize if needed

+				if (dw + dh !== 0)

+					ph.resizeTo(sz.w + dw, sz.h + dh);

+

+				return Event.cancel(e);

+			});

+

+			return Event.cancel(se);

+		},

+

+		resizeBy : function(dw, dh, id) {

+			var w = this.windows[id];

+

+			if (w) {

+				w.element.resizeBy(dw, dh);

+				w.iframeElement.resizeBy(dw, dh);

+			}

+		},

+

+		close : function(win, id) {

+			var t = this, w, d = DOM.doc, fw, id;

+

+			id = t._findId(id || win);

+

+			// Probably not inline

+			if (!t.windows[id]) {

+				t.parent(win);

+				return;

+			}

+

+			t.count--;

+

+			if (t.count == 0) {

+				DOM.remove('mceModalBlocker');

+				DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'false');

+				t.editor.focus();

+			}

+

+			if (w = t.windows[id]) {

+				t.onClose.dispatch(t);

+				Event.remove(d, 'mousedown', w.mousedownFunc);

+				Event.remove(d, 'click', w.clickFunc);

+				Event.clear(id);

+				Event.clear(id + '_ifr');

+

+				DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak

+				w.element.remove();

+				delete t.windows[id];

+

+				fw = t._frontWindow();

+

+				if (fw)

+					t.focus(fw.id);

+			}

+		},

+		

+		// Find front most window

+		_frontWindow : function() {

+			var fw, ix = 0;

+			// Find front most window and focus that

+			each (this.windows, function(w) {

+				if (w.zIndex > ix) {

+					fw = w;

+					ix = w.zIndex;

+				}

+			});

+			return fw;

+		},

+

+		setTitle : function(w, ti) {

+			var e;

+

+			w = this._findId(w);

+

+			if (e = DOM.get(w + '_title'))

+				e.innerHTML = DOM.encode(ti);

+		},

+

+		alert : function(txt, cb, s) {

+			var t = this, w;

+

+			w = t.open({

+				title : t,

+				type : 'alert',

+				button_func : function(s) {

+					if (cb)

+						cb.call(s || t, s);

+

+					t.close(null, w.id);

+				},

+				content : DOM.encode(t.editor.getLang(txt, txt)),

+				inline : 1,

+				width : 400,

+				height : 130

+			});

+		},

+

+		confirm : function(txt, cb, s) {

+			var t = this, w;

+

+			w = t.open({

+				title : t,

+				type : 'confirm',

+				button_func : function(s) {

+					if (cb)

+						cb.call(s || t, s);

+

+					t.close(null, w.id);

+				},

+				content : DOM.encode(t.editor.getLang(txt, txt)),

+				inline : 1,

+				width : 400,

+				height : 130

+			});

+		},

+

+		// Internal functions

+

+		_findId : function(w) {

+			var t = this;

+

+			if (typeof(w) == 'string')

+				return w;

+

+			each(t.windows, function(wo) {

+				var ifr = DOM.get(wo.id + '_ifr');

+

+				if (ifr && w == ifr.contentWindow) {

+					w = wo.id;

+					return false;

+				}

+			});

+

+			return w;

+		},

+

+		_fixIELayout : function(id, s) {

+			var w, img;

+

+			if (!tinymce.isIE6)

+				return;

+

+			// Fixes the bug where hover flickers and does odd things in IE6

+			each(['n','s','w','e','nw','ne','sw','se'], function(v) {

+				var e = DOM.get(id + '_resize_' + v);

+

+				DOM.setStyles(e, {

+					width : s ? e.clientWidth : '',

+					height : s ? e.clientHeight : '',

+					cursor : DOM.getStyle(e, 'cursor', 1)

+				});

+

+				DOM.setStyle(id + "_bottom", 'bottom', '-1px');

+

+				e = 0;

+			});

+

+			// Fixes graphics glitch

+			if (w = this.windows[id]) {

+				// Fixes rendering bug after resize

+				w.element.hide();

+				w.element.show();

+

+				// Forced a repaint of the window

+				//DOM.get(id).style.filter = '';

+

+				// IE has a bug where images used in CSS won't get loaded

+				// sometimes when the cache in the browser is disabled

+				// This fix tries to solve it by loading the images using the image object

+				each(DOM.select('div,a', id), function(e, i) {

+					if (e.currentStyle.backgroundImage != 'none') {

+						img = new Image();

+						img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1');

+					}

+				});

+

+				DOM.get(id).style.filter = '';

+			}

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups);

+})();

+

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
@@ -1,1 +1,91 @@
+/* Clearlooks 2 */
 
+/* Reset */
+.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block}
+
+/* General */
+.clearlooks2 {position:absolute; direction:ltr}
+.clearlooks2 .mceWrapper {position:static}
+.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%}
+.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)}
+.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none}
+
+/* Top */
+.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px}
+.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)}
+.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)}
+.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0}
+.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold}
+.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0}
+.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px}
+.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0}
+.clearlooks2 .mceFocus .mceTop span {color:#FFF}
+
+/* Middle */
+.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0}
+.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)}
+.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0}
+.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF}
+.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)}
+
+/* Bottom */
+.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px}
+.clearlooks2 .mceBottom {left:0; bottom:0; width:100%}
+.clearlooks2 .mceBottom div {top:0}
+.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px}
+.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px}
+.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0}
+.clearlooks2 .mceBottom span {display:none}
+.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px}
+.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0}
+.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px}
+.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0}
+.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px}
+
+/* Actions */
+.clearlooks2 a {width:29px; height:16px; top:3px;}
+.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0}
+.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0}
+.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0}
+.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0}
+.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px}
+.clearlooks2 .mceMovable .mceMove {display:block}
+.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px}
+.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px}
+.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px}
+.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px}
+.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
+.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
+.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px}
+.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px}
+.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px}
+
+/* Resize */
+.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px}
+.clearlooks2 .mceResizable .mceResize {display:block}
+.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none}
+.clearlooks2 .mceMinimizable .mceMin {display:block}
+.clearlooks2 .mceMaximizable .mceMax {display:block}
+.clearlooks2 .mceMaximized .mceMed {display:block}
+.clearlooks2 .mceMaximized .mceMax {display:none}
+.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize}
+.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize}
+.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize}
+.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;}
+.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize}
+.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize}
+.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize}
+.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize}
+
+/* Alert/Confirm */
+.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0}
+.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px}
+.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal}
+.clearlooks2 a:hover {font-weight:bold;}
+.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5}
+.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px}
+.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)}
+.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px}
+.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto}
+.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)}
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/inlinepopups/template.htm
@@ -1,1 +1,388 @@
+<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -->

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<title>Template for dialogs</title>

+<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />

+</head>

+<body>

+

+<div class="mceEditor">

+	<div class="clearlooks2" style="width:400px; height:100px; left:10px;">

+		<div class="mceWrapper">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Blured</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:100px; left:420px;">

+		<div class="mceWrapper mceMovable mceFocus">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Focused</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">

+		<div class="mceWrapper mceMovable mceFocus mceStatusbar">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">

+		<div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar, Resizable</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">

+		<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Resizable, Maximizable</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">

+		<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Blurred, Maximizable, Statusbar, Resizable</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">

+		<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Maximized, Maximizable, Minimizable</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">

+		<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Blured</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>Content</span>

+				<div class="mceRight"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Statusbar text.</span>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceMin" href="#"></a>

+			<a class="mceMax" href="#"></a>

+			<a class="mceMed" href="#"></a>

+			<a class="mceClose" href="#"></a>

+			<a class="mceResize mceResizeN" href="#"></a>

+			<a class="mceResize mceResizeS" href="#"></a>

+			<a class="mceResize mceResizeW" href="#"></a>

+			<a class="mceResize mceResizeE" href="#"></a>

+			<a class="mceResize mceResizeNW" href="#"></a>

+			<a class="mceResize mceResizeNE" href="#"></a>

+			<a class="mceResize mceResizeSW" href="#"></a>

+			<a class="mceResize mceResizeSE" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">

+		<div class="mceWrapper mceMovable mceFocus mceModal mceAlert">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Alert</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+				</span>

+				<div class="mceRight"></div>

+				<div class="mceIcon"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceButton mceOk" href="#">Ok</a>

+			<a class="mceClose" href="#"></a>

+		</div>

+	</div>

+

+	<div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">

+		<div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">

+			<div class="mceTop">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+				<span>Confirm</span>

+			</div>

+

+			<div class="mceMiddle">

+				<div class="mceLeft"></div>

+				<span>

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					This is a very long error message. This is a very long error message.

+					</span>

+				<div class="mceRight"></div>

+				<div class="mceIcon"></div>

+			</div>

+

+			<div class="mceBottom">

+				<div class="mceLeft"></div>

+				<div class="mceCenter"></div>

+				<div class="mceRight"></div>

+			</div>

+

+			<a class="mceMove" href="#"></a>

+			<a class="mceButton mceOk" href="#">Ok</a>

+			<a class="mceButton mceCancel" href="#">Cancel</a>

+			<a class="mceClose" href="#"></a>

+		</div>

+	</div>

+</div>

+

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length<d){for(var f=0;f<(d-g.length);f++){g="0"+g}}return g}a=a.replace("%D","%m/%d/%y");a=a.replace("%r","%I:%M:%S %p");a=a.replace("%Y",""+e.getFullYear());a=a.replace("%y",""+e.getYear());a=a.replace("%m",b(e.getMonth()+1,2));a=a.replace("%d",b(e.getDate(),2));a=a.replace("%H",""+b(e.getHours(),2));a=a.replace("%M",""+b(e.getMinutes(),2));a=a.replace("%S",""+b(e.getSeconds(),2));a=a.replace("%I",""+((e.getHours()+11)%12+1));a=a.replace("%p",""+(e.getHours()<12?"AM":"PM"));a=a.replace("%B",""+c.getLang("insertdatetime.months_long").split(",")[e.getMonth()]);a=a.replace("%b",""+c.getLang("insertdatetime.months_short").split(",")[e.getMonth()]);a=a.replace("%A",""+c.getLang("insertdatetime.day_long").split(",")[e.getDay()]);a=a.replace("%a",""+c.getLang("insertdatetime.day_short").split(",")[e.getDay()]);a=a.replace("%%","%");return a}});tinymce.PluginManager.add("insertdatetime",tinymce.plugins.InsertDateTime)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
@@ -1,1 +1,83 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.InsertDateTime', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			ed.addCommand('mceInsertDate', function() {

+				var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_dateFormat", ed.getLang('insertdatetime.date_fmt')));

+

+				ed.execCommand('mceInsertContent', false, str);

+			});

+

+			ed.addCommand('mceInsertTime', function() {

+				var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_timeFormat", ed.getLang('insertdatetime.time_fmt')));

+

+				ed.execCommand('mceInsertContent', false, str);

+			});

+

+			ed.addButton('insertdate', {title : 'insertdatetime.insertdate_desc', cmd : 'mceInsertDate'});

+			ed.addButton('inserttime', {title : 'insertdatetime.inserttime_desc', cmd : 'mceInsertTime'});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Insert date/time',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Private methods

+

+		_getDateTime : function(d, fmt) {

+			var ed = this.editor;

+

+			function addZeros(value, len) {

+				value = "" + value;

+

+				if (value.length < len) {

+					for (var i=0; i<(len-value.length); i++)

+						value = "0" + value;

+				}

+

+				return value;

+			};

+

+			fmt = fmt.replace("%D", "%m/%d/%y");

+			fmt = fmt.replace("%r", "%I:%M:%S %p");

+			fmt = fmt.replace("%Y", "" + d.getFullYear());

+			fmt = fmt.replace("%y", "" + d.getYear());

+			fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));

+			fmt = fmt.replace("%d", addZeros(d.getDate(), 2));

+			fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));

+			fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));

+			fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));

+			fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));

+			fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));

+			fmt = fmt.replace("%B", "" + ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);

+			fmt = fmt.replace("%b", "" + ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);

+			fmt = fmt.replace("%A", "" + ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);

+			fmt = fmt.replace("%a", "" + ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);

+			fmt = fmt.replace("%%", "%");

+

+			return fmt;

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('insertdatetime', tinymce.plugins.InsertDateTime);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/layer/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){function a(b){do{if(b.className&&b.className.indexOf("mceItemLayer")!=-1){return b}}while(b=b.parentNode)}tinymce.create("tinymce.plugins.Layer",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceInsertLayer",d._insertLayer,d);b.addCommand("mceMoveForward",function(){d._move(1)});b.addCommand("mceMoveBackward",function(){d._move(-1)});b.addCommand("mceMakeAbsolute",function(){d._toggleAbsolute()});b.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});b.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});b.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});b.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});b.onInit.add(function(){var e=b.dom;if(tinymce.isIE){b.getDoc().execCommand("2D-Position",false,true)}});b.onMouseUp.add(function(f,h){var g=a(h.target);if(g){f.dom.setAttrib(g,"data-mce-style","")}});b.onMouseDown.add(function(f,j){var h=j.target,i=f.getDoc(),g;if(tinymce.isGecko){if(a(h)){if(i.designMode!=="on"){i.designMode="on";h=i.body;g=h.parentNode;g.removeChild(h);g.appendChild(h)}}else{if(i.designMode=="on"){i.designMode="off"}}}});b.onNodeChange.add(d._nodeChange,d);b.onVisualAid.add(d._visualAid,d)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(c,b,f){var d,e;d=this._getParentLayer(f);e=c.dom.getParent(f,"DIV,P,IMG");if(!e){b.setDisabled("absolute",1);b.setDisabled("moveforward",1);b.setDisabled("movebackward",1)}else{b.setDisabled("absolute",0);b.setDisabled("moveforward",!d);b.setDisabled("movebackward",!d);b.setActive("absolute",d&&d.style.position.toLowerCase()=="absolute")}},_visualAid:function(b,d,c){var f=b.dom;tinymce.each(f.select("div,p",d),function(g){if(/^(absolute|relative|fixed)$/i.test(g.style.position)){if(c){f.addClass(g,"mceItemVisualAid")}else{f.removeClass(g,"mceItemVisualAid")}f.addClass(g,"mceItemLayer")}})},_move:function(j){var c=this.editor,g,h=[],f=this._getParentLayer(c.selection.getNode()),e=-1,k=-1,b;b=[];tinymce.walk(c.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){b.push(d)}},"childNodes");for(g=0;g<b.length;g++){h[g]=b[g].style.zIndex?parseInt(b[g].style.zIndex):0;if(e<0&&b[g]==f){e=g}}if(j<0){for(g=0;g<h.length;g++){if(h[g]<h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;g<h.length;g++){if(h[g]>h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js
@@ -1,1 +1,262 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	function findParentLayer(node) {

+		do {

+			if (node.className && node.className.indexOf('mceItemLayer') != -1) {

+				return node;

+			}

+		} while (node = node.parentNode);

+	};

+

+	tinymce.create('tinymce.plugins.Layer', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceInsertLayer', t._insertLayer, t);

+

+			ed.addCommand('mceMoveForward', function() {

+				t._move(1);

+			});

+

+			ed.addCommand('mceMoveBackward', function() {

+				t._move(-1);

+			});

+

+			ed.addCommand('mceMakeAbsolute', function() {

+				t._toggleAbsolute();

+			});

+

+			// Register buttons

+			ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});

+			ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});

+			ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});

+			ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});

+

+			ed.onInit.add(function() {

+				var dom = ed.dom;

+

+				if (tinymce.isIE)

+					ed.getDoc().execCommand('2D-Position', false, true);

+			});

+

+			// Remove serialized styles when selecting a layer since it might be changed by a drag operation

+			ed.onMouseUp.add(function(ed, e) {

+				var layer = findParentLayer(e.target);

+	

+				if (layer) {

+					ed.dom.setAttrib(layer, 'data-mce-style', '');

+				}

+			});

+

+			// Fixes edit focus issues with layers on Gecko

+			// This will enable designMode while inside a layer and disable it when outside

+			ed.onMouseDown.add(function(ed, e) {

+				var node = e.target, doc = ed.getDoc(), parent;

+

+				if (tinymce.isGecko) {

+					if (findParentLayer(node)) {

+						if (doc.designMode !== 'on') {

+							doc.designMode = 'on';

+

+							// Repaint caret

+							node = doc.body;

+							parent = node.parentNode;

+							parent.removeChild(node);

+							parent.appendChild(node);

+						}

+					} else if (doc.designMode == 'on') {

+						doc.designMode = 'off';

+					}

+				}

+			});

+

+			ed.onNodeChange.add(t._nodeChange, t);

+			ed.onVisualAid.add(t._visualAid, t);

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Layer',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Private methods

+

+		_nodeChange : function(ed, cm, n) {

+			var le, p;

+

+			le = this._getParentLayer(n);

+			p = ed.dom.getParent(n, 'DIV,P,IMG');

+

+			if (!p) {

+				cm.setDisabled('absolute', 1);

+				cm.setDisabled('moveforward', 1);

+				cm.setDisabled('movebackward', 1);

+			} else {

+				cm.setDisabled('absolute', 0);

+				cm.setDisabled('moveforward', !le);

+				cm.setDisabled('movebackward', !le);

+				cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");

+			}

+		},

+

+		// Private methods

+

+		_visualAid : function(ed, e, s) {

+			var dom = ed.dom;

+

+			tinymce.each(dom.select('div,p', e), function(e) {

+				if (/^(absolute|relative|fixed)$/i.test(e.style.position)) {

+					if (s)

+						dom.addClass(e, 'mceItemVisualAid');

+					else

+						dom.removeClass(e, 'mceItemVisualAid');

+

+					dom.addClass(e, 'mceItemLayer');

+				}

+			});

+		},

+

+		_move : function(d) {

+			var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;

+

+			nl = [];

+			tinymce.walk(ed.getBody(), function(n) {

+				if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))

+					nl.push(n); 

+			}, 'childNodes');

+

+			// Find z-indexes

+			for (i=0; i<nl.length; i++) {

+				z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;

+

+				if (ci < 0 && nl[i] == le)

+					ci = i;

+			}

+

+			if (d < 0) {

+				// Move back

+

+				// Try find a lower one

+				for (i=0; i<z.length; i++) {

+					if (z[i] < z[ci]) {

+						fi = i;

+						break;

+					}

+				}

+

+				if (fi > -1) {

+					nl[ci].style.zIndex = z[fi];

+					nl[fi].style.zIndex = z[ci];

+				} else {

+					if (z[ci] > 0)

+						nl[ci].style.zIndex = z[ci] - 1;

+				}

+			} else {

+				// Move forward

+

+				// Try find a higher one

+				for (i=0; i<z.length; i++) {

+					if (z[i] > z[ci]) {

+						fi = i;

+						break;

+					}

+				}

+

+				if (fi > -1) {

+					nl[ci].style.zIndex = z[fi];

+					nl[fi].style.zIndex = z[ci];

+				} else

+					nl[ci].style.zIndex = z[ci] + 1;

+			}

+

+			ed.execCommand('mceRepaint');

+		},

+

+		_getParentLayer : function(n) {

+			return this.editor.dom.getParent(n, function(n) {

+				return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);

+			});

+		},

+

+		_insertLayer : function() {

+			var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody();

+

+			ed.dom.add(body, 'div', {

+				style : {

+					position : 'absolute',

+					left : p.x,

+					top : (p.y > 20 ? p.y : 20),

+					width : 100,

+					height : 100

+				},

+				'class' : 'mceItemVisualAid mceItemLayer'

+			}, ed.selection.getContent() || ed.getLang('layer.content'));

+

+			// Workaround for IE where it messes up the JS engine if you insert a layer on IE 6,7

+			if (tinymce.isIE)

+				dom.setHTML(body, body.innerHTML);

+		},

+

+		_toggleAbsolute : function() {

+			var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());

+

+			if (!le)

+				le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');

+

+			if (le) {

+				if (le.style.position.toLowerCase() == "absolute") {

+					ed.dom.setStyles(le, {

+						position : '',

+						left : '',

+						top : '',

+						width : '',

+						height : ''

+					});

+

+					ed.dom.removeClass(le, 'mceItemVisualAid');

+					ed.dom.removeClass(le, 'mceItemLayer');

+				} else {

+					if (le.style.left == "")

+						le.style.left = 20 + 'px';

+

+					if (le.style.top == "")

+						le.style.top = 20 + 'px';

+

+					if (le.style.width == "")

+						le.style.width = le.width ? (le.width + 'px') : '100px';

+

+					if (le.style.height == "")

+						le.style.height = le.height ? (le.height + 'px') : '100px';

+

+					le.style.position = "absolute";

+

+					ed.dom.setAttrib(le, 'data-mce-style', '');

+					ed.addVisual(ed.getBody());

+				}

+

+				ed.execCommand('mceRepaint');

+				ed.nodeChanged();

+			}

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('layer', tinymce.plugins.Layer);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js
@@ -1,1 +1,140 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ *

+ * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align

+ * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash

+ *

+ * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are

+ * not apart of the newer specifications for HTML and XHTML.

+ */

+

+(function(tinymce) {

+	// Override inline_styles setting to force TinyMCE to produce deprecated contents

+	tinymce.onAddEditor.addToTop(function(tinymce, editor) {

+		editor.settings.inline_styles = false;

+	});

+

+	// Create the legacy ouput plugin

+	tinymce.create('tinymce.plugins.LegacyOutput', {

+		init : function(editor) {

+			editor.onInit.add(function() {

+				var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',

+					fontSizes = tinymce.explode(editor.settings.font_size_style_values),

+					schema = editor.schema;

+

+				// Override some internal formats to produce legacy elements and attributes

+				editor.formatter.register({

+					// Change alignment formats to use the deprecated align attribute

+					alignleft : {selector : alignElements, attributes : {align : 'left'}},

+					aligncenter : {selector : alignElements, attributes : {align : 'center'}},

+					alignright : {selector : alignElements, attributes : {align : 'right'}},

+					alignfull : {selector : alignElements, attributes : {align : 'justify'}},

+

+					// Change the basic formatting elements to use deprecated element types
+					bold : [

+						{inline : 'b', remove : 'all'},

+						{inline : 'strong', remove : 'all'},

+						{inline : 'span', styles : {fontWeight : 'bold'}}

+					],

+					italic : [

+						{inline : 'i', remove : 'all'},

+						{inline : 'em', remove : 'all'},

+						{inline : 'span', styles : {fontStyle : 'italic'}}

+					],

+					underline : [

+						{inline : 'u', remove : 'all'},

+						{inline : 'span', styles : {textDecoration : 'underline'}, exact : true}

+					],

+					strikethrough : [

+						{inline : 'strike', remove : 'all'},

+						{inline : 'span', styles : {textDecoration: 'line-through'}, exact : true}

+					],
+

+					// Change font size and font family to use the deprecated font element

+					fontname : {inline : 'font', attributes : {face : '%value'}},

+					fontsize : {

+						inline : 'font',

+						attributes : {

+							size : function(vars) {

+								return tinymce.inArray(fontSizes, vars.value) + 1;

+							}

+						}

+					},

+

+					// Setup font elements for colors as well

+					forecolor : {inline : 'font', styles : {color : '%value'}},

+					hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}

+				});

+

+				// Check that deprecated elements are allowed if not add them

+				tinymce.each('b,i,u,strike'.split(','), function(name) {

+					schema.addValidElements(name + '[*]');

+				});

+

+				// Add font element if it's missing

+				if (!schema.getElementRule("font"))

+					schema.addValidElements("font[face|size|color|style]");

+

+				// Add the missing and depreacted align attribute for the serialization engine

+				tinymce.each(alignElements.split(','), function(name) {

+					var rule = schema.getElementRule(name), found;

+

+					if (rule) {

+						if (!rule.attributes.align) {

+							rule.attributes.align = {};

+							rule.attributesOrder.push('align');

+						}

+					}

+				});

+

+				// Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes

+				editor.onNodeChange.add(function(editor, control_manager) {

+					var control, fontElm, fontName, fontSize;

+

+					// Find font element get it's name and size

+					fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');

+					if (fontElm) {

+						fontName = fontElm.face;

+						fontSize = fontElm.size;

+					}

+

+					// Select/unselect the font name in droplist

+					if (control = control_manager.get('fontselect')) {

+						control.select(function(value) {

+							return value == fontName;

+						});

+					}

+

+					// Select/unselect the font size in droplist

+					if (control = control_manager.get('fontsizeselect')) {

+						control.select(function(value) {

+							var index = tinymce.inArray(fontSizes, value.fontSize);

+

+							return index + 1 == fontSize;

+						});

+					}

+				});

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'LegacyOutput',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput);

+})(tinymce);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/lists/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{return v&&u.tagName==="P"&&t.tagName==="P"}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(y){var v="TABBING";var s="EMPTY";var I="ESCAPE";var z="PARAGRAPH";var M="UNKNOWN";var x=M;function E(U){return U.keyCode===tinymce.VK.TAB&&!(U.altKey||U.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function D(){var U=y.selection.getRng();var V=U.startContainer;if(V.nodeType==3){return(U.endOffset==V.nodeValue.length)}else{if(V.nodeType==1){return U.endOffset==V.childNodes.length}}return false}function N(){var V=y.selection.getNode();var U=V.tagName==="P"&&V.parentNode.tagName==="LI"&&V.parentNode.lastChild===V;return y.selection.isCollapsed()&&U&&D()}function w(){var U=B();var W=U.parentNode.parentNode;var V=U.parentNode.lastChild===U;return V&&!t(W)&&P(U)}function t(U){if(n(U)){return U.parentNode&&U.parentNode.tagName==="LI"}else{return U.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&P(B())}function B(){var U=y.selection.getStart();return((U.tagName=="BR"||U.tagName=="")&&U.parentNode.tagName=="LI")?U.parentNode:U}function P(U){var V=U.childNodes.length;if(U.tagName==="LI"){return V==0?true:V==1&&(U.firstChild.tagName==""||U.firstChild.tagName=="BR"||H(U))}return false}function H(U){var V=tinymce.grep(U.parentNode.childNodes,function(Y){return Y.tagName=="LI"});var W=U==V[V.length-1];var X=U.firstChild;return tinymce.isIE9&&W&&(X.nodeValue==String.fromCharCode(160)||X.nodeValue==String.fromCharCode(32))}function T(U){return U.keyCode===tinymce.VK.ENTER}function A(U){return T(U)&&!U.shiftKey}function L(U){if(E(U)){return v}else{if(A(U)&&w()){return I}else{if(A(U)&&F()){return s}else{if(A(U)&&N()){return z}else{return M}}}}}function C(U,V){if(x==v||x==s||tinymce.isGecko&&x==I){r.cancel(V)}}function J(W,Y){if(x==z){var X=W.selection.getNode();var V=W.dom.create("li");var U=W.dom.getParent(X,"li");W.dom.insertAfter(V,U);if(tinyMCE.isIE8){V.appendChild(W.dom.create("&nbsp;"));W.selection.setCursorLocation(V,1)}else{if(tinyMCE.isGecko){setTimeout(function(){var Z=W.getDoc().createTextNode("\uFEFF");V.appendChild(Z);W.selection.setCursorLocation(V,0)},0)}else{W.selection.setCursorLocation(V,0)}}r.cancel(Y)}}function u(X,Z){var ac;if(!tinymce.isGecko){return}var V=X.selection.getStart();if(Z.keyCode!=tinymce.VK.BACKSPACE||V.tagName!=="IMG"){return}function W(ag){var ah=ag.firstChild;var af=null;do{if(!ah){break}if(ah.tagName==="LI"){af=ah}}while(ah=ah.nextSibling);return af}function ae(ag,af){while(ag.childNodes.length>0){af.appendChild(ag.childNodes[0])}}ac=V.parentNode.previousSibling;if(!ac){return}var aa;if(ac.tagName==="UL"||ac.tagName==="OL"){aa=ac}else{if(ac.previousSibling&&(ac.previousSibling.tagName==="UL"||ac.previousSibling.tagName==="OL")){aa=ac.previousSibling}else{return}}var ad=W(aa);var U=X.dom.createRng();U.setStart(ad,1);U.setEnd(ad,1);X.selection.setRng(U);X.selection.collapse(true);var Y=X.selection.getBookmark();var ab=V.parentNode.cloneNode(true);if(ab.tagName==="P"||ab.tagName==="DIV"){ae(ab,ad)}else{ad.appendChild(ab)}V.parentNode.parentNode.removeChild(V.parentNode);X.selection.moveToBookmark(Y)}function G(U){var V=y.dom.getParent(U,"ol,ul");if(V!=null){var W=V.lastChild;W.appendChild(y.getDoc().createElement(""));y.selection.setCursorLocation(W,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var V=y.selection,W=y.dom;function U(X){X=W.getParent(X,W.isBlock);return X&&(parseInt(y.dom.getStyle(X,"margin-left")||0,10)+parseInt(y.dom.getStyle(X,"padding-left")||0,10))>0}return U(V.getStart())||U(V.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(V,W){if(x==v){V.execCommand(W.shiftKey?"Outdent":"Indent",true,null);x=M;return r.cancel(W)}else{if(x==s){var U=B();var Y=V.settings.list_outdent_on_enter===true||W.shiftKey;V.execCommand(Y?"Outdent":"Indent",true,null);if(tinymce.isIE){G(U)}return r.cancel(W)}else{if(x==I){if(tinymce.isIE8){var X=V.getDoc().createTextNode("\uFEFF");V.selection.getNode().appendChild(X)}else{if(tinymce.isIE9||tinymce.isGecko){V.execCommand("Outdent");return r.cancel(W)}}}}}});function K(V,U){var W=y.getDoc().createTextNode("\uFEFF");V.insertBefore(W,U);y.selection.setCursorLocation(W,0);y.execCommand("mceRepaint")}function R(V,X){if(T(X)){var U=B();if(U){var W=U.parentNode;var Y=W&&W.parentNode;if(Y&&Y.nodeName=="LI"&&Y.firstChild==W&&U==W.firstChild){K(Y,W)}}}}function S(V,X){if(T(X)){var U=B();if(V.dom.select("ul li",U).length===1){var W=U.firstChild;K(U,W)}}}function Q(V,Z){function W(ad,aa){var ac=[];var ae=new tinymce.dom.TreeWalker(aa,ad);for(var ab=ae.current();ab;ab=ae.next()){if(V.dom.is(ab,"ol,ul,li")){ac.push(ab)}}return ac}if(Z.keyCode==tinymce.VK.BACKSPACE){var U=B();if(U){var Y=V.dom.getParent(U,"ol,ul");if(Y&&Y.firstChild===U){var X=W(Y,U);V.execCommand("Outdent",false,X);V.undoManager.add();return r.cancel(Z)}}}}function O(V,X){var U=B();if(X.keyCode===tinymce.VK.BACKSPACE&&V.dom.is(U,"li")&&U.parentNode.firstChild!==U){if(V.dom.select("ul,ol",U).length===1){var Z=U.previousSibling;V.dom.remove(V.dom.select("br",U));V.dom.remove(U,true);var W=tinymce.grep(Z.childNodes,function(aa){return aa.nodeType===3});if(W.length===1){var Y=W[0];V.selection.setCursorLocation(Y,Y.length)}V.undoManager.add();return r.cancel(X)}}}y.onKeyDown.add(function(U,V){x=L(V)});y.onKeyDown.add(C);y.onKeyDown.add(u);y.onKeyDown.add(J);if(tinymce.isGecko){y.onKeyUp.add(R)}if(tinymce.isIE8){y.onKeyUp.add(S)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(Q)}if(tinymce.isWebKit){y.onKeyDown.add(O)}},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(M.tagName==="P"||G.length>1)){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true)}return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}if(t.childNodes.length===0){t.innerHTML='<br _mce_bogus="1" />'}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w&&!H||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks()}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x)}function C(s,t){return t>=0&&s.hasChildNodes()&&t<s.childNodes.length&&s.childNodes[t].tagName==="BR"}function D(){var t=w.getNode();var s=z.getParent(t,"td");return s!==null}E=y.elements;u=w.getRng(true);if(!u.collapsed){if(C(u.endContainer,u.endOffset-1)){u.setEnd(u.endContainer,u.endOffset-1);w.setRng(u)}if(C(u.startContainer,u.startOffset)){u.setStart(u.startContainer,u.startOffset+1);w.setRng(u)}}if(tinymce.isIE8){var G=F.ed.selection.getNode();if(G.tagName==="LI"&&!(G.parentNode.lastChild===G)){var A=F.ed.getDoc().createTextNode("\uFEFF");G.appendChild(A)}}g=w.getBookmark();y.OL=y.UL=v;F.splitSafeEach(E,x);w.moveToBookmark(g);g=null;if(!D()){F.ed.execCommand("mceRepaint")}},splitSafeEach:function(t,s){if(tinymce.isGecko&&(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent)||/Firefox\/3\.[0-4]/.test(navigator.userAgent))){this.classBasedEach(t,s)}else{e(t,s)}},classBasedEach:function(v,u){var w=this.ed.dom,s,t;e(v,function(x){w.addClass(x,"_mce_act_on")});s=w.select("._mce_act_on");while(s.length>0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},selectedBlocks:function(){var s=this.ed;var t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}());

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
@@ -1,1 +1,947 @@
-
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2011, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+	var each = tinymce.each, Event = tinymce.dom.Event, bookmark;
+
+	// Skips text nodes that only contain whitespace since they aren't semantically important.
+	function skipWhitespaceNodes(e, next) {
+		while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) {
+			e = next(e);
+		}
+		return e;
+	}
+
+	function skipWhitespaceNodesBackwards(e) {
+		return skipWhitespaceNodes(e, function(e) {
+			return e.previousSibling;
+		});
+	}
+
+	function skipWhitespaceNodesForwards(e) {
+		return skipWhitespaceNodes(e, function(e) {
+			return e.nextSibling;
+		});
+	}
+
+	function hasParentInList(ed, e, list) {
+		return ed.dom.getParent(e, function(p) {
+			return tinymce.inArray(list, p) !== -1;
+		});
+	}
+
+	function isList(e) {
+		return e && (e.tagName === 'OL' || e.tagName === 'UL');
+	}
+
+	function splitNestedLists(element, dom) {
+		var tmp, nested, wrapItem;
+		tmp = skipWhitespaceNodesBackwards(element.lastChild);
+		while (isList(tmp)) {
+			nested = tmp;
+			tmp = skipWhitespaceNodesBackwards(nested.previousSibling);
+		}
+		if (nested) {
+			wrapItem = dom.create('li', { style: 'list-style-type: none;'});
+			dom.split(element, nested);
+			dom.insertAfter(wrapItem, nested);
+			wrapItem.appendChild(nested);
+			wrapItem.appendChild(nested);
+			element = wrapItem.previousSibling;
+		}
+		return element;
+	}
+
+	function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) {
+		e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs);
+		return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs);
+	}
+
+	function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) {
+		var prev = skipWhitespaceNodesBackwards(e.previousSibling);
+		if (prev) {
+			return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs);
+		} else {
+			return e;
+		}
+	}
+
+	function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) {
+		var next = skipWhitespaceNodesForwards(e.nextSibling);
+		if (next) {
+			return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs);
+		} else {
+			return e;
+		}
+	}
+
+	function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) {
+		if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) {
+			return merge(e1, e2, differentStylesMasterElement);
+		} else if (e1 && e1.tagName === 'LI' && isList(e2)) {
+			// Fix invalidly nested lists.
+			e1.appendChild(e2);
+		}
+		return e2;
+	}
+
+	function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) {
+		if (!e1 || !e2) {
+			return false;
+		} else if (e1.tagName === 'LI' && e2.tagName === 'LI') {
+			return e2.style.listStyleType === 'none' || containsOnlyAList(e2);
+		} else if (isList(e1)) {
+			return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2);
+		} else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P';
+	}
+
+	function isListForIndent(e) {
+		var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild);
+		return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI));
+	}
+
+	function containsOnlyAList(e) {
+		var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild);
+		return firstChild && lastChild && firstChild === lastChild && isList(firstChild);
+	}
+
+	function merge(e1, e2, masterElement) {
+		var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild);
+		if (e1.tagName === 'P') {
+			e1.appendChild(e1.ownerDocument.createElement('br'));
+		}
+		while (e2.firstChild) {
+			e1.appendChild(e2.firstChild);
+		}
+		if (masterElement) {
+			e1.style.listStyleType = masterElement.style.listStyleType;
+		}
+		e2.parentNode.removeChild(e2);
+		attemptMerge(lastOriginal, firstNew, false);
+		return e1;
+	}
+
+	function findItemToOperateOn(e, dom) {
+		var item;
+		if (!dom.is(e, 'li,ol,ul')) {
+			item = dom.getParent(e, 'li');
+			if (item) {
+				e = item;
+			}
+		}
+		return e;
+	}
+
+	tinymce.create('tinymce.plugins.Lists', {
+		init: function(ed) {
+			var LIST_TABBING = 'TABBING';
+			var LIST_EMPTY_ITEM = 'EMPTY';
+			var LIST_ESCAPE = 'ESCAPE';
+			var LIST_PARAGRAPH = 'PARAGRAPH';
+			var LIST_UNKNOWN = 'UNKNOWN';
+			var state = LIST_UNKNOWN;
+
+			function isTabInList(e) {
+                // Don't indent on Ctrl+Tab or Alt+Tab
+				return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) &&
+					(ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
+			}
+
+            function isCursorAtEndOfContainer() {
+				var range = ed.selection.getRng();
+                var startContainer = range.startContainer;
+                if (startContainer.nodeType == 3) {
+                    return (range.endOffset == startContainer.nodeValue.length);
+                } else if (startContainer.nodeType == 1) {
+                    return range.endOffset == startContainer.childNodes.length;
+                }
+                return false;
+            }
+			
+            // If we are at the end of a paragraph in a list item, pressing enter should create a new list item instead of a new paragraph.
+            function isEndOfParagraph() {
+				var node = ed.selection.getNode();
+				var isLastParagraphOfLi = node.tagName === 'P' && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
+				return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
+			}
+
+			function isOnLastListItem() {
+				var li = getLi();
+				var grandParent = li.parentNode.parentNode;
+				var isLastItem = li.parentNode.lastChild === li;
+				return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li);
+			}
+
+			function isNestedList(grandParent) {
+				if (isList(grandParent)) {
+					return grandParent.parentNode && grandParent.parentNode.tagName === 'LI';
+				} else {
+					return  grandParent.tagName === 'LI';
+				}
+			}
+
+			function isInEmptyListItem() {
+				return ed.selection.isCollapsed() && isEmptyListItem(getLi());
+			}
+
+			function getLi() {
+				var n = ed.selection.getStart();
+				// Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position
+				return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n;
+			}
+
+			function isEmptyListItem(li) {
+				var numChildren = li.childNodes.length;
+				if (li.tagName === 'LI') {
+					return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li));
+				}
+				return false;
+			}
+
+			function isEmptyIE9Li(li) {
+				// only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these
+				var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'});
+				var isLastLi = li == lis[lis.length - 1];
+				var child = li.firstChild;
+				return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32));
+			}
+
+			function isEnter(e) {
+				return e.keyCode === tinymce.VK.ENTER;
+            }
+
+            function isEnterWithoutShift(e) {
+                return isEnter(e) && !e.shiftKey;
+            }
+
+			function getListKeyState(e) {
+				if (isTabInList(e)) {
+					return LIST_TABBING;
+				} else if (isEnterWithoutShift(e) && isOnLastListItem()) {
+					return LIST_ESCAPE;
+				} else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
+					return LIST_EMPTY_ITEM;
+				} else if (isEnterWithoutShift(e) && isEndOfParagraph()) {
+                    return LIST_PARAGRAPH;
+                } else {
+					return LIST_UNKNOWN;
+				}
+			}
+
+			function cancelDefaultEvents(ed, e) {
+				// list escape is done manually using outdent as it does not create paragraphs correctly in td's
+				if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) {
+					Event.cancel(e);
+				}
+			}
+			
+            // Creates a new list item after the current selection's list item parent
+            function createNewLi(ed, e) {
+                if (state == LIST_PARAGRAPH) {
+					var node = ed.selection.getNode();
+					var li = ed.dom.create("li");
+					var parentLi = ed.dom.getParent(node, 'li');
+					ed.dom.insertAfter(li, parentLi);
+
+                    // Move caret to new list element.
+                    if (tinyMCE.isIE8) {
+                        li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
+                        ed.selection.setCursorLocation(li, 1);
+                    } else if (tinyMCE.isGecko) {
+                        // This setTimeout is a hack as FF behaves badly if there is no content after the bullet point
+                        setTimeout(function () {
+							var n = ed.getDoc().createTextNode('\uFEFF');
+                            li.appendChild(n);
+                            ed.selection.setCursorLocation(li, 0);
+                        }, 0);
+                    } else {
+                        ed.selection.setCursorLocation(li, 0);
+                    }
+					Event.cancel(e);
+				}
+            }
+
+			function imageJoiningListItem(ed, e) {
+				var prevSibling;
+
+				if (!tinymce.isGecko)
+					return;
+
+				var n = ed.selection.getStart();
+				if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG')
+					return;
+
+				function lastLI(node) {
+					var child = node.firstChild;
+					var li = null;
+					do {
+						if (!child)
+							break;
+
+						if (child.tagName === 'LI')
+							li = child;
+					} while (child = child.nextSibling);
+
+					return li;
+				}
+
+				function addChildren(parentNode, destination) {
+					while (parentNode.childNodes.length > 0)
+						destination.appendChild(parentNode.childNodes[0]);
+				}
+
+				// Check if there is a previous sibling
+				prevSibling = n.parentNode.previousSibling;
+				if (!prevSibling)
+					return;
+
+				var ul;
+				if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL')
+					ul = prevSibling;
+				else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL'))
+					ul = prevSibling.previousSibling;
+				else
+					return;
+
+				var li = lastLI(ul);
+
+				// move the caret to the end of the list item
+				var rng = ed.dom.createRng();
+				rng.setStart(li, 1);
+				rng.setEnd(li, 1);
+				ed.selection.setRng(rng);
+				ed.selection.collapse(true);
+
+				// save a bookmark at the end of the list item
+				var bookmark = ed.selection.getBookmark();
+
+				// copy the image an its text to the list item
+				var clone = n.parentNode.cloneNode(true);
+				if (clone.tagName === 'P' || clone.tagName === 'DIV')
+					addChildren(clone, li);
+				else
+					li.appendChild(clone);
+
+				// remove the old copy of the image
+				n.parentNode.parentNode.removeChild(n.parentNode);
+
+				// move the caret where we saved the bookmark
+				ed.selection.moveToBookmark(bookmark);
+			}
+
+			// fix the cursor position to ensure it is correct in IE
+			function setCursorPositionToOriginalLi(li) {
+				var list = ed.dom.getParent(li, 'ol,ul');
+				if (list != null) {
+					var lastLi = list.lastChild;
+					lastLi.appendChild(ed.getDoc().createElement(''));
+					ed.selection.setCursorLocation(lastLi, 0);
+				}
+			}
+
+			this.ed = ed;
+			ed.addCommand('Indent', this.indent, this);
+			ed.addCommand('Outdent', this.outdent, this);
+			ed.addCommand('InsertUnorderedList', function() {
+				this.applyList('UL', 'OL');
+			}, this);
+			ed.addCommand('InsertOrderedList', function() {
+				this.applyList('OL', 'UL');
+			}, this);
+
+			ed.onInit.add(function() {
+				ed.editorCommands.addCommands({
+					'outdent': function() {
+						var sel = ed.selection, dom = ed.dom;
+
+						function hasStyleIndent(n) {
+							n = dom.getParent(n, dom.isBlock);
+							return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0;
+						}
+
+						return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList');
+					}
+				}, 'state');
+			});
+
+			ed.onKeyUp.add(function(ed, e) {
+				if (state == LIST_TABBING) {
+					ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
+                    state = LIST_UNKNOWN;
+                    return Event.cancel(e);
+				} else if (state == LIST_EMPTY_ITEM) {
+					var li = getLi();
+					var shouldOutdent =  ed.settings.list_outdent_on_enter === true || e.shiftKey;
+					ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null);
+					if (tinymce.isIE) {
+						setCursorPositionToOriginalLi(li);
+					}
+
+					return Event.cancel(e);
+				} else if (state == LIST_ESCAPE) {
+					if (tinymce.isIE8) {
+						// append a zero sized nbsp so that caret is positioned correctly in IE8 after escaping and applying formatting.
+						// if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after
+						// escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag.
+						var n = ed.getDoc().createTextNode('\uFEFF');
+						ed.selection.getNode().appendChild(n);
+					} else if (tinymce.isIE9 || tinymce.isGecko) {
+						// IE9 does not escape the list so we use outdent to do this and cancel the default behaviour
+						// Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves
+						ed.execCommand('Outdent');
+						return Event.cancel(e);
+                    }
+				}
+			});
+
+			function fixListItem(parent, reference) {
+				// a zero-sized non-breaking space is placed in the empty list item so that the nested list is
+				// displayed on the below line instead of next to it
+				var n = ed.getDoc().createTextNode('\uFEFF');
+				parent.insertBefore(n, reference);
+				ed.selection.setCursorLocation(n, 0);
+				// repaint to remove rendering artifact. only visible when creating new list
+				ed.execCommand('mceRepaint');
+			}
+
+			function fixIndentedListItemForGecko(ed, e) {
+				if (isEnter(e)) {
+					var li = getLi();
+					if (li) {
+						var parent = li.parentNode;
+						var grandParent = parent && parent.parentNode;
+						if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) {
+							fixListItem(grandParent, parent);
+						}
+					}
+				}
+			}
+
+			function fixIndentedListItemForIE8(ed, e) {
+				if (isEnter(e)) {
+					var li = getLi();
+					if (ed.dom.select('ul li', li).length === 1) {
+						var list = li.firstChild;
+						fixListItem(li, list);
+					}
+				}
+			}
+
+			function fixDeletingFirstCharOfList(ed, e) {
+				function listElements(list, li) {
+					var elements = [];
+					var walker = new tinymce.dom.TreeWalker(li, list);
+					for (var node = walker.current(); node; node = walker.next()) {
+						if (ed.dom.is(node, 'ol,ul,li')) {
+							elements.push(node);
+						}
+					}
+					return elements;
+				}
+
+				if (e.keyCode == tinymce.VK.BACKSPACE) {
+					var li = getLi();
+					if (li) {
+						var list = ed.dom.getParent(li, 'ol,ul');
+						if (list && list.firstChild === li) {
+							var elements = listElements(list, li);
+							ed.execCommand("Outdent", false, elements);
+							ed.undoManager.add();
+							return Event.cancel(e);
+						}
+					}
+				}
+			}
+
+			function fixDeletingEmptyLiInWebkit(ed, e) {
+				var li = getLi();
+				if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) {
+					if (ed.dom.select('ul,ol', li).length === 1) {
+						var prevLi = li.previousSibling;
+						ed.dom.remove(ed.dom.select('br', li));
+						ed.dom.remove(li, true);
+						var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 });
+						if (textNodes.length === 1) {
+							var textNode = textNodes[0]
+							ed.selection.setCursorLocation(textNode, textNode.length);
+						}
+						ed.undoManager.add();
+						return Event.cancel(e);
+					}
+				}
+			}
+
+			ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); });
+			ed.onKeyDown.add(cancelDefaultEvents);
+			ed.onKeyDown.add(imageJoiningListItem);
+            ed.onKeyDown.add(createNewLi);
+
+			if (tinymce.isGecko) {
+				ed.onKeyUp.add(fixIndentedListItemForGecko);
+			}
+			if (tinymce.isIE8) {
+				ed.onKeyUp.add(fixIndentedListItemForIE8);
+			}
+			if (tinymce.isGecko || tinymce.isWebKit) {
+				ed.onKeyDown.add(fixDeletingFirstCharOfList);
+			}
+			if (tinymce.isWebKit) {
+				ed.onKeyDown.add(fixDeletingEmptyLiInWebkit);
+			}
+		},
+
+		applyList: function(targetListType, oppositeListType) {
+			var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions,
+					selectedBlocks = ed.selection.getSelectedBlocks();
+
+			function cleanupBr(e) {
+				if (e && e.tagName === 'BR') {
+					dom.remove(e);
+				}
+			}
+
+			function makeList(element) {
+				var list = dom.create(targetListType), li;
+
+				function adjustIndentForNewList(element) {
+					// If there's a margin-left, outdent one level to account for the extra list margin.
+					if (element.style.marginLeft || element.style.paddingLeft) {
+						t.adjustPaddingFunction(false)(element);
+					}
+				}
+
+				if (element.tagName === 'LI') {
+					// No change required.
+				} else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') {
+					processBrs(element, function(startSection, br) {
+						doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
+						li = startSection.parentNode;
+						adjustIndentForNewList(li);
+						cleanupBr(br);
+					});
+					if (li) {
+						if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) {
+							dom.split(li.parentNode.parentNode, li.parentNode);
+						}
+						attemptMergeWithAdjacent(li.parentNode, true);
+					}
+					return;
+				} else {
+					// Put the list around the element.
+					li = dom.create('li');
+					dom.insertAfter(li, element);
+					li.appendChild(element);
+					adjustIndentForNewList(element);
+					element = li;
+				}
+				dom.insertAfter(list, element);
+				list.appendChild(element);
+				attemptMergeWithAdjacent(list, true);
+				applied.push(element);
+			}
+
+			function doWrapList(start, end, template) {
+				var li, n = start, tmp;
+				while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) {
+					start = dom.split(start.parentNode, start.previousSibling);
+					start = start.nextSibling;
+					n = start;
+				}
+				if (template) {
+					li = template.cloneNode(true);
+					start.parentNode.insertBefore(li, start);
+					while (li.firstChild) dom.remove(li.firstChild);
+					li = dom.rename(li, 'li');
+				} else {
+					li = dom.create('li');
+					start.parentNode.insertBefore(li, start);
+				}
+                while (n && n != end) {
+					tmp = n.nextSibling;
+					li.appendChild(n);
+					n = tmp;
+				}
+				if (li.childNodes.length === 0) {
+					li.innerHTML = '<br _mce_bogus="1" />';
+				}
+				makeList(li);
+			}
+
+			function processBrs(element, callback) {
+				var startSection, previousBR, END_TO_START = 3, START_TO_END = 1,
+						breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl';
+
+				function isAnyPartSelected(start, end) {
+					var r = dom.createRng(), sel;
+					bookmark.keep = true;
+					ed.selection.moveToBookmark(bookmark);
+					bookmark.keep = false;
+					sel = ed.selection.getRng(true);
+					if (!end) {
+						end = start.parentNode.lastChild;
+					}
+					r.setStartBefore(start);
+					r.setEndAfter(end);
+					return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0);
+				}
+
+				function nextLeaf(br) {
+					if (br.nextSibling)
+						return br.nextSibling;
+					if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot())
+						return nextLeaf(br.parentNode);
+				}
+
+				// Split on BRs within the range and process those.
+				startSection = element.firstChild;
+				// First mark the BRs that have any part of the previous section selected.
+				var trailingContentSelected = false;
+				each(dom.select(breakElements, element), function(br) {
+					if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
+						return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
+					}
+					if (isAnyPartSelected(startSection, br)) {
+						dom.addClass(br, '_mce_tagged_br');
+						startSection = nextLeaf(br);
+					}
+				});
+				trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined));
+				startSection = element.firstChild;
+				each(dom.select(breakElements, element), function(br) {
+					// Got a section from start to br.
+					var tmp = nextLeaf(br);
+					if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
+						return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
+					}
+					if (dom.hasClass(br, '_mce_tagged_br')) {
+						callback(startSection, br, previousBR);
+						previousBR = null;
+					} else {
+						previousBR = br;
+					}
+					startSection = tmp;
+				});
+				if (trailingContentSelected) {
+					callback(startSection, undefined, previousBR);
+				}
+			}
+
+			function wrapList(element) {
+				processBrs(element, function(startSection, br, previousBR) {
+					// Need to indent this part
+					doWrapList(startSection, br);
+					cleanupBr(br);
+					cleanupBr(previousBR);
+				});
+			}
+
+			function changeList(element) {
+				if (tinymce.inArray(applied, element) !== -1) {
+					return;
+				}
+				if (element.parentNode.tagName === oppositeListType) {
+					dom.split(element.parentNode, element);
+					makeList(element);
+					attemptMergeWithNext(element.parentNode, false);
+				}
+				applied.push(element);
+			}
+
+			function convertListItemToParagraph(element) {
+				var child, nextChild, mergedElement, splitLast;
+				if (tinymce.inArray(applied, element) !== -1) {
+					return;
+				}
+				element = splitNestedLists(element, dom);
+				while (dom.is(element.parentNode, 'ol,ul,li')) {
+					dom.split(element.parentNode, element);
+				}
+				// Push the original element we have from the selection, not the renamed one.
+				applied.push(element);
+				element = dom.rename(element, 'p');
+				mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines);
+				if (mergedElement === element) {
+					// Now split out any block elements that can't be contained within a P.
+					// Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each)
+					child = element.firstChild;
+					while (child) {
+						if (dom.isBlock(child)) {
+							child = dom.split(child.parentNode, child);
+							splitLast = true;
+							nextChild = child.nextSibling && child.nextSibling.firstChild;
+						} else {
+							nextChild = child.nextSibling;
+							if (splitLast && child.tagName === 'BR') {
+								dom.remove(child);
+							}
+							splitLast = false;
+						}
+						child = nextChild;
+					}
+				}
+			}
+
+			each(selectedBlocks, function(e) {
+				e = findItemToOperateOn(e, dom);
+				if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) {
+					hasOppositeType = true;
+				} else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) {
+					hasSameType = true;
+				} else {
+					hasNonList = true;
+				}
+			});
+
+			if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) {
+				actions = {
+					'LI': changeList,
+					'H1': makeList,
+					'H2': makeList,
+					'H3': makeList,
+					'H4': makeList,
+					'H5': makeList,
+					'H6': makeList,
+					'P': makeList,
+					'BODY': makeList,
+					'DIV': selectedBlocks.length > 1 ? makeList : wrapList,
+					defaultAction: wrapList,
+					elements: this.selectedBlocks()
+				};
+			} else {
+				actions = {
+					defaultAction: convertListItemToParagraph,
+					elements: this.selectedBlocks()
+				};
+			}
+			this.process(actions);
+		},
+
+		indent: function() {
+			var ed = this.ed, dom = ed.dom, indented = [];
+
+			function createWrapItem(element) {
+				var wrapItem = dom.create('li', { style: 'list-style-type: none;'});
+				dom.insertAfter(wrapItem, element);
+				return wrapItem;
+			}
+
+			function createWrapList(element) {
+				var wrapItem = createWrapItem(element),
+						list = dom.getParent(element, 'ol,ul'),
+						listType = list.tagName,
+						listStyle = dom.getStyle(list, 'list-style-type'),
+						attrs = {},
+						wrapList;
+				if (listStyle !== '') {
+					attrs.style = 'list-style-type: ' + listStyle + ';';
+				}
+				wrapList = dom.create(listType, attrs);
+				wrapItem.appendChild(wrapList);
+				return wrapList;
+			}
+
+			function indentLI(element) {
+				if (!hasParentInList(ed, element, indented)) {
+					element = splitNestedLists(element, dom);
+					var wrapList = createWrapList(element);
+					wrapList.appendChild(element);
+					attemptMergeWithAdjacent(wrapList.parentNode, false);
+					attemptMergeWithAdjacent(wrapList, false);
+					indented.push(element);
+				}
+			}
+
+			this.process({
+				'LI': indentLI,
+				defaultAction: this.adjustPaddingFunction(true),
+				elements: this.selectedBlocks()
+			});
+
+		},
+
+		outdent: function(ui, elements) {
+			var t = this, ed = t.ed, dom = ed.dom, outdented = [];
+
+			function outdentLI(element) {
+				var listElement, targetParent, align;
+				if (!hasParentInList(ed, element, outdented)) {
+					if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') {
+						return t.adjustPaddingFunction(false)(element);
+					}
+					align = dom.getStyle(element, 'text-align', true);
+					if (align === 'center' || align === 'right') {
+						dom.setStyle(element, 'text-align', 'left');
+						return;
+					}
+					element = splitNestedLists(element, dom);
+					listElement = element.parentNode;
+					targetParent = element.parentNode.parentNode;
+					if (targetParent.tagName === 'P') {
+						dom.split(targetParent, element.parentNode);
+					} else {
+						dom.split(listElement, element);
+						if (targetParent.tagName === 'LI') {
+							// Nested list, need to split the LI and go back out to the OL/UL element.
+							dom.split(targetParent, element);
+						} else if (!dom.is(targetParent, 'ol,ul')) {
+							dom.rename(element, 'p');
+						}
+					}
+					outdented.push(element);
+				}
+			}
+
+			var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks();
+			this.process({
+				'LI': outdentLI,
+				defaultAction: this.adjustPaddingFunction(false),
+				elements: listElements
+			});
+
+			each(outdented, attemptMergeWithAdjacent);
+		},
+
+		process: function(actions) {
+			var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
+
+			function isEmptyElement(element) {
+				var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) {
+					return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark'
+							|| n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == ''));
+				});
+				return excludeBrsAndBookmarks.length === 0;
+			}
+
+			function processElement(element) {
+				dom.removeClass(element, '_mce_act_on');
+				if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) {
+					return;
+				}
+				element = findItemToOperateOn(element, dom);
+				var action = actions[element.tagName];
+				if (!action) {
+					action = actions.defaultAction;
+				}
+				action(element);
+			}
+
+			function recurse(element) {
+				t.splitSafeEach(element.childNodes, processElement);
+			}
+
+			function brAtEdgeOfSelection(container, offset) {
+				return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length &&
+						container.childNodes[offset].tagName === 'BR';
+			}
+
+			function isInTable() {
+				var n = sel.getNode();
+				var p = dom.getParent(n, 'td');
+				return p !== null;
+			}
+
+			selectedBlocks = actions.elements;
+
+			r = sel.getRng(true);
+			if (!r.collapsed) {
+				if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) {
+					r.setEnd(r.endContainer, r.endOffset - 1);
+					sel.setRng(r);
+				}
+				if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) {
+					r.setStart(r.startContainer, r.startOffset + 1);
+					sel.setRng(r);
+				}
+			}
+
+
+			if (tinymce.isIE8) {
+				// append a zero sized nbsp so that caret is restored correctly using bookmark
+				var s = t.ed.selection.getNode();
+				if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) {
+					var i = t.ed.getDoc().createTextNode('\uFEFF');
+					s.appendChild(i);
+				}
+			}
+
+			bookmark = sel.getBookmark();
+			actions.OL = actions.UL = recurse;
+			t.splitSafeEach(selectedBlocks, processElement);
+			sel.moveToBookmark(bookmark);
+			bookmark = null;
+
+			// we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6
+			if (!isInTable()) {
+				// Avoids table or image handles being left behind in Firefox.
+				t.ed.execCommand('mceRepaint');
+			}
+		},
+
+		splitSafeEach: function(elements, f) {
+			if (tinymce.isGecko && (/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
+					/Firefox\/3\.[0-4]/.test(navigator.userAgent))) {
+				this.classBasedEach(elements, f);
+			} else {
+				each(elements, f);
+			}
+		},
+
+		classBasedEach: function(elements, f) {
+			var dom = this.ed.dom, nodes, element;
+			// Mark nodes
+			each(elements, function(element) {
+				dom.addClass(element, '_mce_act_on');
+			});
+			nodes = dom.select('._mce_act_on');
+			while (nodes.length > 0) {
+				element = nodes.shift();
+				dom.removeClass(element, '_mce_act_on');
+				f(element);
+				nodes = dom.select('._mce_act_on');
+			}
+		},
+
+		adjustPaddingFunction: function(isIndent) {
+			var indentAmount, indentUnits, ed = this.ed;
+			indentAmount = ed.settings.indentation;
+			indentUnits = /[a-z%]+/i.exec(indentAmount);
+			indentAmount = parseInt(indentAmount, 10);
+			return function(element) {
+				var currentIndent, newIndentAmount;
+				currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10);
+				if (isIndent) {
+					newIndentAmount = currentIndent + indentAmount;
+				} else {
+					newIndentAmount = currentIndent - indentAmount;
+				}
+				ed.dom.setStyle(element, 'padding-left', '');
+				ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : '');
+			};
+		},
+
+		selectedBlocks: function() {
+			var ed = this.ed
+			var selectedBlocks = ed.selection.getSelectedBlocks();
+			return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
+		},
+
+		getInfo: function() {
+			return {
+				longname : 'Lists',
+				author : 'Moxiecode Systems AB',
+				authorurl : 'http://tinymce.moxiecode.com',
+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists',
+				version : tinymce.majorVersion + "." + tinymce.minorVersion
+			};
+		}
+	});
+	tinymce.PluginManager.add("lists", tinymce.plugins.Lists);
+}());
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/media/css/media.css
@@ -1,1 +1,18 @@
+#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }

+#hspace, #vspace { width: 50px }

+#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }

+#flash_base, #flash_flashvars, #html5_altsource1, #html5_altsource2, #html5_poster { width: 240px }

+#width, #height { width: 40px }

+#src, #media_type { width: 250px }

+#class { width: 120px }

+#prev { margin: 0; border: 1px solid black; width: 380px; height: 260px; overflow: auto }

+.panel_wrapper div.current { height: 420px; overflow: auto }

+#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none }

+.mceAddSelectValue { background-color: #DDDDDD }

+#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px }

+#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px }

+#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px }

+#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px }

+#qt_qtsrc { width: 200px }

+iframe {border: 1px solid gray}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/media/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var d=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),h=tinymce.makeMap(d.join(",")),b=tinymce.html.Node,f,a,g=tinymce.util.JSON,e;f=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["EmbeddedAudio"],["Audio"]];function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(i){return i&&i.nodeName==="IMG"&&n.dom.hasClass(i,"mceItemMedia")}r.editor=n;r.url=j;a="";for(m=0;m<f.length;m++){k=f[m][0];q={name:k,clsids:tinymce.explode(f[m][1]||""),mimes:tinymce.explode(f[m][2]||""),codebase:f[m][3]};for(p=0;p<q.clsids.length;p++){l["clsid:"+q.clsids[p]]=q}for(p=0;p<q.mimes.length;p++){l[q.mimes[p]]=q}l["mceItem"+k]=q;l[k.toLowerCase()]=q;a+=(a?"|":"")+k}tinymce.each(n.getParam("media_types","video=mp4,m4v,ogv,webm;silverlight=xap;flash=swf,flv;shockwave=dcr;quicktime=mov,qt,mpg,mpeg;shockwave=dcr;windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;realmedia=rm,ra,ram;java=jar;audio=mp3,ogg").split(";"),function(v){var s,u,t;v=v.split(/=/);u=tinymce.explode(v[1].toLowerCase());for(s=0;s<u.length;s++){t=l[v[0].toLowerCase()];if(t){l[u[s]]=t}}});a=new RegExp("write("+a+")\\(([^)]+)\\)");r.lookup=l;n.onPreInit.add(function(){n.schema.addValidElements("object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]");n.parser.addNodeFilter("object,embed,video,audio,script,iframe",function(s){var t=s.length;while(t--){r.objectToImg(s[t])}});n.serializer.addNodeFilter("img",function(s,u,t){var v=s.length,w;while(v--){w=s[v];if((w.attr("class")||"").indexOf("mceItemMedia")!==-1){r.imgToObject(w,t)}}})});n.onInit.add(function(){if(n.theme&&n.theme.onResolveName){n.theme.onResolveName.add(function(i,s){if(s.name==="img"&&n.dom.hasClass(s.node,"mceItemMedia")){s.name="media"}})}if(n&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(function(s,t,i){if(i.nodeName==="IMG"&&i.className.indexOf("mceItemMedia")!==-1){t.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});n.addCommand("mceMedia",function(){var s,i;i=n.selection.getNode();if(o(i)){s=n.dom.getAttrib(i,"data-mce-json");if(s){s=g.parse(s);tinymce.each(d,function(t){var u=n.dom.getAttrib(i,t);if(u){s[t]=u}});s.type=r.getType(i.className).name.toLowerCase()}}if(!s){s={type:"flash",video:{sources:[]},params:{}}}n.windowManager.open({file:j+"/media.htm",width:430+parseInt(n.getLang("media.delta_width",0)),height:500+parseInt(n.getLang("media.delta_height",0)),inline:1},{plugin_url:j,data:s})});n.addButton("media",{title:"media.desc",cmd:"mceMedia"});n.onNodeChange.add(function(s,i,t){i.setActive("media",o(t))})},convertUrl:function(k,n){var j=this,m=j.editor,l=m.settings,o=l.url_converter,i=l.url_converter_scope||j;if(!k){return k}if(n){return m.documentBaseURI.toAbsolute(k)}return o.call(i,k,"src","object")},getInfo:function(){return{longname:"Media",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media",version:tinymce.majorVersion+"."+tinymce.minorVersion}},dataToImg:function(m,k){var r=this,o=r.editor,p=o.documentBaseURI,j,q,n,l;m.params.src=r.convertUrl(m.params.src,k);q=m.video.attrs;if(q){q.src=r.convertUrl(q.src,k)}if(q){q.poster=r.convertUrl(q.poster,k)}j=c(m.video.sources);if(j){for(l=0;l<j.length;l++){j[l].src=r.convertUrl(j[l].src,k)}}n=r.editor.dom.create("img",{id:m.id,style:m.style,align:m.align,hspace:m.hspace,vspace:m.vspace,src:r.editor.theme.url+"/img/trans.gif","class":"mceItemMedia mceItem"+r.getType(m.type).name,"data-mce-json":g.serialize(m,"'")});n.width=m.width||(m.type=="audio"?"300":"320");n.height=m.height||(m.type=="audio"?"32":"240");return n},dataToHtml:function(i,j){return this.editor.serializer.serialize(this.dataToImg(i,j),{forced_root_block:"",force_absolute:j})},htmlToData:function(k){var j,i,l;l={type:"flash",video:{sources:[]},params:{}};j=this.editor.parser.parse(k);i=j.getAll("img")[0];if(i){l=g.parse(i.attr("data-mce-json"));l.type=this.getType(i.attr("class")).name.toLowerCase();tinymce.each(d,function(m){var n=i.attr(m);if(n){l[m]=n}})}return l},getType:function(m){var k,j,l;j=tinymce.explode(m," ");for(k=0;k<j.length;k++){l=this.lookup[j[k]];if(l){return l}}},imgToObject:function(z,o){var u=this,p=u.editor,C,H,j,t,I,y,G,w,k,E,s,q,A,D,m,x,l,B,F;function r(i,n){var M,L,N,K,J;J=p.getParam("flash_video_player_url",u.convertUrl(u.url+"/moxieplayer.swf"));if(J){M=p.documentBaseURI;G.params.src=J;if(p.getParam("flash_video_player_absvideourl",true)){i=M.toAbsolute(i||"",true);n=M.toAbsolute(n||"",true)}N="";L=p.getParam("flash_video_player_flashvars",{url:"$url",poster:"$poster"});tinymce.each(L,function(P,O){P=P.replace(/\$url/,i||"");P=P.replace(/\$poster/,n||"");if(P.length>0){N+=(N?"&":"")+O+"="+escape(P)}});if(N.length){G.params.flashvars=N}K=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(K,function(P,O){G.params[O]=""+P})}}G=z.attr("data-mce-json");if(!G){return}G=g.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}if(q.name==="Iframe"){x=new b("iframe",1);tinymce.each(d,function(i){var n=z.attr(i);if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&n.length>0){x.attr(i,n)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new b("script",1).attr("type","text/javascript");y=new b("#text",3);y.value="write"+q.name+"("+g.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new b("video",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A<k.length;A++){if(/\.mp4$/.test(k[A].src)){m=k[A].src}}if(!k[0].type){C.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;C.append(w)}if(m){r(m,l);q=u.getType("flash")}else{G.params.src=""}}if(q.name==="Audio"&&G.video.sources[0]){F=new b("audio",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);if(!k[0].type){F.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;F.append(w)}G.params.src=""}if(q.name==="EmbeddedAudio"){j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:z.attr("type")});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});G.params.src=""}if(G.params.src){if(/\.flv$/i.test(G.params.src)){r(G.params.src,"")}if(o&&o.force_absolute){G.params.src=p.documentBaseURI.toAbsolute(G.params.src)}H=new b("object",1).attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B});tinymce.each(d,function(i){var n=G[i];if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&i!="type"){H.attr(i,n)}});for(I in G.params){s=new b("param",1);s.shortEnded=true;y=G.params[I];if(I==="src"&&q.name==="WindowsMedia"){I="url"}s.attr({name:I,value:y});H.append(s)}if(this.editor.getParam("media_strict",true)){H.attr({data:G.params.src,type:q.mimes[0]})}else{H.attr({classid:"clsid:"+q.clsids[0],codebase:q.codebase});j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:q.mimes[0]});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});H.append(j)}if(G.object_html){y=new b("#text",3);y.raw=true;y.value=G.object_html;H.append(y)}if(C){C.append(H)}}if(C){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;C.append(y)}}if(F){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;F.append(y)}}var v=C||F||H||j;if(v){z.replace(v)}else{z.remove()}},objectToImg:function(C){var L,k,F,s,M,N,y,A,x,G,E,t,q,I,B,l,K,o,H=this.lookup,m,z,v=this.editor.settings.url_converter,n=this.editor.settings.url_converter_scope,w,r,D,j;function u(i){return new tinymce.html.Serializer({inner:true,validate:false}).serialize(i)}function J(O,i){return H[(O.attr(i)||"").toLowerCase()]}function p(O){var i=O.replace(/^.*\.([^.]+)$/,"$1");return H[i.toLowerCase()||""]}if(!C.parent){return}if(C.name==="script"){if(C.firstChild){m=a.exec(C.firstChild.value)}if(!m){return}o=m[1];K={video:{},params:g.parse(m[2])};A=K.params.width;x=K.params.height}K=K||{video:{},params:{}};M=new b("img",1);M.attr({src:this.editor.theme.url+"/img/trans.gif"});N=C.name;if(N==="video"||N=="audio"){F=C;L=C.getAll("object")[0];k=C.getAll("embed")[0];A=F.attr("width");x=F.attr("height");y=F.attr("id");K.video={attrs:{},sources:[]};z=K.video.attrs;for(N in F.attributes.map){z[N]=F.attributes.map[N]}B=C.attr("src");if(B){K.video.sources.push({src:v.call(n,B,"src",C.name)})}l=F.getAll("source");for(E=0;E<l.length;E++){B=l[E].remove();K.video.sources.push({src:v.call(n,B.attr("src"),"src","source"),type:B.attr("type"),media:B.attr("media")})}if(z.poster){z.poster=v.call(n,z.poster,"poster",C.name)}}if(C.name==="object"){L=C;k=C.getAll("embed")[0]}if(C.name==="embed"){k=C}if(C.name==="iframe"){s=C;o="Iframe"}if(L){A=A||L.attr("width");x=x||L.attr("height");G=G||L.attr("style");y=y||L.attr("id");w=w||L.attr("hspace");r=r||L.attr("vspace");D=D||L.attr("align");j=j||L.attr("bgcolor");K.name=L.attr("name");I=L.getAll("param");for(E=0;E<I.length;E++){q=I[E];N=q.remove().attr("name");if(!h[N]){K.params[N]=q.attr("value")}}K.params.src=K.params.src||L.attr("data")}if(k){A=A||k.attr("width");x=x||k.attr("height");G=G||k.attr("style");y=y||k.attr("id");w=w||k.attr("hspace");r=r||k.attr("vspace");D=D||k.attr("align");j=j||k.attr("bgcolor");for(N in k.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=k.attributes.map[N]}}}if(s){A=s.attr("width");x=s.attr("height");G=G||s.attr("style");y=s.attr("id");w=s.attr("hspace");r=s.attr("vspace");D=s.attr("align");j=s.attr("bgcolor");tinymce.each(d,function(i){M.attr(i,s.attr(i))});for(N in s.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=s.attributes.map[N]}}}if(K.params.movie){K.params.src=K.params.src||K.params.movie;delete K.params.movie}if(K.params.src){K.params.src=v.call(n,K.params.src,"src","object")}if(F){if(C.name==="video"){o=H.video.name}else{if(C.name==="audio"){o=H.audio.name}}}if(L&&!o){o=(J(L,"clsid")||J(L,"classid")||J(L,"type")||{}).name}if(k&&!o){o=(J(k,"type")||p(K.params.src)||{}).name}if(k&&o=="EmbeddedAudio"){K.params.type=k.attr("type")}C.replace(M);if(k){k.remove()}if(L){t=u(L.remove());if(t){K.object_html=t}}if(F){t=u(F.remove());if(t){K.video_html=t}}K.hspace=w;K.vspace=r;K.align=D;K.bgcolor=j;M.attr({id:y,"class":"mceItemMedia mceItem"+(o||"Flash"),style:G,width:A||(C.name=="audio"?"300":"320"),height:x||(C.name=="audio"?"32":"240"),hspace:w,vspace:r,align:D,bgcolor:j,"data-mce-json":g.serialize(K,"'")})}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/media/editor_plugin_src.js
@@ -1,1 +1,891 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var rootAttributes = tinymce.explode('id,name,width,height,style,align,class,hspace,vspace,bgcolor,type'), excludedAttrs = tinymce.makeMap(rootAttributes.join(',')), Node = tinymce.html.Node,

+		mediaTypes, scriptRegExp, JSON = tinymce.util.JSON, mimeTypes;

+

+	// Media types supported by this plugin

+	mediaTypes = [

+		// Type, clsid:s, mime types, codebase

+		["Flash", "d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],

+		["ShockWave", "166b1bca-3f9c-11cf-8075-444553540000", "application/x-director", "http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],

+		["WindowsMedia", "6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a", "application/x-mplayer2", "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],

+		["QuickTime", "02bf25d5-8c17-4b23-bc80-d3488abddc6b", "video/quicktime", "http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],

+		["RealMedia", "cfcdaa03-8be4-11cf-b84b-0020afbbccfa", "audio/x-pn-realaudio-plugin", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],

+		["Java", "8ad9c840-044e-11d1-b3e9-00805f499d93", "application/x-java-applet", "http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],

+		["Silverlight", "dfeaf541-f3e1-4c24-acac-99c30715084a", "application/x-silverlight-2"],

+		["Iframe"],

+		["Video"],

+		["EmbeddedAudio"],

+		["Audio"]

+	];

+

+	function toArray(obj) {

+		var undef, out, i;

+

+		if (obj && !obj.splice) {

+			out = [];

+

+			for (i = 0; true; i++) {

+				if (obj[i])

+					out[i] = obj[i];

+				else

+					break;

+			}

+

+			return out;

+		}

+

+		return obj;

+	};

+

+	tinymce.create('tinymce.plugins.MediaPlugin', {

+		init : function(ed, url) {

+			var self = this, lookup = {}, i, y, item, name;

+

+			function isMediaImg(node) {

+				return node && node.nodeName === 'IMG' && ed.dom.hasClass(node, 'mceItemMedia');

+			};

+

+			self.editor = ed;

+			self.url = url;

+

+			// Parse media types into a lookup table

+			scriptRegExp = '';

+			for (i = 0; i < mediaTypes.length; i++) {

+				name = mediaTypes[i][0];

+

+				item = {

+					name : name,

+					clsids : tinymce.explode(mediaTypes[i][1] || ''),

+					mimes : tinymce.explode(mediaTypes[i][2] || ''),

+					codebase : mediaTypes[i][3]

+				};

+

+				for (y = 0; y < item.clsids.length; y++)

+					lookup['clsid:' + item.clsids[y]] = item;

+

+				for (y = 0; y < item.mimes.length; y++)

+					lookup[item.mimes[y]] = item;

+

+				lookup['mceItem' + name] = item;

+				lookup[name.toLowerCase()] = item;

+

+				scriptRegExp += (scriptRegExp ? '|' : '') + name;

+			}

+

+			// Handle the media_types setting

+			tinymce.each(ed.getParam("media_types",

+				"video=mp4,m4v,ogv,webm;" +

+				"silverlight=xap;" +

+				"flash=swf,flv;" +

+				"shockwave=dcr;" +

+				"quicktime=mov,qt,mpg,mpeg;" +

+				"shockwave=dcr;" +

+				"windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;" +

+				"realmedia=rm,ra,ram;" +

+				"java=jar;" +

+				"audio=mp3,ogg"

+			).split(';'), function(item) {

+				var i, extensions, type;

+

+				item = item.split(/=/);

+				extensions = tinymce.explode(item[1].toLowerCase());

+				for (i = 0; i < extensions.length; i++) {

+					type = lookup[item[0].toLowerCase()];

+

+					if (type)

+						lookup[extensions[i]] = type;

+				}

+			});

+

+			scriptRegExp = new RegExp('write(' + scriptRegExp + ')\\(([^)]+)\\)');

+			self.lookup = lookup;

+

+			ed.onPreInit.add(function() {

+				// Allow video elements

+				ed.schema.addValidElements('object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]');

+

+				// Convert video elements to image placeholder

+				ed.parser.addNodeFilter('object,embed,video,audio,script,iframe', function(nodes) {

+					var i = nodes.length;

+

+					while (i--)

+						self.objectToImg(nodes[i]);

+				});

+

+				// Convert image placeholders to video elements

+				ed.serializer.addNodeFilter('img', function(nodes, name, args) {

+					var i = nodes.length, node;

+

+					while (i--) {

+						node = nodes[i];

+						if ((node.attr('class') || '').indexOf('mceItemMedia') !== -1)

+							self.imgToObject(node, args);

+					}

+				});

+			});

+

+			ed.onInit.add(function() {

+				// Display "media" instead of "img" in element path

+				if (ed.theme && ed.theme.onResolveName) {

+					ed.theme.onResolveName.add(function(theme, path_object) {

+						if (path_object.name === 'img' && ed.dom.hasClass(path_object.node, 'mceItemMedia'))

+							path_object.name = 'media';

+					});

+				}

+

+				// Add contect menu if it's loaded

+				if (ed && ed.plugins.contextmenu) {

+					ed.plugins.contextmenu.onContextMenu.add(function(plugin, menu, element) {

+						if (element.nodeName === 'IMG' && element.className.indexOf('mceItemMedia') !== -1)

+							menu.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});

+					});

+				}

+			});

+

+			// Register commands

+			ed.addCommand('mceMedia', function() {

+				var data, img;

+

+				img = ed.selection.getNode();

+				if (isMediaImg(img)) {

+					data = ed.dom.getAttrib(img, 'data-mce-json');

+					if (data) {

+						data = JSON.parse(data);

+

+						// Add some extra properties to the data object

+						tinymce.each(rootAttributes, function(name) {

+							var value = ed.dom.getAttrib(img, name);

+

+							if (value)

+								data[name] = value;

+						});

+

+						data.type = self.getType(img.className).name.toLowerCase();

+					}

+				}

+

+				if (!data) {

+					data = {

+						type : 'flash',

+						video: {sources:[]},

+						params: {}

+					};

+				}

+

+				ed.windowManager.open({

+					file : url + '/media.htm',

+					width : 430 + parseInt(ed.getLang('media.delta_width', 0)),

+					height : 500 + parseInt(ed.getLang('media.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url,

+					data : data

+				});

+			});

+

+			// Register buttons

+			ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});

+

+			// Update media selection status

+			ed.onNodeChange.add(function(ed, cm, node) {

+				cm.setActive('media', isMediaImg(node));

+			});

+		},

+

+		convertUrl : function(url, force_absolute) {

+			var self = this, editor = self.editor, settings = editor.settings,

+				urlConverter = settings.url_converter,

+				urlConverterScope = settings.url_converter_scope || self;

+

+			if (!url)

+				return url;

+

+			if (force_absolute)

+				return editor.documentBaseURI.toAbsolute(url);

+

+			return urlConverter.call(urlConverterScope, url, 'src', 'object');

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Media',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		/**

+		 * Converts the JSON data object to an img node.

+		 */

+		dataToImg : function(data, force_absolute) {

+			var self = this, editor = self.editor, baseUri = editor.documentBaseURI, sources, attrs, img, i;

+

+			data.params.src = self.convertUrl(data.params.src, force_absolute);

+

+			attrs = data.video.attrs;

+			if (attrs)

+				attrs.src = self.convertUrl(attrs.src, force_absolute);

+

+			if (attrs)

+				attrs.poster = self.convertUrl(attrs.poster, force_absolute);

+

+			sources = toArray(data.video.sources);

+			if (sources) {

+				for (i = 0; i < sources.length; i++)

+					sources[i].src = self.convertUrl(sources[i].src, force_absolute);

+			}

+

+			img = self.editor.dom.create('img', {

+				id : data.id,

+				style : data.style,

+				align : data.align,

+				hspace : data.hspace,

+				vspace : data.vspace,

+				src : self.editor.theme.url + '/img/trans.gif',

+				'class' : 'mceItemMedia mceItem' + self.getType(data.type).name,

+				'data-mce-json' : JSON.serialize(data, "'")

+			});

+

+			img.width = data.width || (data.type == 'audio' ? "300" : "320");

+			img.height = data.height || (data.type == 'audio' ? "32" : "240");

+

+			return img;

+		},

+

+		/**

+		 * Converts the JSON data object to a HTML string.

+		 */

+		dataToHtml : function(data, force_absolute) {

+			return this.editor.serializer.serialize(this.dataToImg(data, force_absolute), {forced_root_block : '', force_absolute : force_absolute});

+		},

+

+		/**

+		 * Converts the JSON data object to a HTML string.

+		 */

+		htmlToData : function(html) {

+			var fragment, img, data;

+

+			data = {

+				type : 'flash',

+				video: {sources:[]},

+				params: {}

+			};

+

+			fragment = this.editor.parser.parse(html);

+			img = fragment.getAll('img')[0];

+

+			if (img) {

+				data = JSON.parse(img.attr('data-mce-json'));

+				data.type = this.getType(img.attr('class')).name.toLowerCase();

+

+				// Add some extra properties to the data object

+				tinymce.each(rootAttributes, function(name) {

+					var value = img.attr(name);

+

+					if (value)

+						data[name] = value;

+				});

+			}

+

+			return data;

+		},

+

+		/**

+		 * Get type item by extension, class, clsid or mime type.

+		 *

+		 * @method getType

+		 * @param {String} value Value to get type item by.

+		 * @return {Object} Type item object or undefined.

+		 */

+		getType : function(value) {

+			var i, values, typeItem;

+

+			// Find type by checking the classes

+			values = tinymce.explode(value, ' ');

+			for (i = 0; i < values.length; i++) {

+				typeItem = this.lookup[values[i]];

+

+				if (typeItem)

+					return typeItem;

+			}

+		},

+

+		/**

+		 * Converts a tinymce.html.Node image element to video/object/embed.

+		 */

+		imgToObject : function(node, args) {

+			var self = this, editor = self.editor, video, object, embed, iframe, name, value, data,

+				source, sources, params, param, typeItem, i, item, mp4Source, replacement,

+				posterSrc, style, audio;

+

+			// Adds the flash player

+			function addPlayer(video_src, poster_src) {

+				var baseUri, flashVars, flashVarsOutput, params, flashPlayer;

+

+				flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf'));

+				if (flashPlayer) {

+					baseUri = editor.documentBaseURI;

+					data.params.src = flashPlayer;

+

+					// Convert the movie url to absolute urls

+					if (editor.getParam('flash_video_player_absvideourl', true)) {

+						video_src = baseUri.toAbsolute(video_src || '', true);

+						poster_src = baseUri.toAbsolute(poster_src || '', true);

+					}

+

+					// Generate flash vars

+					flashVarsOutput = '';

+					flashVars = editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'});

+					tinymce.each(flashVars, function(value, name) {

+						// Replace $url and $poster variables in flashvars value

+						value = value.replace(/\$url/, video_src || '');

+						value = value.replace(/\$poster/, poster_src || '');

+

+						if (value.length > 0)

+							flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value);

+					});

+

+					if (flashVarsOutput.length)

+						data.params.flashvars = flashVarsOutput;

+

+					params = editor.getParam('flash_video_player_params', {

+						allowfullscreen: true,

+						allowscriptaccess: true

+					});

+

+					tinymce.each(params, function(value, name) {

+						data.params[name] = "" + value;

+					});

+				}

+			};

+

+			data = node.attr('data-mce-json');

+			if (!data)

+				return;

+

+			data = JSON.parse(data);

+			typeItem = this.getType(node.attr('class'));

+

+			style = node.attr('data-mce-style')

+			if (!style) {

+				style = node.attr('style');

+

+				if (style)

+					style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img'));

+			}

+

+			// Handle iframe

+			if (typeItem.name === 'Iframe') {

+				replacement = new Node('iframe', 1);

+

+				tinymce.each(rootAttributes, function(name) {

+					var value = node.attr(name);

+

+					if (name == 'class' && value)

+						value = value.replace(/mceItem.+ ?/g, '');

+

+					if (value && value.length > 0)

+						replacement.attr(name, value);

+				});

+

+				for (name in data.params)

+					replacement.attr(name, data.params[name]);

+

+				replacement.attr({

+					style: style,

+					src: data.params.src

+				});

+

+				node.replace(replacement);

+

+				return;

+			}

+

+			// Handle scripts

+			if (this.editor.settings.media_use_script) {

+				replacement = new Node('script', 1).attr('type', 'text/javascript');

+

+				value = new Node('#text', 3);

+				value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, {

+					width: node.attr('width'),

+					height: node.attr('height')

+				})) + ');';

+

+				replacement.append(value);

+				node.replace(replacement);

+

+				return;

+			}

+

+			// Add HTML5 video element

+			if (typeItem.name === 'Video' && data.video.sources[0]) {

+				// Create new object element

+				video = new Node('video', 1).attr(tinymce.extend({

+					id : node.attr('id'),

+					width: node.attr('width'),

+					height: node.attr('height'),

+					style : style

+				}, data.video.attrs));

+

+				// Get poster source and use that for flash fallback

+				if (data.video.attrs)

+					posterSrc = data.video.attrs.poster;

+

+				sources = data.video.sources = toArray(data.video.sources);

+				for (i = 0; i < sources.length; i++) {

+					if (/\.mp4$/.test(sources[i].src))

+						mp4Source = sources[i].src;

+				}

+

+				if (!sources[0].type) {

+					video.attr('src', sources[0].src);

+					sources.splice(0, 1);

+				}

+

+				for (i = 0; i < sources.length; i++) {

+					source = new Node('source', 1).attr(sources[i]);

+					source.shortEnded = true;

+					video.append(source);

+				}

+

+				// Create flash fallback for video if we have a mp4 source

+				if (mp4Source) {

+					addPlayer(mp4Source, posterSrc);

+					typeItem = self.getType('flash');

+				} else

+					data.params.src = '';

+			}

+

+			// Add HTML5 audio element

+			if (typeItem.name === 'Audio' && data.video.sources[0]) {

+				// Create new object element

+				audio = new Node('audio', 1).attr(tinymce.extend({

+					id : node.attr('id'),

+					width: node.attr('width'),

+					height: node.attr('height'),

+					style : style

+				}, data.video.attrs));

+

+				// Get poster source and use that for flash fallback

+				if (data.video.attrs)

+					posterSrc = data.video.attrs.poster;

+

+				sources = data.video.sources = toArray(data.video.sources);

+				if (!sources[0].type) {

+					audio.attr('src', sources[0].src);

+					sources.splice(0, 1);

+				}

+

+				for (i = 0; i < sources.length; i++) {

+					source = new Node('source', 1).attr(sources[i]);

+					source.shortEnded = true;

+					audio.append(source);

+				}

+

+				data.params.src = '';

+			}

+

+			if (typeItem.name === 'EmbeddedAudio') {

+				embed = new Node('embed', 1);

+				embed.shortEnded = true;

+				embed.attr({

+					id: node.attr('id'),

+					width: node.attr('width'),

+					height: node.attr('height'),

+					style : style,

+					type: node.attr('type')

+				});

+

+				for (name in data.params)

+					embed.attr(name, data.params[name]);

+

+				tinymce.each(rootAttributes, function(name) {

+					if (data[name] && name != 'type')

+						embed.attr(name, data[name]);

+				});

+

+				data.params.src = '';

+			}

+

+			// Do we have a params src then we can generate object

+			if (data.params.src) {

+				// Is flv movie add player for it

+				if (/\.flv$/i.test(data.params.src))

+					addPlayer(data.params.src, '');

+

+				if (args && args.force_absolute)

+					data.params.src = editor.documentBaseURI.toAbsolute(data.params.src);

+

+				// Create new object element

+				object = new Node('object', 1).attr({

+					id : node.attr('id'),

+					width: node.attr('width'),

+					height: node.attr('height'),

+					style : style

+				});

+

+				tinymce.each(rootAttributes, function(name) {

+					var value = data[name];

+

+					if (name == 'class' && value)

+						value = value.replace(/mceItem.+ ?/g, '');

+

+					if (value && name != 'type')

+						object.attr(name, value);

+				});

+

+				// Add params

+				for (name in data.params) {

+					param = new Node('param', 1);

+					param.shortEnded = true;

+					value = data.params[name];

+

+					// Windows media needs to use url instead of src for the media URL

+					if (name === 'src' && typeItem.name === 'WindowsMedia')

+						name = 'url';

+

+					param.attr({name: name, value: value});

+					object.append(param);

+				}

+

+				// Setup add type and classid if strict is disabled

+				if (this.editor.getParam('media_strict', true)) {

+					object.attr({

+						data: data.params.src,

+						type: typeItem.mimes[0]

+					});

+				} else {

+					object.attr({

+						classid: "clsid:" + typeItem.clsids[0],

+						codebase: typeItem.codebase

+					});

+

+					embed = new Node('embed', 1);

+					embed.shortEnded = true;

+					embed.attr({

+						id: node.attr('id'),

+						width: node.attr('width'),

+						height: node.attr('height'),

+						style : style,

+						type: typeItem.mimes[0]

+					});

+

+					for (name in data.params)

+						embed.attr(name, data.params[name]);

+

+					tinymce.each(rootAttributes, function(name) {

+						if (data[name] && name != 'type')

+							embed.attr(name, data[name]);

+					});

+

+					object.append(embed);

+				}

+

+				// Insert raw HTML

+				if (data.object_html) {

+					value = new Node('#text', 3);

+					value.raw = true;

+					value.value = data.object_html;

+					object.append(value);

+				}

+

+				// Append object to video element if it exists

+				if (video)

+					video.append(object);

+			}

+

+			if (video) {

+				// Insert raw HTML

+				if (data.video_html) {

+					value = new Node('#text', 3);

+					value.raw = true;

+					value.value = data.video_html;

+					video.append(value);

+				}

+			}

+

+			if (audio) {

+				// Insert raw HTML

+				if (data.video_html) {

+					value = new Node('#text', 3);

+					value.raw = true;

+					value.value = data.video_html;

+					audio.append(value);

+				}

+			}

+

+			var n = video || audio || object || embed;

+			if (n)

+				node.replace(n);

+			else

+				node.remove();

+		},

+

+		/**

+		 * Converts a tinymce.html.Node video/object/embed to an img element.

+		 *

+		 * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this:

+		 * <img class="mceItemMedia mceItemFlash" width="100" height="100" data-mce-json="{..}" />

+		 *

+		 * The JSON structure will be like this:

+		 * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}}

+		 */

+		objectToImg : function(node) {

+			var object, embed, video, iframe, img, name, id, width, height, style, i, html,

+				param, params, source, sources, data, type, lookup = this.lookup,

+				matches, attrs, urlConverter = this.editor.settings.url_converter,

+				urlConverterScope = this.editor.settings.url_converter_scope,

+				hspace, vspace, align, bgcolor;

+

+			function getInnerHTML(node) {

+				return new tinymce.html.Serializer({

+					inner: true,

+					validate: false

+				}).serialize(node);

+			};

+

+			function lookupAttribute(o, attr) {

+				return lookup[(o.attr(attr) || '').toLowerCase()];

+			}

+

+			function lookupExtension(src) {

+				var ext = src.replace(/^.*\.([^.]+)$/, '$1');

+				return lookup[ext.toLowerCase() || ''];

+			}

+

+			// If node isn't in document

+			if (!node.parent)

+				return;

+

+			// Handle media scripts

+			if (node.name === 'script') {

+				if (node.firstChild)

+					matches = scriptRegExp.exec(node.firstChild.value);

+

+				if (!matches)

+					return;

+

+				type = matches[1];

+				data = {video : {}, params : JSON.parse(matches[2])};

+				width = data.params.width;

+				height = data.params.height;

+			}

+

+			// Setup data objects

+			data = data || {

+				video : {},

+				params : {}

+			};

+

+			// Setup new image object

+			img = new Node('img', 1);

+			img.attr({

+				src : this.editor.theme.url + '/img/trans.gif'

+			});

+

+			// Video element

+			name = node.name;

+			if (name === 'video' || name == 'audio') {

+				video = node;

+				object = node.getAll('object')[0];

+				embed = node.getAll('embed')[0];

+				width = video.attr('width');

+				height = video.attr('height');

+				id = video.attr('id');

+				data.video = {attrs : {}, sources : []};

+

+				// Get all video attributes

+				attrs = data.video.attrs;

+				for (name in video.attributes.map)

+					attrs[name] = video.attributes.map[name];

+

+				source = node.attr('src');

+				if (source)

+					data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)});

+

+				// Get all sources

+				sources = video.getAll("source");

+				for (i = 0; i < sources.length; i++) {

+					source = sources[i].remove();

+

+					data.video.sources.push({

+						src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'),

+						type: source.attr('type'),

+						media: source.attr('media')

+					});

+				}

+

+				// Convert the poster URL

+				if (attrs.poster)

+					attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name);

+			}

+

+			// Object element

+			if (node.name === 'object') {

+				object = node;

+				embed = node.getAll('embed')[0];

+			}

+

+			// Embed element

+			if (node.name === 'embed')

+				embed = node;

+

+			// Iframe element

+			if (node.name === 'iframe') {

+				iframe = node;

+				type = 'Iframe';

+			}

+

+			if (object) {

+				// Get width/height

+				width = width || object.attr('width');

+				height = height || object.attr('height');

+				style = style || object.attr('style');

+				id = id || object.attr('id');

+				hspace = hspace || object.attr('hspace');

+				vspace = vspace || object.attr('vspace');

+				align = align || object.attr('align');

+				bgcolor = bgcolor || object.attr('bgcolor');

+				data.name = object.attr('name');

+

+				// Get all object params

+				params = object.getAll("param");

+				for (i = 0; i < params.length; i++) {

+					param = params[i];

+					name = param.remove().attr('name');

+

+					if (!excludedAttrs[name])

+						data.params[name] = param.attr('value');

+				}

+

+				data.params.src = data.params.src || object.attr('data');

+			}

+

+			if (embed) {

+				// Get width/height

+				width = width || embed.attr('width');

+				height = height || embed.attr('height');

+				style = style || embed.attr('style');

+				id = id || embed.attr('id');

+				hspace = hspace || embed.attr('hspace');

+				vspace = vspace || embed.attr('vspace');

+				align = align || embed.attr('align');

+				bgcolor = bgcolor || embed.attr('bgcolor');

+

+				// Get all embed attributes

+				for (name in embed.attributes.map) {

+					if (!excludedAttrs[name] && !data.params[name])

+						data.params[name] = embed.attributes.map[name];

+				}

+			}

+

+			if (iframe) {

+				// Get width/height

+				width = iframe.attr('width');

+				height = iframe.attr('height');

+				style = style || iframe.attr('style');

+				id = iframe.attr('id');

+				hspace = iframe.attr('hspace');

+				vspace = iframe.attr('vspace');

+				align = iframe.attr('align');

+				bgcolor = iframe.attr('bgcolor');

+

+				tinymce.each(rootAttributes, function(name) {

+					img.attr(name, iframe.attr(name));

+				});

+

+				// Get all iframe attributes

+				for (name in iframe.attributes.map) {

+					if (!excludedAttrs[name] && !data.params[name])

+						data.params[name] = iframe.attributes.map[name];

+				}

+			}

+

+			// Use src not movie

+			if (data.params.movie) {

+				data.params.src = data.params.src || data.params.movie;

+				delete data.params.movie;

+			}

+

+			// Convert the URL to relative/absolute depending on configuration

+			if (data.params.src)

+				data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object');

+

+			if (video) {

+				if (node.name === 'video')

+					type = lookup.video.name;

+				else if (node.name === 'audio')

+					type = lookup.audio.name;

+			}

+

+			if (object && !type)

+				type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name;

+

+			if (embed && !type)

+				type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name;

+

+			// for embedded audio we preserve the original specified type

+			if (embed && type == 'EmbeddedAudio') {

+				data.params.type = embed.attr('type');

+			}

+

+			// Replace the video/object/embed element with a placeholder image containing the data

+			node.replace(img);

+

+			// Remove embed

+			if (embed)

+				embed.remove();

+

+			// Serialize the inner HTML of the object element

+			if (object) {

+				html = getInnerHTML(object.remove());

+

+				if (html)

+					data.object_html = html;

+			}

+

+			// Serialize the inner HTML of the video element

+			if (video) {

+				html = getInnerHTML(video.remove());

+

+				if (html)

+					data.video_html = html;

+			}

+

+			data.hspace = hspace;

+			data.vspace = vspace;

+			data.align = align;

+			data.bgcolor = bgcolor;

+

+			// Set width/height of placeholder

+			img.attr({

+				id : id,

+				'class' : 'mceItemMedia mceItem' + (type || 'Flash'),

+				style : style,

+				width : width || (node.name == 'audio' ? "300" : "320"),

+				height : height || (node.name == 'audio' ? "32" : "240"),

+				hspace : hspace,

+				vspace : vspace,

+				align : align,

+				bgcolor : bgcolor,

+				"data-mce-json" : JSON.serialize(data, "'")

+			});

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/media/js/embed.js
@@ -1,1 +1,74 @@
+/**

+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.

+ */

+

+function writeFlash(p) {

+	writeEmbed(

+		'D27CDB6E-AE6D-11cf-96B8-444553540000',

+		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

+		'application/x-shockwave-flash',

+		p

+	);

+}

+

+function writeShockWave(p) {

+	writeEmbed(

+	'166B1BCA-3F9C-11CF-8075-444553540000',

+	'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',

+	'application/x-director',

+		p

+	);

+}

+

+function writeQuickTime(p) {

+	writeEmbed(

+		'02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',

+		'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',

+		'video/quicktime',

+		p

+	);

+}

+

+function writeRealMedia(p) {

+	writeEmbed(

+		'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',

+		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

+		'audio/x-pn-realaudio-plugin',

+		p

+	);

+}

+

+function writeWindowsMedia(p) {

+	p.url = p.src;

+	writeEmbed(

+		'6BF52A52-394A-11D3-B153-00C04F79FAA6',

+		'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',

+		'application/x-mplayer2',

+		p

+	);

+}

+

+function writeEmbed(cls, cb, mt, p) {

+	var h = '', n;

+

+	h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';

+	h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';

+	h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';

+	h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';

+	h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';

+	h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';

+	h += '>';

+

+	for (n in p)

+		h += '<param name="' + n + '" value="' + p[n] + '">';

+

+	h += '<embed type="' + mt + '"';

+

+	for (n in p)

+		h += n + '="' + p[n] + '" ';

+

+	h += '></embed></object>';

+

+	document.write(h);

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/media/js/media.js
@@ -1,1 +1,465 @@
+(function() {

+	var url;

+

+	if (url = tinyMCEPopup.getParam("media_external_list_url"))

+		document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

+

+	function get(id) {

+		return document.getElementById(id);

+	}

+

+	function clone(obj) {

+		var i, len, copy, attr;

+

+		if (null == obj || "object" != typeof obj)

+			return obj;

+

+		// Handle Array

+		if ('length' in obj) {

+			copy = [];

+

+			for (i = 0, len = obj.length; i < len; ++i) {

+				copy[i] = clone(obj[i]);

+			}

+

+			return copy;

+		}

+

+		// Handle Object

+		copy = {};

+		for (attr in obj) {

+			if (obj.hasOwnProperty(attr))

+				copy[attr] = clone(obj[attr]);

+		}

+

+		return copy;

+	}

+

+	function getVal(id) {

+		var elm = get(id);

+

+		if (elm.nodeName == "SELECT")

+			return elm.options[elm.selectedIndex].value;

+

+		if (elm.type == "checkbox")

+			return elm.checked;

+

+		return elm.value;

+	}

+

+	function setVal(id, value, name) {

+		if (typeof(value) != 'undefined' && value != null) {

+			var elm = get(id);

+

+			if (elm.nodeName == "SELECT")

+				selectByValue(document.forms[0], id, value);

+			else if (elm.type == "checkbox") {

+				if (typeof(value) == 'string') {

+					value = value.toLowerCase();

+					value = (!name && value === 'true') || (name && value === name.toLowerCase());

+				}

+				elm.checked = !!value;

+			} else

+				elm.value = value;

+		}

+	}

+

+	window.Media = {

+		init : function() {

+			var html, editor, self = this;

+

+			self.editor = editor = tinyMCEPopup.editor;

+

+			// Setup file browsers and color pickers

+			get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');

+			get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media');

+			get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

+			get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource1','video_altsource1','media','media');

+			get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource2','video_altsource2','media','media');

+			get('audio_altsource1_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource1','audio_altsource1','media','media');

+			get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media');

+			get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','media','image');

+

+			html = self.getMediaListHTML('medialist', 'src', 'media', 'media');

+			if (html == "")

+				get("linklistrow").style.display = 'none';

+			else

+				get("linklistcontainer").innerHTML = html;

+

+			if (isVisible('filebrowser'))

+				get('src').style.width = '230px';

+

+			if (isVisible('video_filebrowser_altsource1'))

+				get('video_altsource1').style.width = '220px';

+

+			if (isVisible('video_filebrowser_altsource2'))

+				get('video_altsource2').style.width = '220px';

+

+			if (isVisible('audio_filebrowser_altsource1'))

+				get('audio_altsource1').style.width = '220px';

+

+			if (isVisible('audio_filebrowser_altsource2'))

+				get('audio_altsource2').style.width = '220px';

+

+			if (isVisible('filebrowser_poster'))

+				get('video_poster').style.width = '220px';

+

+			editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor));

+

+			self.setDefaultDialogSettings(editor);

+			self.data = clone(tinyMCEPopup.getWindowArg('data'));

+			self.dataToForm();

+			self.preview();

+

+			updateColor('bgcolor_pick', 'bgcolor');

+		},

+

+		insert : function() {

+			var editor = tinyMCEPopup.editor;

+

+			this.formToData();

+			editor.execCommand('mceRepaint');

+			tinyMCEPopup.restoreSelection();

+			editor.selection.setNode(editor.plugins.media.dataToImg(this.data));

+			tinyMCEPopup.close();

+		},

+

+		preview : function() {

+			get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true);

+		},

+

+		moveStates : function(to_form, field) {

+			var data = this.data, editor = this.editor,

+				mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src;

+

+			defaultStates = {

+				// QuickTime

+				quicktime_autoplay : true,

+				quicktime_controller : true,

+

+				// Flash

+				flash_play : true,

+				flash_loop : true,

+				flash_menu : true,

+

+				// WindowsMedia

+				windowsmedia_autostart : true,

+				windowsmedia_enablecontextmenu : true,

+				windowsmedia_invokeurls : true,

+

+				// RealMedia

+				realmedia_autogotourl : true,

+				realmedia_imagestatus : true

+			};

+

+			function parseQueryParams(str) {

+				var out = {};

+

+				if (str) {

+					tinymce.each(str.split('&'), function(item) {

+						var parts = item.split('=');

+

+						out[unescape(parts[0])] = unescape(parts[1]);

+					});

+				}

+

+				return out;

+			};

+

+			function setOptions(type, names) {

+				var i, name, formItemName, value, list;

+

+				if (type == data.type || type == 'global') {

+					names = tinymce.explode(names);

+					for (i = 0; i < names.length; i++) {

+						name = names[i];

+						formItemName = type == 'global' ? name : type + '_' + name;

+

+						if (type == 'global')

+						list = data;

+					else if (type == 'video' || type == 'audio') {

+							list = data.video.attrs;

+

+							if (!list && !to_form)

+							data.video.attrs = list = {};

+						} else

+						list = data.params;

+

+						if (list) {

+							if (to_form) {

+								setVal(formItemName, list[name], type == 'video' || type == 'audio' ? name : '');

+							} else {

+								delete list[name];

+

+								value = getVal(formItemName);

+								if ((type == 'video' || type == 'audio') && value === true)

+									value = name;

+

+								if (defaultStates[formItemName]) {

+									if (value !== defaultStates[formItemName]) {

+										value = "" + value;

+										list[name] = value;

+									}

+								} else if (value) {

+									value = "" + value;

+									list[name] = value;

+								}

+							}

+						}

+					}

+				}

+			}

+

+			if (!to_form) {

+				data.type = get('media_type').options[get('media_type').selectedIndex].value;

+				data.width = getVal('width');

+				data.height = getVal('height');

+

+				// Switch type based on extension

+				src = getVal('src');

+				if (field == 'src') {

+					ext = src.replace(/^.*\.([^.]+)$/, '$1');

+					if (typeInfo = mediaPlugin.getType(ext))

+						data.type = typeInfo.name.toLowerCase();

+

+					setVal('media_type', data.type);

+				}

+

+				if (data.type == "video" || data.type == "audio") {

+					if (!data.video.sources)

+						data.video.sources = [];

+

+					data.video.sources[0] = {src: getVal('src')};

+				}

+			}

+

+			// Hide all fieldsets and show the one active

+			get('video_options').style.display = 'none';

+			get('audio_options').style.display = 'none';

+			get('flash_options').style.display = 'none';

+			get('quicktime_options').style.display = 'none';

+			get('shockwave_options').style.display = 'none';

+			get('windowsmedia_options').style.display = 'none';

+			get('realmedia_options').style.display = 'none';

+			get('embeddedaudio_options').style.display = 'none';

+

+			if (get(data.type + '_options'))

+				get(data.type + '_options').style.display = 'block';

+

+			setVal('media_type', data.type);

+

+			setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars');

+			setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc');

+			setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign');

+			setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume');

+			setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks');

+			setOptions('video', 'poster,autoplay,loop,muted,preload,controls');

+			setOptions('audio', 'autoplay,loop,preload,controls');

+			setOptions('embeddedaudio', 'autoplay,loop,controls');

+			setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height');

+

+			if (to_form) {

+				if (data.type == 'video') {

+					if (data.video.sources[0])

+						setVal('src', data.video.sources[0].src);

+

+					src = data.video.sources[1];

+					if (src)

+						setVal('video_altsource1', src.src);

+

+					src = data.video.sources[2];

+					if (src)

+						setVal('video_altsource2', src.src);

+                } else if (data.type == 'audio') {

+                    if (data.video.sources[0])

+                        setVal('src', data.video.sources[0].src);

+                    

+                    src = data.video.sources[1];

+                    if (src)

+                        setVal('audio_altsource1', src.src);

+                    

+                    src = data.video.sources[2];

+                    if (src)

+                        setVal('audio_altsource2', src.src);

+				} else {

+					// Check flash vars

+					if (data.type == 'flash') {

+						tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) {

+							if (value == '$url')

+								data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || '';

+						});

+					}

+

+					setVal('src', data.params.src);

+				}

+			} else {

+				src = getVal("src");

+

+				// YouTube *NEW*

+				if (src.match(/youtu.be\/[a-z1-9.-_]+/)) {

+					data.width = 425;

+					data.height = 350;

+					data.params.frameborder = '0';

+					data.type = 'iframe';

+					src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1];

+					setVal('src', src);

+					setVal('media_type', data.type);

+				}

+

+				// YouTube

+				if (src.match(/youtube.com(.+)v=([^&]+)/)) {

+					data.width = 425;

+					data.height = 350;

+					data.params.frameborder = '0';

+					data.type = 'iframe';

+					src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1];

+					setVal('src', src);

+					setVal('media_type', data.type);

+				}

+

+				// Google video

+				if (src.match(/video.google.com(.+)docid=([^&]+)/)) {

+					data.width = 425;

+					data.height = 326;

+					data.type = 'flash';

+					src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en';

+					setVal('src', src);

+					setVal('media_type', data.type);

+				}

+

+				if (data.type == 'video') {

+					if (!data.video.sources)

+						data.video.sources = [];

+

+					data.video.sources[0] = {src : src};

+

+					src = getVal("video_altsource1");

+					if (src)

+						data.video.sources[1] = {src : src};

+

+					src = getVal("video_altsource2");

+					if (src)

+						data.video.sources[2] = {src : src};

+                } else if (data.type == 'audio') {

+                    if (!data.video.sources)

+                        data.video.sources = [];

+                    

+                    data.video.sources[0] = {src : src};

+                    

+                    src = getVal("audio_altsource1");

+                    if (src)

+                        data.video.sources[1] = {src : src};

+                    

+                    src = getVal("audio_altsource2");

+                    if (src)

+                        data.video.sources[2] = {src : src};

+				} else

+					data.params.src = src;

+

+				// Set default size

+                setVal('width', data.width || (data.type == 'audio' ? 300 : 320));

+                setVal('height', data.height || (data.type == 'audio' ? 32 : 240));

+			}

+		},

+

+		dataToForm : function() {

+			this.moveStates(true);

+		},

+

+		formToData : function(field) {

+			if (field == "width" || field == "height")

+				this.changeSize(field);

+

+			if (field == 'source') {

+				this.moveStates(false, field);

+				setVal('source', this.editor.plugins.media.dataToHtml(this.data));

+				this.panel = 'source';

+			} else {

+				if (this.panel == 'source') {

+					this.data = clone(this.editor.plugins.media.htmlToData(getVal('source')));

+					this.dataToForm();

+					this.panel = '';

+				}

+

+				this.moveStates(false, field);

+				this.preview();

+			}

+		},

+

+		beforeResize : function() {

+            this.width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);

+            this.height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);

+		},

+

+		changeSize : function(type) {

+			var width, height, scale, size;

+

+			if (get('constrain').checked) {

+                width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);

+                height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);

+

+				if (type == 'width') {

+					this.height = Math.round((width / this.width) * height);

+					setVal('height', this.height);

+				} else {

+					this.width = Math.round((height / this.height) * width);

+					setVal('width', this.width);

+				}

+			}

+		},

+

+		getMediaListHTML : function() {

+			if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {

+				var html = "";

+

+				html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;Media.formToData(\'src\');">';

+				html += '<option value="">---</option>';

+

+				for (var i=0; i<tinyMCEMediaList.length; i++)

+					html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';

+

+				html += '</select>';

+

+				return html;

+			}

+

+			return "";

+		},

+

+		getMediaTypeHTML : function(editor) {

+			function option(media_type){

+				return '<option value="'+media_type+'">'+tinyMCEPopup.editor.translate("media_dlg."+media_type)+'</option>'

+			}

+			var html = "";

+			html += '<select id="media_type" name="media_type" onchange="Media.formToData(\'type\');">';

+			html += option("video");

+			html += option("audio");

+			html += option("flash");

+			html += option("quicktime");

+			html += option("shockwave");

+			html += option("windowsmedia");

+			html += option("realmedia");

+			html += option("iframe");

+

+			if (editor.getParam('media_embedded_audio', false)) {

+				html += option('embeddedaudio');

+			}

+			

+			html += '</select>';

+			return html;

+		},

+

+		setDefaultDialogSettings : function(editor) {

+			var defaultDialogSettings = editor.getParam("media_dialog_defaults", {});

+			tinymce.each(defaultDialogSettings, function(v, k) {

+				setVal(k, v);

+			});

+		}

+	};

+

+	tinyMCEPopup.requireLangPack();

+	tinyMCEPopup.onInit.add(function() {

+		Media.init();

+	});

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/media/langs/en_dlg.js
@@ -1,1 +1,2 @@
+tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide", "embedded_audio_options":"Embedded Audio Options", video:"HTML5 Video", audio:"HTML5 Audio", flash:"Flash", quicktime:"QuickTime", shockwave:"Shockwave", windowsmedia:"Windows Media", realmedia:"Real Media", iframe:"Iframe", embeddedaudio:"Embedded Audio" }); 
 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/media/media.htm
@@ -1,1 +1,923 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#media_dlg.title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/media.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<link href="css/media.css" rel="stylesheet" type="text/css" />

+</head>

+<body style="display: none" role="application">

+<form onsubmit="Media.insert();return false;" action="#">

+		<div class="tabs" role="presentation">

+			<ul>

+				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.general}</a></span></li>

+				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>

+				<li id="source_tab" aria-controls="source_panel"><span><a href="javascript:mcTabs.displayTab('source_tab','source_panel');Media.formToData('source');" onmousedown="return false;">{#media_dlg.source}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="general_panel" class="panel current">

+				<fieldset>

+					<legend>{#media_dlg.general}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+							<tr>

+								<td><label for="media_type">{#media_dlg.type}</label></td>

+								<td>

+									<select id="media_type"></select>

+								</td>

+							</tr>

+							<tr>

+							<td><label for="src">{#media_dlg.file}</label></td>

+								<td>

+									<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="Media.formToData();" /></td>

+										<td id="filebrowsercontainer">&nbsp;</td>

+									</tr>

+									</table>

+								</td>

+							</tr>

+							<tr id="linklistrow">

+								<td><label for="linklist">{#media_dlg.list}</label></td>

+								<td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>

+							</tr>

+							<tr>

+								<td><label for="width">{#media_dlg.size}</label></td>

+								<td>

+									<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+										<tr>

+											<td><input type="text" id="width" name="width" value="" class="size" onchange="Media.formToData('width');" onfocus="Media.beforeResize();" /> x <input type="text" id="height" name="height" value="" class="size" onfocus="Media.beforeResize();" onchange="Media.formToData('height');" /></td>

+											<td>&nbsp;&nbsp;<input id="constrain" type="checkbox" name="constrain" class="checkbox" checked="checked" /></td>

+											<td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>

+										</tr>

+									</table>

+								</td>

+							</tr>

+					</table>

+				</fieldset>

+

+				<fieldset>

+					<legend>{#media_dlg.preview}</legend>

+					<div id="prev"></div>

+				</fieldset>

+			</div>

+

+			<div id="advanced_panel" class="panel">

+				<fieldset>

+					<legend>{#media_dlg.advanced}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">

+						<tr>

+							<td><label for="id">{#media_dlg.id}</label></td>

+							<td><input type="text" id="id" name="id" onchange="Media.formToData();" /></td>

+							<td><label for="name">{#media_dlg.name}</label></td>

+							<td><input type="text" id="name" name="name" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="align">{#media_dlg.align}</label></td>

+							<td>

+								<select id="align" name="align" onchange="Media.formToData();">

+									<option value="">{#not_set}</option> 

+									<option value="top">{#media_dlg.align_top}</option>

+									<option value="right">{#media_dlg.align_right}</option>

+									<option value="bottom">{#media_dlg.align_bottom}</option>

+									<option value="left">{#media_dlg.align_left}</option>

+								</select>

+							</td>

+

+							<td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');Media.formToData();" /></td>

+										<td id="bgcolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="vspace">{#media_dlg.vspace}</label></td>

+							<td><input type="text" id="vspace" name="vspace" class="number" onchange="Media.formToData();" /></td>

+							<td><label for="hspace">{#media_dlg.hspace}</label></td>

+							<td><input type="text" id="hspace" name="hspace" class="number" onchange="Media.formToData();" /></td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset id="video_options">

+					<legend>{#media_dlg.html5_video_options}</legend>

+

+					<table role="presentation">

+						<tr>

+							<td><label for="video_altsource1">{#media_dlg.altsource1}</label></td>

+							<td>

+								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input type="text" id="video_altsource1" name="video_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>

+										<td id="video_altsource1_filebrowser">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="video_altsource2">{#media_dlg.altsource2}</label></td>

+							<td>

+								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input type="text" id="video_altsource2" name="video_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>

+										<td id="video_altsource2_filebrowser">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="video_poster">{#media_dlg.poster}</label></td>

+							<td>

+								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input type="text" id="video_poster" name="video_poster" onchange="Media.formToData();" style="width: 240px" /></td>

+										<td id="video_poster_filebrowser">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="video_preload">{#media_dlg.preload}</label></td>

+							<td>

+								<select id="video_preload" name="video_preload" onchange="Media.formToData();">

+									<option value="none">{#media_dlg.preload_none}</option> 

+									<option value="metadata">{#media_dlg.preload_metadata}</option>

+									<option value="auto">{#media_dlg.preload_auto}</option>

+								</select>

+							</td>

+						</tr>

+					</table>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="video_autoplay" name="video_autoplay" onchange="Media.formToData();" /></td>

+										<td><label for="video_autoplay">{#media_dlg.play}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="video_muted" name="video_muted" onchange="Media.formToData();" /></td>

+										<td><label for="video_muted">{#media_dlg.mute}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td>

+									<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+											<tr>

+													<td><input type="checkbox" class="checkbox" id="video_loop" name="video_loop" onchange="Media.formToData();" /></td>

+													<td><label for="video_loop">{#media_dlg.loop}</label></td>

+											</tr>

+									</table>

+							</td>

+

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="video_controls" name="video_controls" onchange="Media.formToData();" /></td>

+										<td><label for="video_controls">{#media_dlg.controls}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset id="embeddedaudio_options">

+					<legend>{#media_dlg.embedded_audio_options}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="embeddedaudio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>

+										<td><label for="audio_autoplay">{#media_dlg.play}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="embeddedaudio_loop" name="audio_loop" onchange="Media.formToData();" /></td>

+										<td><label for="audio_loop">{#media_dlg.loop}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="embeddedaudio_controls" name="audio_controls" onchange="Media.formToData();" /></td>

+										<td><label for="audio_controls">{#media_dlg.controls}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset id="audio_options">

+					<legend>{#media_dlg.html5_audio_options}</legend>

+

+					<table role="presentation">

+						<tr>

+							<td><label for="audio_altsource1">{#media_dlg.altsource1}</label></td>

+							<td>

+								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input type="text" id="audio_altsource1" name="audio_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>

+										<td id="audio_altsource1_filebrowser">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="audio_altsource2">{#media_dlg.altsource2}</label></td>

+							<td>

+								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input type="text" id="audio_altsource2" name="audio_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>

+										<td id="audio_altsource2_filebrowser">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="audio_preload">{#media_dlg.preload}</label></td>

+							<td>

+								<select id="audio_preload" name="audio_preload" onchange="Media.formToData();">

+									<option value="none">{#media_dlg.preload_none}</option>

+									<option value="metadata">{#media_dlg.preload_metadata}</option>

+									<option value="auto">{#media_dlg.preload_auto}</option>

+								</select>

+							</td>

+						</tr>

+					</table>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="audio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>

+										<td><label for="audio_autoplay">{#media_dlg.play}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="audio_loop" name="audio_loop" onchange="Media.formToData();" /></td>

+										<td><label for="audio_loop">{#media_dlg.loop}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="audio_controls" name="audio_controls" onchange="Media.formToData();" /></td>

+										<td><label for="audio_controls">{#media_dlg.controls}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset id="flash_options">

+					<legend>{#media_dlg.flash_options}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td><label for="flash_quality">{#media_dlg.quality}</label></td>

+							<td>

+								<select id="flash_quality" name="flash_quality" onchange="Media.formToData();">

+									<option value="">{#not_set}</option> 

+									<option value="high">high</option>

+									<option value="low">low</option>

+									<option value="autolow">autolow</option>

+									<option value="autohigh">autohigh</option>

+									<option value="best">best</option>

+								</select>

+							</td>

+

+							<td><label for="flash_scale">{#media_dlg.scale}</label></td>

+							<td>

+								<select id="flash_scale" name="flash_scale" onchange="Media.formToData();">

+									<option value="">{#not_set}</option> 

+									<option value="showall">showall</option>

+									<option value="noborder">noborder</option>

+									<option value="exactfit">exactfit</option>

+									<option value="noscale">noscale</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="flash_wmode">{#media_dlg.wmode}</label></td>

+							<td>

+								<select id="flash_wmode" name="flash_wmode" onchange="Media.formToData();">

+									<option value="">{#not_set}</option> 

+									<option value="window">window</option>

+									<option value="opaque">opaque</option>

+									<option value="transparent">transparent</option>

+								</select>

+							</td>

+

+							<td><label for="flash_salign">{#media_dlg.salign}</label></td>

+							<td>

+								<select id="flash_salign" name="flash_salign" onchange="Media.formToData();">

+									<option value="">{#not_set}</option> 

+									<option value="l">{#media_dlg.align_left}</option>

+									<option value="t">{#media_dlg.align_top}</option>

+									<option value="r">{#media_dlg.align_right}</option>

+									<option value="b">{#media_dlg.align_bottom}</option>

+									<option value="tl">{#media_dlg.align_top_left}</option>

+									<option value="tr">{#media_dlg.align_top_right}</option>

+									<option value="bl">{#media_dlg.align_bottom_left}</option>

+									<option value="br">{#media_dlg.align_bottom_right}</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="flash_play">{#media_dlg.play}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="flash_loop">{#media_dlg.loop}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="flash_menu">{#media_dlg.menu}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="Media.formToData();" /></td>

+										<td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+					</table>

+

+					<table role="presentation">

+						<tr>

+							<td><label for="flash_base">{#media_dlg.base}</label></td>

+							<td><input type="text" id="flash_base" name="flash_base" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>

+							<td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="Media.formToData();" /></td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset id="quicktime_options">

+					<legend>{#media_dlg.qt_options}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_loop" name="quicktime_loop" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_loop">{#media_dlg.loop}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_autoplay" name="quicktime_autoplay" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_autoplay">{#media_dlg.play}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_cache" name="quicktime_cache" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_cache">{#media_dlg.cache}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_controller" name="quicktime_controller" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_controller">{#media_dlg.controller}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_correction" name="quicktime_correction" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_correction">{#media_dlg.correction}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_enablejavascript" name="quicktime_enablejavascript" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_enablejavascript">{#media_dlg.enablejavascript}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_kioskmode" name="quicktime_kioskmode" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_kioskmode">{#media_dlg.kioskmode}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_autohref" name="quicktime_autohref" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_autohref">{#media_dlg.autohref}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_playeveryframe" name="quicktime_playeveryframe" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_playeveryframe">{#media_dlg.playeveryframe}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="quicktime_targetcache" name="quicktime_targetcache" onchange="Media.formToData();" /></td>

+										<td><label for="quicktime_targetcache">{#media_dlg.targetcache}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="quicktime_scale">{#media_dlg.scale}</label></td>

+							<td><select id="quicktime_scale" name="quicktime_scale" class="mceEditableSelect" onchange="Media.formToData();">

+									<option value="">{#not_set}</option> 

+									<option value="tofit">tofit</option>

+									<option value="aspect">aspect</option>

+								</select>

+							</td>

+

+							<td colspan="2">&nbsp;</td>

+						</tr>

+

+						<tr>

+							<td><label for="quicktime_starttime">{#media_dlg.starttime}</label></td>

+							<td><input type="text" id="quicktime_starttime" name="quicktime_starttime" onchange="Media.formToData();" /></td>

+

+							<td><label for="quicktime_endtime">{#media_dlg.endtime}</label></td>

+							<td><input type="text" id="quicktime_endtime" name="quicktime_endtime" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="quicktime_target">{#media_dlg.target}</label></td>

+							<td><input type="text" id="quicktime_target" name="quicktime_target" onchange="Media.formToData();" /></td>

+

+							<td><label for="quicktime_href">{#media_dlg.href}</label></td>

+							<td><input type="text" id="quicktime_href" name="quicktime_href" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="quicktime_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>

+							<td><input type="text" id="quicktime_qtsrcchokespeed" name="quicktime_qtsrcchokespeed" onchange="Media.formToData();" /></td>

+

+							<td><label for="quicktime_volume">{#media_dlg.volume}</label></td>

+							<td><input type="text" id="quicktime_volume" name="quicktime_volume" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="quicktime_qtsrc">{#media_dlg.qtsrc}</label></td>

+							<td colspan="4">

+								<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+									<tr>

+										<td><input type="text" id="quicktime_qtsrc" name="quicktime_qtsrc" onchange="Media.formToData();" /></td>

+										<td id="qtsrcfilebrowsercontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset id="windowsmedia_options">

+					<legend>{#media_dlg.wmp_options}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_autostart" name="windowsmedia_autostart" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_autostart">{#media_dlg.autostart}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_enabled" name="windowsmedia_enabled" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_enabled">{#media_dlg.enabled}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_enablecontextmenu" name="windowsmedia_enablecontextmenu" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_enablecontextmenu">{#media_dlg.menu}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_fullscreen" name="windowsmedia_fullscreen" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_fullscreen">{#media_dlg.fullscreen}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_invokeurls" name="windowsmedia_invokeurls" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_invokeurls">{#media_dlg.invokeurls}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_mute" name="windowsmedia_mute" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_mute">{#media_dlg.mute}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_stretchtofit" name="windowsmedia_stretchtofit" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_stretchtofit">{#media_dlg.stretchtofit}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="windowsmedia_windowlessvideo" name="windowsmedia_windowlessvideo" onchange="Media.formToData();" /></td>

+										<td><label for="windowsmedia_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="windowsmedia_balance">{#media_dlg.balance}</label></td>

+							<td><input type="text" id="windowsmedia_balance" name="windowsmedia_balance" onchange="Media.formToData();" /></td>

+

+							<td><label for="windowsmedia_baseurl">{#media_dlg.baseurl}</label></td>

+							<td><input type="text" id="windowsmedia_baseurl" name="windowsmedia_baseurl" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="windowsmedia_captioningid">{#media_dlg.captioningid}</label></td>

+							<td><input type="text" id="windowsmedia_captioningid" name="windowsmedia_captioningid" onchange="Media.formToData();" /></td>

+

+							<td><label for="windowsmedia_currentmarker">{#media_dlg.currentmarker}</label></td>

+							<td><input type="text" id="windowsmedia_currentmarker" name="windowsmedia_currentmarker" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="windowsmedia_currentposition">{#media_dlg.currentposition}</label></td>

+							<td><input type="text" id="windowsmedia_currentposition" name="windowsmedia_currentposition" onchange="Media.formToData();" /></td>

+

+							<td><label for="windowsmedia_defaultframe">{#media_dlg.defaultframe}</label></td>

+							<td><input type="text" id="windowsmedia_defaultframe" name="windowsmedia_defaultframe" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="windowsmedia_playcount">{#media_dlg.playcount}</label></td>

+							<td><input type="text" id="windowsmedia_playcount" name="windowsmedia_playcount" onchange="Media.formToData();" /></td>

+

+							<td><label for="windowsmedia_rate">{#media_dlg.rate}</label></td>

+							<td><input type="text" id="windowsmedia_rate" name="windowsmedia_rate" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="windowsmedia_uimode">{#media_dlg.uimode}</label></td>

+							<td><input type="text" id="windowsmedia_uimode" name="windowsmedia_uimode" onchange="Media.formToData();" /></td>

+

+							<td><label for="windowsmedia_volume">{#media_dlg.volume}</label></td>

+							<td><input type="text" id="windowsmedia_volume" name="windowsmedia_volume" onchange="Media.formToData();" /></td>

+						</tr>

+

+					</table>

+				</fieldset>

+

+				<fieldset id="realmedia_options">

+					<legend>{#media_dlg.rmp_options}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_autostart" name="realmedia_autostart" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_autostart">{#media_dlg.autostart}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_loop" name="realmedia_loop" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_loop">{#media_dlg.loop}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_autogotourl" name="realmedia_autogotourl" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_autogotourl">{#media_dlg.autogotourl}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_center" name="realmedia_center" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_center">{#media_dlg.center}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_imagestatus" name="realmedia_imagestatus" checked="checked" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_imagestatus">{#media_dlg.imagestatus}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_maintainaspect" name="realmedia_maintainaspect" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_maintainaspect">{#media_dlg.maintainaspect}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_nojava" name="realmedia_nojava" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_nojava">{#media_dlg.nojava}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_prefetch" name="realmedia_prefetch" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_prefetch">{#media_dlg.prefetch}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="realmedia_shuffle" name="realmedia_shuffle" onchange="Media.formToData();" /></td>

+										<td><label for="realmedia_shuffle">{#media_dlg.shuffle}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								&nbsp;

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="realmedia_console">{#media_dlg.console}</label></td>

+							<td><input type="text" id="realmedia_console" name="realmedia_console" onchange="Media.formToData();" /></td>

+

+							<td><label for="realmedia_controls">{#media_dlg.controls}</label></td>

+							<td><input type="text" id="realmedia_controls" name="realmedia_controls" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="realmedia_numloop">{#media_dlg.numloop}</label></td>

+							<td><input type="text" id="realmedia_numloop" name="realmedia_numloop" onchange="Media.formToData();" /></td>

+

+							<td><label for="realmedia_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>

+							<td><input type="text" id="realmedia_scriptcallbacks" name="realmedia_scriptcallbacks" onchange="Media.formToData();" /></td>

+						</tr>

+					</table>

+				</fieldset>

+

+				<fieldset id="shockwave_options">

+					<legend>{#media_dlg.shockwave_options}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>

+							<td>

+								<select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="Media.formToData();">

+									<option value="none">{#not_set}</option>

+									<option value="meet">Meet</option>

+									<option value="fill">Fill</option>

+									<option value="stage">Stage</option>

+								</select>

+							</td>

+

+							<td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>

+							<td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="Media.formToData();" /></td>

+						</tr>

+

+						<tr>

+							<td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>

+							<td>

+								<select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="Media.formToData();">

+									<option value="none">{#not_set}</option>

+									<option value="left">{#media_dlg.align_left}</option>

+									<option value="center">{#media_dlg.align_center}</option>

+									<option value="right">{#media_dlg.align_right}</option>

+								</select>

+							</td>

+

+							<td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>

+							<td>

+								<select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="Media.formToData();">

+									<option value="none">{#not_set}</option>

+									<option value="meet">Meet</option>

+									<option value="fill">Fill</option>

+									<option value="stage">Stage</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="Media.formToData();" checked="checked" /></td>

+										<td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="Media.formToData();" checked="checked" /></td>

+										<td><label for="shockwave_sound">{#media_dlg.sound}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+

+

+						<tr>

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="Media.formToData();" /></td>

+										<td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>

+									</tr>

+								</table>

+							</td>

+

+							<td colspan="2">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="Media.formToData();" checked="checked" /></td>

+										<td><label for="shockwave_progress">{#media_dlg.progress}</label></td>

+									</tr>

+								</table>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="source_panel" class="panel">

+				<fieldset>

+					<legend>{#media_dlg.source}</legend>

+					<textarea id="source" style="width: 99%; height: 390px"></textarea>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<input type="submit" id="insert" name="insert" value="{#insert}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body>

+</html>

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/media/moxieplayer.swf differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
@@ -1,1 +1,54 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.Nonbreaking', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceNonBreaking', function() {

+				ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');

+			});

+

+			// Register buttons

+			ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});

+

+			if (ed.getParam('nonbreaking_force_tab')) {

+				ed.onKeyDown.add(function(ed, e) {

+					if (e.keyCode == 9) {

+						e.preventDefault();

+	

+						ed.execCommand('mceNonBreaking');

+						ed.execCommand('mceNonBreaking');

+						ed.execCommand('mceNonBreaking');

+					}

+				});

+			}

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Nonbreaking space',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+

+		// Private methods

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b,g;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(i,h,l){var k,j;k=i.dom.getParent(i.selection.getStart(),function(m){return i.dom.hasClass(m,b)});j=i.dom.getParent(i.selection.getEnd(),function(m){return i.dom.hasClass(m,b)});if(k||j){g=1;f._setDisabled(1);return false}else{if(g==1){f._setDisabled(0);g=0}}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block);b.onContextMenu.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block);b.onContextMenu.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
@@ -1,1 +1,95 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var Event = tinymce.dom.Event;

+

+	tinymce.create('tinymce.plugins.NonEditablePlugin', {

+		init : function(ed, url) {

+			var t = this, editClass, nonEditClass, state;

+

+			t.editor = ed;

+			editClass = ed.getParam("noneditable_editable_class", "mceEditable");

+			nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable");

+

+			ed.onNodeChange.addToTop(function(ed, cm, n) {

+				var sc, ec;

+

+				// Block if start or end is inside a non editable element

+				sc = ed.dom.getParent(ed.selection.getStart(), function(n) {

+					return ed.dom.hasClass(n, nonEditClass);

+				});

+

+				ec = ed.dom.getParent(ed.selection.getEnd(), function(n) {

+					return ed.dom.hasClass(n, nonEditClass);

+				});

+

+				// Block or unblock

+				if (sc || ec) {

+					state = 1;

+					t._setDisabled(1);

+					return false;

+				} else if (state == 1) {

+					t._setDisabled(0);

+					state = 0;

+				}

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Non editable elements',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		_block : function(ed, e) {

+			var k = e.keyCode;

+

+			// Don't block arrow keys, pg up/down, and F1-F12

+			if ((k > 32 && k < 41) || (k > 111 && k < 124))

+				return;

+

+			return Event.cancel(e);

+		},

+

+		_setDisabled : function(s) {

+			var t = this, ed = t.editor;

+

+			tinymce.each(ed.controlManager.controls, function(c) {

+				c.setDisabled(s);

+			});

+

+			if (s !== t.disabled) {

+				if (s) {

+					ed.onKeyDown.addToTop(t._block);

+					ed.onKeyPress.addToTop(t._block);

+					ed.onKeyUp.addToTop(t._block);

+					ed.onPaste.addToTop(t._block);

+					ed.onContextMenu.addToTop(t._block);

+				} else {

+					ed.onKeyDown.remove(t._block);

+					ed.onKeyPress.remove(t._block);

+					ed.onKeyUp.remove(t._block);

+					ed.onPaste.remove(t._block);

+					ed.onContextMenu.remove(t._block);

+				}

+

+				t.disabled = s;

+			}

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+b.theme.url+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
@@ -1,1 +1,74 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.PageBreakPlugin', {

+		init : function(ed, url) {

+			var pb = '<img src="' + ed.theme.url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;

+

+			pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');

+

+			// Register commands

+			ed.addCommand('mcePageBreak', function() {

+				ed.execCommand('mceInsertContent', 0, pb);

+			});

+

+			// Register buttons

+			ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});

+

+			ed.onInit.add(function() {

+				if (ed.theme.onResolveName) {

+					ed.theme.onResolveName.add(function(th, o) {

+						if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))

+							o.name = 'pagebreak';

+					});

+				}

+			});

+

+			ed.onClick.add(function(ed, e) {

+				e = e.target;

+

+				if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))

+					ed.selection.select(e);

+			});

+

+			ed.onNodeChange.add(function(ed, cm, n) {

+				cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));

+			});

+

+			ed.onBeforeSetContent.add(function(ed, o) {

+				o.content = o.content.replace(pbRE, pb);

+			});

+

+			ed.onPostProcess.add(function(ed, o) {

+				if (o.get)

+					o.content = o.content.replace(/<img[^>]+>/g, function(im) {

+						if (im.indexOf('class="mcePageBreak') !== -1)

+							im = sep;

+

+						return im;

+					});

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'PageBreak',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/paste/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"<br />")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"<br />"]])}else{if(e=="p"){h([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{h([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}d.execCommand("mceInsertContent",false,g)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
@@ -1,1 +1,872 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var each = tinymce.each,

+		defs = {

+			paste_auto_cleanup_on_paste : true,

+			paste_enable_default_filters : true,

+			paste_block_drop : false,

+			paste_retain_style_properties : "none",

+			paste_strip_class_attributes : "mso",

+			paste_remove_spans : false,

+			paste_remove_styles : false,

+			paste_remove_styles_if_webkit : true,

+			paste_convert_middot_lists : true,

+			paste_convert_headers_to_strong : false,

+			paste_dialog_width : "450",

+			paste_dialog_height : "400",

+			paste_text_use_dialog : false,

+			paste_text_sticky : false,

+			paste_text_sticky_default : false,

+			paste_text_notifyalways : false,

+			paste_text_linebreaktype : "combined",

+			paste_text_replacements : [

+				[/\u2026/g, "..."],

+				[/[\x93\x94\u201c\u201d]/g, '"'],

+				[/[\x60\x91\x92\u2018\u2019]/g, "'"]

+			]

+		};

+

+	function getParam(ed, name) {

+		return ed.getParam(name, defs[name]);

+	}

+

+	tinymce.create('tinymce.plugins.PastePlugin', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+			t.url = url;

+

+			// Setup plugin events

+			t.onPreProcess = new tinymce.util.Dispatcher(t);

+			t.onPostProcess = new tinymce.util.Dispatcher(t);

+

+			// Register default handlers

+			t.onPreProcess.add(t._preProcess);

+			t.onPostProcess.add(t._postProcess);

+

+			// Register optional preprocess handler

+			t.onPreProcess.add(function(pl, o) {

+				ed.execCallback('paste_preprocess', pl, o);

+			});

+

+			// Register optional postprocess

+			t.onPostProcess.add(function(pl, o) {

+				ed.execCallback('paste_postprocess', pl, o);

+			});

+

+			ed.onKeyDown.addToTop(function(ed, e) {

+				// Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that

+				if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))

+					return false; // Stop other listeners

+			});

+

+			// Initialize plain text flag

+			ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default');

+

+			// This function executes the process handlers and inserts the contents

+			// force_rich overrides plain text mode set by user, important for pasting with execCommand

+			function process(o, force_rich) {

+				var dom = ed.dom, rng;

+

+				// Execute pre process handlers

+				t.onPreProcess.dispatch(t, o);

+

+				// Create DOM structure

+				o.node = dom.create('div', 0, o.content);

+

+				// If pasting inside the same element and the contents is only one block

+				// remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element

+				if (tinymce.isGecko) {

+					rng = ed.selection.getRng(true);

+					if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) {

+						// Is only one block node and it doesn't contain word stuff

+						if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1)

+							dom.remove(o.node.firstChild, true);

+					}

+				}

+

+				// Execute post process handlers

+				t.onPostProcess.dispatch(t, o);

+

+				// Serialize content

+				o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''});

+

+				// Plain text option active?

+				if ((!force_rich) && (ed.pasteAsPlainText)) {

+					t._insertPlainText(o.content);

+

+					if (!getParam(ed, "paste_text_sticky")) {

+						ed.pasteAsPlainText = false;

+						ed.controlManager.setActive("pastetext", false);

+					}

+				} else {

+					t._insert(o.content);

+				}

+			}

+

+			// Add command for external usage

+			ed.addCommand('mceInsertClipboardContent', function(u, o) {

+				process(o, true);

+			});

+

+			if (!getParam(ed, "paste_text_use_dialog")) {

+				ed.addCommand('mcePasteText', function(u, v) {

+					var cookie = tinymce.util.Cookie;

+

+					ed.pasteAsPlainText = !ed.pasteAsPlainText;

+					ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);

+

+					if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {

+						if (getParam(ed, "paste_text_sticky")) {

+							ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));

+						} else {

+							ed.windowManager.alert(ed.translate('paste.plaintext_mode'));

+						}

+

+						if (!getParam(ed, "paste_text_notifyalways")) {

+							cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))

+						}

+					}

+				});

+			}

+

+			ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});

+			ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});

+

+			// This function grabs the contents from the clipboard by adding a

+			// hidden div and placing the caret inside it and after the browser paste

+			// is done it grabs that contents and processes that

+			function grabContent(e) {

+				var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent;

+

+				// Check if browser supports direct plaintext access

+				if (e.clipboardData || dom.doc.dataTransfer) {

+					textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text');

+

+					if (ed.pasteAsPlainText) {

+						e.preventDefault();

+						process({content : dom.encode(textContent).replace(/\r?\n/g, '<br />')});

+						return;

+					}

+				}

+

+				if (dom.get('_mcePaste'))

+					return;

+

+				// Create container to paste into

+				n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF');

+

+				// If contentEditable mode we need to find out the position of the closest element

+				if (body != ed.getDoc().body)

+					posY = dom.getPos(ed.selection.getStart(), body).y;

+				else

+					posY = body.scrollTop + dom.getViewPort(ed.getWin()).y;

+

+				// Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles

+				// If also needs to be in view on IE or the paste would fail

+				dom.setStyles(n, {

+					position : 'absolute',

+					left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div

+					top : posY - 25,

+					width : 1,

+					height : 1,

+					overflow : 'hidden'

+				});

+

+				if (tinymce.isIE) {

+					// Store away the old range

+					oldRng = sel.getRng();

+

+					// Select the container

+					rng = dom.doc.body.createTextRange();

+					rng.moveToElementText(n);

+					rng.execCommand('Paste');

+

+					// Remove container

+					dom.remove(n);

+

+					// Check if the contents was changed, if it wasn't then clipboard extraction failed probably due

+					// to IE security settings so we pass the junk though better than nothing right

+					if (n.innerHTML === '\uFEFF\uFEFF') {

+						ed.execCommand('mcePasteWord');

+						e.preventDefault();

+						return;

+					}

+

+					// Restore the old range and clear the contents before pasting

+					sel.setRng(oldRng);

+					sel.setContent('');

+

+					// For some odd reason we need to detach the the mceInsertContent call from the paste event

+					// It's like IE has a reference to the parent element that you paste in and the selection gets messed up

+					// when it tries to restore the selection

+					setTimeout(function() {

+						// Process contents

+						process({content : n.innerHTML});

+					}, 0);

+

+					// Block the real paste event

+					return tinymce.dom.Event.cancel(e);

+				} else {

+					function block(e) {

+						e.preventDefault();

+					};

+

+					// Block mousedown and click to prevent selection change

+					dom.bind(ed.getDoc(), 'mousedown', block);

+					dom.bind(ed.getDoc(), 'keydown', block);

+

+					or = ed.selection.getRng();

+

+					// Move select contents inside DIV

+					n = n.firstChild;

+					rng = ed.getDoc().createRange();

+					rng.setStart(n, 0);

+					rng.setEnd(n, 2);

+					sel.setRng(rng);

+

+					// Wait a while and grab the pasted contents

+					window.setTimeout(function() {

+						var h = '', nl;

+

+						// Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit

+						if (!dom.select('div.mcePaste > div.mcePaste').length) {

+							nl = dom.select('div.mcePaste');

+

+							// WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string

+							each(nl, function(n) {

+								var child = n.firstChild;

+

+								// WebKit inserts a DIV container with lots of odd styles

+								if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {

+									dom.remove(child, 1);

+								}

+

+								// Remove apply style spans

+								each(dom.select('span.Apple-style-span', n), function(n) {

+									dom.remove(n, 1);

+								});

+

+								// Remove bogus br elements

+								each(dom.select('br[data-mce-bogus]', n), function(n) {

+									dom.remove(n);

+								});

+

+								// WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV

+								if (n.parentNode.className != 'mcePaste')

+									h += n.innerHTML;

+							});

+						} else {

+							// Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc

+							// So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same

+							h = '<p>' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '</p><p>').replace(/\r?\n/g, '<br />') + '</p>';

+						}

+

+						// Remove the nodes

+						each(dom.select('div.mcePaste'), function(n) {

+							dom.remove(n);

+						});

+

+						// Restore the old selection

+						if (or)

+							sel.setRng(or);

+

+						process({content : h});

+

+						// Unblock events ones we got the contents

+						dom.unbind(ed.getDoc(), 'mousedown', block);

+						dom.unbind(ed.getDoc(), 'keydown', block);

+					}, 0);

+				}

+			}

+

+			// Check if we should use the new auto process method			

+			if (getParam(ed, "paste_auto_cleanup_on_paste")) {

+				// Is it's Opera or older FF use key handler

+				if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {

+					ed.onKeyDown.addToTop(function(ed, e) {

+						if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))

+							grabContent(e);

+					});

+				} else {

+					// Grab contents on paste event on Gecko and WebKit

+					ed.onPaste.addToTop(function(ed, e) {

+						return grabContent(e);

+					});

+				}

+			}

+

+			ed.onInit.add(function() {

+				ed.controlManager.setActive("pastetext", ed.pasteAsPlainText);

+

+				// Block all drag/drop events

+				if (getParam(ed, "paste_block_drop")) {

+					ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {

+						e.preventDefault();

+						e.stopPropagation();

+

+						return false;

+					});

+				}

+			});

+

+			// Add legacy support

+			t._legacySupport();

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Paste text/word',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		_preProcess : function(pl, o) {

+			var ed = this.editor,

+				h = o.content,

+				grep = tinymce.grep,

+				explode = tinymce.explode,

+				trim = tinymce.trim,

+				len, stripClass;

+

+			//console.log('Before preprocess:' + o.content);

+

+			function process(items) {

+				each(items, function(v) {

+					// Remove or replace

+					if (v.constructor == RegExp)

+						h = h.replace(v, '');

+					else

+						h = h.replace(v[0], v[1]);

+				});

+			}

+			

+			if (ed.settings.paste_enable_default_filters == false) {

+				return;

+			}

+

+			// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser

+			if (tinymce.isIE && document.documentMode >= 9) {

+				// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser

+				process([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g, '$1']]);

+

+				// IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break

+				process([

+					[/<br><br>/g, '<BR><BR>'], // Replace multiple BR elements with uppercase BR to keep them intact

+					[/<br>/g, ' '], // Replace single br elements with space since they are word wrap BR:s

+					[/<BR><BR>/g, '<br>'] // Replace back the double brs but into a single BR

+				]);

+			}

+

+			// Detect Word content and process it more aggressive

+			if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {

+				o.wordContent = true;			// Mark the pasted contents as word specific content

+				//console.log('Word contents detected.');

+

+				// Process away some basic content

+				process([

+					/^\s*(&nbsp;)+/gi,				// &nbsp; entities at the start of contents

+					/(&nbsp;|<br[^>]*>)+\s*$/gi		// &nbsp; entities at the end of contents

+				]);

+

+				if (getParam(ed, "paste_convert_headers_to_strong")) {

+					h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");

+				}

+

+				if (getParam(ed, "paste_convert_middot_lists")) {

+					process([

+						[/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'],					// Convert supportLists to a list item marker

+						[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'],		// Convert mso-list and symbol spans to item markers

+						[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__']				// Convert mso-list and symbol paragraphs to item markers (FF)

+					]);

+				}

+

+				process([

+					// Word comments like conditional comments etc

+					/<!--[\s\S]+?-->/gi,

+

+					// Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags

+					/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,

+

+					// Convert <s> into <strike> for line-though

+					[/<(\/?)s>/gi, "<$1strike>"],

+

+					// Replace nsbp entites to char since it's easier to handle

+					[/&nbsp;/gi, "\u00a0"]

+				]);

+

+				// Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.

+				// If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.

+				do {

+					len = h.length;

+					h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");

+				} while (len != h.length);

+

+				// Remove all spans if no styles is to be retained

+				if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {

+					h = h.replace(/<\/?span[^>]*>/gi, "");

+				} else {

+					// We're keeping styles, so at least clean them up.

+					// CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx

+

+					process([

+						// Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length

+						[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,

+							function(str, spaces) {

+								return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";

+							}

+						],

+

+						// Examine all styles: delete junk, transform some, and keep the rest

+						[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,

+							function(str, tag, style) {

+								var n = [],

+									i = 0,

+									s = explode(trim(style).replace(/&quot;/gi, "'"), ";");

+

+								// Examine each style definition within the tag's style attribute

+								each(s, function(v) {

+									var name, value,

+										parts = explode(v, ":");

+

+									function ensureUnits(v) {

+										return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";

+									}

+

+									if (parts.length == 2) {

+										name = parts[0].toLowerCase();

+										value = parts[1].toLowerCase();

+

+										// Translate certain MS Office styles into their CSS equivalents

+										switch (name) {

+											case "mso-padding-alt":

+											case "mso-padding-top-alt":

+											case "mso-padding-right-alt":

+											case "mso-padding-bottom-alt":

+											case "mso-padding-left-alt":

+											case "mso-margin-alt":

+											case "mso-margin-top-alt":

+											case "mso-margin-right-alt":

+											case "mso-margin-bottom-alt":

+											case "mso-margin-left-alt":

+											case "mso-table-layout-alt":

+											case "mso-height":

+											case "mso-width":

+											case "mso-vertical-align-alt":

+												n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);

+												return;

+

+											case "horiz-align":

+												n[i++] = "text-align:" + value;

+												return;

+

+											case "vert-align":

+												n[i++] = "vertical-align:" + value;

+												return;

+

+											case "font-color":

+											case "mso-foreground":

+												n[i++] = "color:" + value;

+												return;

+

+											case "mso-background":

+											case "mso-highlight":

+												n[i++] = "background:" + value;

+												return;

+

+											case "mso-default-height":

+												n[i++] = "min-height:" + ensureUnits(value);

+												return;

+

+											case "mso-default-width":

+												n[i++] = "min-width:" + ensureUnits(value);

+												return;

+

+											case "mso-padding-between-alt":

+												n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);

+												return;

+

+											case "text-line-through":

+												if ((value == "single") || (value == "double")) {

+													n[i++] = "text-decoration:line-through";

+												}

+												return;

+

+											case "mso-zero-height":

+												if (value == "yes") {

+													n[i++] = "display:none";

+												}

+												return;

+										}

+

+										// Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name

+										if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {

+											return;

+										}

+

+										// If it reached this point, it must be a valid CSS style

+										n[i++] = name + ":" + parts[1];		// Lower-case name, but keep value case

+									}

+								});

+

+								// If style attribute contained any valid styles the re-write it; otherwise delete style attribute.

+								if (i > 0) {

+									return tag + ' style="' + n.join(';') + '"';

+								} else {

+									return tag;

+								}

+							}

+						]

+					]);

+				}

+			}

+

+			// Replace headers with <strong>

+			if (getParam(ed, "paste_convert_headers_to_strong")) {

+				process([

+					[/<h[1-6][^>]*>/gi, "<p><strong>"],

+					[/<\/h[1-6][^>]*>/gi, "</strong></p>"]

+				]);

+			}

+

+			process([

+				// Copy paste from Java like Open Office will produce this junk on FF

+				[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, '']

+			]);

+

+			// Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").

+			// Note:-  paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.

+			stripClass = getParam(ed, "paste_strip_class_attributes");

+

+			if (stripClass !== "none") {

+				function removeClasses(match, g1) {

+						if (stripClass === "all")

+							return '';

+

+						var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),

+							function(v) {

+								return (/^(?!mso)/i.test(v));

+							}

+						);

+

+						return cls.length ? ' class="' + cls.join(" ") + '"' : '';

+				};

+

+				h = h.replace(/ class="([^"]+)"/gi, removeClasses);

+				h = h.replace(/ class=([\-\w]+)/gi, removeClasses);

+			}

+

+			// Remove spans option

+			if (getParam(ed, "paste_remove_spans")) {

+				h = h.replace(/<\/?span[^>]*>/gi, "");

+			}

+

+			//console.log('After preprocess:' + h);

+

+			o.content = h;

+		},

+

+		/**

+		 * Various post process items.

+		 */

+		_postProcess : function(pl, o) {

+			var t = this, ed = t.editor, dom = ed.dom, styleProps;

+

+			if (ed.settings.paste_enable_default_filters == false) {

+				return;

+			}

+			

+			if (o.wordContent) {

+				// Remove named anchors or TOC links

+				each(dom.select('a', o.node), function(a) {

+					if (!a.href || a.href.indexOf('#_Toc') != -1)

+						dom.remove(a, 1);

+				});

+

+				if (getParam(ed, "paste_convert_middot_lists")) {

+					t._convertLists(pl, o);

+				}

+

+				// Process styles

+				styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties

+

+				// Process only if a string was specified and not equal to "all" or "*"

+				if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {

+					styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));

+

+					// Retains some style properties

+					each(dom.select('*', o.node), function(el) {

+						var newStyle = {}, npc = 0, i, sp, sv;

+

+						// Store a subset of the existing styles

+						if (styleProps) {

+							for (i = 0; i < styleProps.length; i++) {

+								sp = styleProps[i];

+								sv = dom.getStyle(el, sp);

+

+								if (sv) {

+									newStyle[sp] = sv;

+									npc++;

+								}

+							}

+						}

+

+						// Remove all of the existing styles

+						dom.setAttrib(el, 'style', '');

+

+						if (styleProps && npc > 0)

+							dom.setStyles(el, newStyle); // Add back the stored subset of styles

+						else // Remove empty span tags that do not have class attributes

+							if (el.nodeName == 'SPAN' && !el.className)

+								dom.remove(el, true);

+					});

+				}

+			}

+

+			// Remove all style information or only specifically on WebKit to avoid the style bug on that browser

+			if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {

+				each(dom.select('*[style]', o.node), function(el) {

+					el.removeAttribute('style');

+					el.removeAttribute('data-mce-style');

+				});

+			} else {

+				if (tinymce.isWebKit) {

+					// We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />

+					// Removing the mce_style that contains the real value will force the Serializer engine to compress the styles

+					each(dom.select('*', o.node), function(el) {

+						el.removeAttribute('data-mce-style');

+					});

+				}

+			}

+		},

+

+		/**

+		 * Converts the most common bullet and number formats in Office into a real semantic UL/LI list.

+		 */

+		_convertLists : function(pl, o) {

+			var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;

+

+			// Convert middot lists into real semantic lists

+			each(dom.select('p', o.node), function(p) {

+				var sib, val = '', type, html, idx, parents;

+

+				// Get text node value at beginning of paragraph

+				for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)

+					val += sib.nodeValue;

+

+				val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');

+

+				// Detect unordered lists look for bullets

+				if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val))

+					type = 'ul';

+

+				// Detect ordered lists 1., a. or ixv.

+				if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val))

+					type = 'ol';

+

+				// Check if node value matches the list pattern: o&nbsp;&nbsp;

+				if (type) {

+					margin = parseFloat(p.style.marginLeft || 0);

+

+					if (margin > lastMargin)

+						levels.push(margin);

+

+					if (!listElm || type != lastType) {

+						listElm = dom.create(type);

+						dom.insertAfter(listElm, p);

+					} else {

+						// Nested list element

+						if (margin > lastMargin) {

+							listElm = li.appendChild(dom.create(type));

+						} else if (margin < lastMargin) {

+							// Find parent level based on margin value

+							idx = tinymce.inArray(levels, margin);

+							parents = dom.getParents(listElm.parentNode, type);

+							listElm = parents[parents.length - 1 - idx] || listElm;

+						}

+					}

+

+					// Remove middot or number spans if they exists

+					each(dom.select('span', p), function(span) {

+						var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');

+

+						// Remove span with the middot or the number

+						if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html))

+							dom.remove(span);

+						else if (/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))

+							dom.remove(span);

+					});

+

+					html = p.innerHTML;

+

+					// Remove middot/list items

+					if (type == 'ul')

+						html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/, '');

+					else

+						html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');

+

+					// Create li and add paragraph data into the new li

+					li = listElm.appendChild(dom.create('li', 0, html));

+					dom.remove(p);

+

+					lastMargin = margin;

+					lastType = type;

+				} else

+					listElm = lastMargin = 0; // End list element

+			});

+

+			// Remove any left over makers

+			html = o.node.innerHTML;

+			if (html.indexOf('__MCE_ITEM__') != -1)

+				o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');

+		},

+

+		/**

+		 * Inserts the specified contents at the caret position.

+		 */

+		_insert : function(h, skip_undo) {

+			var ed = this.editor, r = ed.selection.getRng();

+

+			// First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.

+			if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)

+				ed.getDoc().execCommand('Delete', false, null);

+

+			ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo});

+		},

+

+		/**

+		 * Instead of the old plain text method which tried to re-create a paste operation, the

+		 * new approach adds a plain text mode toggle switch that changes the behavior of paste.

+		 * This function is passed the same input that the regular paste plugin produces.

+		 * It performs additional scrubbing and produces (and inserts) the plain text.

+		 * This approach leverages all of the great existing functionality in the paste

+		 * plugin, and requires minimal changes to add the new functionality.

+		 * Speednet - June 2009

+		 */

+		_insertPlainText : function(content) {

+			var ed = this.editor,

+				linebr = getParam(ed, "paste_text_linebreaktype"),

+				rl = getParam(ed, "paste_text_replacements"),

+				is = tinymce.is;

+

+			function process(items) {

+				each(items, function(v) {

+					if (v.constructor == RegExp)

+						content = content.replace(v, "");

+					else

+						content = content.replace(v[0], v[1]);

+				});

+			};

+

+			if ((typeof(content) === "string") && (content.length > 0)) {

+				// If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line

+				if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) {

+					process([

+						/[\n\r]+/g

+					]);

+				} else {

+					// Otherwise just get rid of carriage returns (only need linefeeds)

+					process([

+						/\r+/g

+					]);

+				}

+

+				process([

+					[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"],		// Block tags get a blank line after them

+					[/<br[^>]*>|<\/tr>/gi, "\n"],				// Single linebreak for <br /> tags and table rows

+					[/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"],		// Table cells get tabs betweem them

+					/<[a-z!\/?][^>]*>/gi,						// Delete all remaining tags

+					[/&nbsp;/gi, " "],							// Convert non-break spaces to regular spaces (remember, *plain text*)

+					[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],// Cool little RegExp deletes whitespace around linebreak chars.

+					[/\n{3,}/g, "\n\n"]							// Max. 2 consecutive linebreaks

+				]);

+

+				content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content));

+

+				// Perform default or custom replacements

+				if (is(rl, "array")) {

+					process(rl);

+				} else if (is(rl, "string")) {

+					process(new RegExp(rl, "gi"));

+				}

+

+				// Treat paragraphs as specified in the config

+				if (linebr == "none") {

+					// Convert all line breaks to space

+					process([

+						[/\n+/g, " "]

+					]);

+				} else if (linebr == "br") {

+					// Convert all line breaks to <br />

+					process([

+						[/\n/g, "<br />"]

+					]);

+				} else if (linebr == "p") {

+					// Convert all line breaks to <p>...</p>

+					process([

+						[/\n+/g, "</p><p>"],

+						[/^(.*<\/p>)(<p>)$/, '<p>$1']

+					]);

+				} else {

+					// defaults to "combined"

+					// Convert single line breaks to <br /> and double line breaks to <p>...</p>

+					process([

+						[/\n\n/g, "</p><p>"],

+						[/^(.*<\/p>)(<p>)$/, '<p>$1'],

+						[/\n/g, "<br />"]

+					]);

+				}

+

+				ed.execCommand('mceInsertContent', false, content);

+			}

+		},

+

+		/**

+		 * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.

+		 */

+		_legacySupport : function() {

+			var t = this, ed = t.editor;

+

+			// Register command(s) for backwards compatibility

+			ed.addCommand("mcePasteWord", function() {

+				ed.windowManager.open({

+					file: t.url + "/pasteword.htm",

+					width: parseInt(getParam(ed, "paste_dialog_width")),

+					height: parseInt(getParam(ed, "paste_dialog_height")),

+					inline: 1

+				});

+			});

+

+			if (getParam(ed, "paste_text_use_dialog")) {

+				ed.addCommand("mcePasteText", function() {

+					ed.windowManager.open({

+						file : t.url + "/pastetext.htm",

+						width: parseInt(getParam(ed, "paste_dialog_width")),

+						height: parseInt(getParam(ed, "paste_dialog_height")),

+						inline : 1

+					});

+				});

+			}

+

+			// Register button for backwards compatibility

+			ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/paste/js/pastetext.js
@@ -1,1 +1,37 @@
+tinyMCEPopup.requireLangPack();

+

+var PasteTextDialog = {

+	init : function() {

+		this.resize();

+	},

+

+	insert : function() {

+		var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;

+

+		// Convert linebreaks into paragraphs

+		if (document.getElementById('linebreaks').checked) {

+			lines = h.split(/\r?\n/);

+			if (lines.length > 1) {

+				h = '';

+				tinymce.each(lines, function(row) {

+					h += '<p>' + row + '</p>';

+				});

+			}

+		}

+

+		tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});

+		tinyMCEPopup.close();

+	},

+

+	resize : function() {

+		var vp = tinyMCEPopup.dom.getViewPort(window), el;

+

+		el = document.getElementById('content');

+

+		el.style.width  = (vp.w - 20) + 'px';

+		el.style.height = (vp.h - 90) + 'px';

+	}

+};

+

+tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/paste/js/pasteword.js
@@ -1,1 +1,52 @@
+tinyMCEPopup.requireLangPack();

+

+var PasteWordDialog = {

+	init : function() {

+		var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';

+

+		// Create iframe

+		el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';

+		ifr = document.getElementById('iframe');

+		doc = ifr.contentWindow.document;

+

+		// Force absolute CSS urls

+		css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];

+		css = css.concat(tinymce.explode(ed.settings.content_css) || []);

+		tinymce.each(css, function(u) {

+			cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';

+		});

+

+		// Write content into iframe

+		doc.open();

+		doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');

+		doc.close();

+

+		doc.designMode = 'on';

+		this.resize();

+

+		window.setTimeout(function() {

+			ifr.contentWindow.focus();

+		}, 10);

+	},

+

+	insert : function() {

+		var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;

+

+		tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});

+		tinyMCEPopup.close();

+	},

+

+	resize : function() {

+		var vp = tinyMCEPopup.dom.getViewPort(window), el;

+

+		el = document.getElementById('iframe');

+

+		if (el) {

+			el.style.width  = (vp.w - 20) + 'px';

+			el.style.height = (vp.h - 90) + 'px';

+		}

+	}

+};

+

+tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/paste/pastetext.htm
@@ -1,1 +1,27 @@
-
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#paste.paste_text_desc}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/pastetext.js"></script>

+</head>

+<body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;">

+	<form name="source" onsubmit="return PasteTextDialog.insert();" action="#">

+		<div style="float: left" class="title">{#paste.paste_text_desc}</div>

+

+		<div style="float: right">

+			<input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>

+		</div>

+

+		<br style="clear: both" />

+

+		<div>{#paste_dlg.text_title}</div>

+

+		<textarea id="content" name="content" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>

+

+		<div class="mceActionPanel">

+			<input type="submit" name="insert" value="{#insert}" id="insert" />

+			<input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />

+		</div>

+	</form>

+</body> 

+</html>

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/paste/pasteword.htm
@@ -1,1 +1,22 @@
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#paste.paste_word_desc}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/pasteword.js"></script>

+</head>

+<body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;">

+	<form name="source" onsubmit="return PasteWordDialog.insert();" action="#">

+		<div class="title">{#paste.paste_word_desc}</div>

+

+		<div>{#paste_dlg.word_title}</div>

+

+		<div id="iframecontainer"></div>

+

+		<div class="mceActionPanel">

+			<input type="submit" id="insert" name="insert" value="{#insert}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js
@@ -1,1 +1,53 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
 
+(function() {
+	tinymce.create('tinymce.plugins.Preview', {
+		init : function(ed, url) {
+			var t = this, css = tinymce.explode(ed.settings.content_css);
+
+			t.editor = ed;
+
+			// Force absolute CSS urls	
+			tinymce.each(css, function(u, k) {
+				css[k] = ed.documentBaseURI.toAbsolute(u);
+			});
+
+			ed.addCommand('mcePreview', function() {
+				ed.windowManager.open({
+					file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"),
+					width : parseInt(ed.getParam("plugin_preview_width", "550")),
+					height : parseInt(ed.getParam("plugin_preview_height", "600")),
+					resizable : "yes",
+					scrollbars : "yes",
+					popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"),
+					inline : ed.getParam("plugin_preview_inline", 1)
+				}, {
+					base : ed.documentBaseURI.getURI()
+				});
+			});
+
+			ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'});
+		},
+
+		getInfo : function() {
+			return {
+				longname : 'Preview',
+				author : 'Moxiecode Systems AB',
+				authorurl : 'http://tinymce.moxiecode.com',
+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview',
+				version : tinymce.majorVersion + "." + tinymce.minorVersion
+			};
+		}
+	});
+
+	// Register plugin
+	tinymce.PluginManager.add('preview', tinymce.plugins.Preview);
+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/preview/example.html
@@ -1,1 +1,29 @@
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<script language="javascript" src="../../tiny_mce_popup.js"></script>

+<script type="text/javascript" src="jscripts/embed.js"></script>

+<script type="text/javascript">

+tinyMCEPopup.onInit.add(function(ed) {

+	var dom = tinyMCEPopup.dom;

+

+	// Load editor content_css

+	tinymce.each(ed.settings.content_css.split(','), function(u) {

+		dom.loadCSS(ed.documentBaseURI.toAbsolute(u));

+	});

+

+	// Place contents inside div container

+	dom.setHTML('content', ed.getContent());

+});

+</script>

+<title>Example of a custom preview page</title>

+</head>

+<body>

+

+Editor contents: <br />

+<div id="content">

+<!-- Gets filled with editor contents -->

+</div>

+

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/preview/jscripts/embed.js
@@ -1,1 +1,74 @@
+/**

+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.

+ */

+

+function writeFlash(p) {

+	writeEmbed(

+		'D27CDB6E-AE6D-11cf-96B8-444553540000',

+		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

+		'application/x-shockwave-flash',

+		p

+	);

+}

+

+function writeShockWave(p) {

+	writeEmbed(

+	'166B1BCA-3F9C-11CF-8075-444553540000',

+	'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',

+	'application/x-director',

+		p

+	);

+}

+

+function writeQuickTime(p) {

+	writeEmbed(

+		'02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',

+		'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',

+		'video/quicktime',

+		p

+	);

+}

+

+function writeRealMedia(p) {

+	writeEmbed(

+		'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',

+		'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',

+		'audio/x-pn-realaudio-plugin',

+		p

+	);

+}

+

+function writeWindowsMedia(p) {

+	p.url = p.src;

+	writeEmbed(

+		'6BF52A52-394A-11D3-B153-00C04F79FAA6',

+		'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',

+		'application/x-mplayer2',

+		p

+	);

+}

+

+function writeEmbed(cls, cb, mt, p) {

+	var h = '', n;

+

+	h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';

+	h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';

+	h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';

+	h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';

+	h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';

+	h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';

+	h += '>';

+

+	for (n in p)

+		h += '<param name="' + n + '" value="' + p[n] + '">';

+

+	h += '<embed type="' + mt + '"';

+

+	for (n in p)

+		h += n + '="' + p[n] + '" ';

+

+	h += '></embed></object>';

+

+	document.write(h);

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/preview/preview.html
@@ -1,1 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+<script type="text/javascript" src="jscripts/embed.js"></script>

+<script type="text/javascript"><!--

+document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">');

+// -->

+</script>

+<title>{#preview.preview_desc}</title>

+</head>

+<body id="content">

+<script type="text/javascript">

+	document.write(tinyMCEPopup.editor.getContent());

+</script>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/print/editor_plugin_src.js
@@ -1,1 +1,35 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.Print', {

+		init : function(ed, url) {

+			ed.addCommand('mcePrint', function() {

+				ed.getWin().print();

+			});

+

+			ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Print',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('print', tinymce.plugins.Print);

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/safari/blank.htm
@@ -1,1 +1,1 @@
-
+<!-- WebKit -->

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/safari/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var Event=tinymce.dom.Event,grep=tinymce.grep,each=tinymce.each,inArray=tinymce.inArray,isOldWebKit=tinymce.isOldWebKit;tinymce.create('tinymce.plugins.Safari',{init:function(ed){var t=this,dom;if(!tinymce.isWebKit)return;t.editor=ed;t.webKitFontSizes=['x-small','small','medium','large','x-large','xx-large','-webkit-xxx-large'];t.namedFontSizes=['xx-small','x-small','small','medium','large','x-large','xx-large'];ed.onPaste.add(function(ed,e){function removeStyles(e){e=e.target;if(e.nodeType==1){e.style.cssText='';each(ed.dom.select('*',e),function(e){e.style.cssText='';});}};Event.add(ed.getDoc(),'DOMNodeInserted',removeStyles);window.setTimeout(function(){Event.remove(ed.getDoc(),'DOMNodeInserted',removeStyles);},0);});ed.onKeyUp.add(function(ed,e){var h,b;if(e.keyCode==46||e.keyCode==8){b=ed.getBody();h=b.innerHTML;if(b.childNodes.length==1&&!/<(img|hr)/.test(h)&&tinymce.trim(h.replace(/<[^>]+>/g,'')).length==0)ed.setContent('',{format:'raw'});}});ed.addCommand('FormatBlock',function(u,v){var dom=ed.dom,e=dom.getParent(ed.selection.getNode(),dom.isBlock);if(e)dom.replace(dom.create(v),e,1);else ed.getDoc().execCommand("FormatBlock",false,v);});ed.addCommand('mceInsertContent',function(u,v){ed.getDoc().execCommand("InsertText",false,'mce_marker');ed.getBody().innerHTML=ed.getBody().innerHTML.replace(/mce_marker/g,v+'<span id="_mce_tmp">XX</span>');ed.selection.select(ed.dom.get('_mce_tmp'));ed.getDoc().execCommand("Delete",false,' ');});ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&(e.shiftKey||ed.settings.force_br_newlines&&ed.selection.getNode().nodeName!='LI')){t._insertBR(ed);Event.cancel(e);}});ed.addQueryValueHandler('FontSize',function(u,v){var e,v;if((e=ed.dom.getParent(ed.selection.getStart(),'span'))&&(v=e.style.fontSize))return tinymce.inArray(t.namedFontSizes,v)+1;if((e=ed.dom.getParent(ed.selection.getEnd(),'span'))&&(v=e.style.fontSize))return tinymce.inArray(t.namedFontSizes,v)+1;return ed.getDoc().queryCommandValue('FontSize');});ed.addQueryValueHandler('FontName',function(u,v){var e,v;if((e=ed.dom.getParent(ed.selection.getStart(),'span'))&&(v=e.style.fontFamily))return v.replace(/, /g,',');if((e=ed.dom.getParent(ed.selection.getEnd(),'span'))&&(v=e.style.fontFamily))return v.replace(/, /g,',');return ed.getDoc().queryCommandValue('FontName');});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName=='IMG'){t.selElm=e;ed.selection.select(e);}else t.selElm=null;});ed.onInit.add(function(){t._fixWebKitSpans();if(isOldWebKit)t._patchSafari2x(ed);});ed.onSetContent.add(function(){dom=ed.dom;each(['strong','b','em','u','strike','sub','sup','a'],function(v){each(grep(dom.select(v)).reverse(),function(n){var nn=n.nodeName.toLowerCase(),st;if(nn=='a'){if(n.name)dom.replace(dom.create('img',{mce_name:'a',name:n.name,'class':'mceItemAnchor'}),n);return;}switch(nn){case'b':case'strong':if(nn=='b')nn='strong';st='font-weight: bold;';break;case'em':st='font-style: italic;';break;case'u':st='text-decoration: underline;';break;case'sub':st='vertical-align: sub;';break;case'sup':st='vertical-align: super;';break;case'strike':st='text-decoration: line-through;';break;}dom.replace(dom.create('span',{mce_name:nn,style:st,'class':'Apple-style-span'}),n,1);});});});ed.onPreProcess.add(function(ed,o){dom=ed.dom;each(grep(o.node.getElementsByTagName('span')).reverse(),function(n){var v,bg;if(o.get){if(dom.hasClass(n,'Apple-style-span')){bg=n.style.backgroundColor;switch(dom.getAttrib(n,'mce_name')){case'font':if(!ed.settings.convert_fonts_to_spans)dom.setAttrib(n,'style','');break;case'strong':case'em':case'sub':case'sup':dom.setAttrib(n,'style','');break;case'strike':case'u':if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');else dom.setAttrib(n,'mce_name','');break;default:if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');}if(bg)n.style.backgroundColor=bg;}}if(dom.hasClass(n,'mceItemRemoved'))dom.remove(n,1);});});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g,'</$1>');o.content=o.content.replace(/ id=\"undefined\"/g,'');});},getInfo:function(){return{longname:'Safari compatibility',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_fixWebKitSpans:function(){var t=this,ed=t.editor;if(!isOldWebKit){Event.add(ed.getDoc(),'DOMNodeInserted',function(e){e=e.target;if(e&&e.nodeType==1)t._fixAppleSpan(e);});}else{ed.onExecCommand.add(function(){each(ed.dom.select('span'),function(n){t._fixAppleSpan(n);});ed.nodeChanged();});}},_fixAppleSpan:function(e){var ed=this.editor,dom=ed.dom,fz=this.webKitFontSizes,fzn=this.namedFontSizes,s=ed.settings,st,p;if(dom.getAttrib(e,'mce_fixed'))return;if(e.nodeName=='SPAN'&&e.className=='Apple-style-span'){st=e.style;if(!s.convert_fonts_to_spans){if(st.fontSize){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'size',inArray(fz,st.fontSize)+1);}if(st.fontFamily){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'face',st.fontFamily);}if(st.color){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'color',dom.toHex(st.color));}if(st.backgroundColor){dom.setAttrib(e,'mce_name','font');dom.setStyle(e,'background-color',st.backgroundColor);}}else{if(st.fontSize)dom.setStyle(e,'fontSize',fzn[inArray(fz,st.fontSize)]);}if(st.fontWeight=='bold')dom.setAttrib(e,'mce_name','strong');if(st.fontStyle=='italic')dom.setAttrib(e,'mce_name','em');if(st.textDecoration=='underline')dom.setAttrib(e,'mce_name','u');if(st.textDecoration=='line-through')dom.setAttrib(e,'mce_name','strike');if(st.verticalAlign=='super')dom.setAttrib(e,'mce_name','sup');if(st.verticalAlign=='sub')dom.setAttrib(e,'mce_name','sub');dom.setAttrib(e,'mce_fixed','1');}},_patchSafari2x:function(ed){var t=this,setContent,getNode,dom=ed.dom,lr;if(ed.windowManager.onBeforeOpen){ed.windowManager.onBeforeOpen.add(function(){r=ed.selection.getRng();});}ed.selection.select=function(n){this.getSel().setBaseAndExtent(n,0,n,1);};getNode=ed.selection.getNode;ed.selection.getNode=function(){return t.selElm||getNode.call(this);};ed.selection.getRng=function(){var t=this,s=t.getSel(),d=ed.getDoc(),r,rb,ra,di;if(s.anchorNode){r=d.createRange();try{rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(1);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(1);di=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;r.setStart(di?s.anchorNode:s.focusNode,di?s.anchorOffset:s.focusOffset);r.setEnd(di?s.focusNode:s.anchorNode,di?s.focusOffset:s.anchorOffset);lr=r;}catch(ex){}}return r||lr;};setContent=ed.selection.setContent;ed.selection.setContent=function(h,s){var r=this.getRng(),b;try{setContent.call(this,h,s);}catch(ex){b=dom.create('body');b.innerHTML=h;each(b.childNodes,function(n){r.insertNode(n.cloneNode(true));});}};},_insertBR:function(ed){var dom=ed.dom,s=ed.selection,r=s.getRng(),br;r.insertNode(br=dom.create('br'));r.setStartAfter(br);r.setEndAfter(br);s.setRng(r);if(s.getSel().focusNode==br.previousSibling){s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'),br));s.collapse(1);}ed.getWin().scrollTo(0,dom.getPos(s.getRng().startContainer).y);}});tinymce.PluginManager.add('safari',tinymce.plugins.Safari);})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/safari/editor_plugin_src.js
@@ -1,1 +1,461 @@
+/**

+ * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $

+ *

+ * @author Moxiecode


+ */

+

+(function() {

+	var Event = tinymce.dom.Event, grep = tinymce.grep, each = tinymce.each, inArray = tinymce.inArray, isOldWebKit = tinymce.isOldWebKit;

+

+	tinymce.create('tinymce.plugins.Safari', {

+		init : function(ed) {

+			var t = this, dom;

+

+			// Ignore on non webkit

+			if (!tinymce.isWebKit)

+				return;

+

+			t.editor = ed;

+			t.webKitFontSizes = ['x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', '-webkit-xxx-large'];

+			t.namedFontSizes = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large'];

+

+			// Safari will crash if the build in createlink command is used

+/*			ed.addCommand('CreateLink', function(u, v) {

+				ed.execCommand("mceInsertContent", false, '<a href="' + dom.encode(v) + '">' + ed.selection.getContent() + '</a>');

+			});*/

+

+			ed.onPaste.add(function(ed, e) {

+				function removeStyles(e) {

+					e = e.target;

+

+					if (e.nodeType == 1) {

+						e.style.cssText = '';

+

+						each(ed.dom.select('*', e), function(e) {

+							e.style.cssText = '';

+						});

+					}

+				};

+

+				Event.add(ed.getDoc(), 'DOMNodeInserted', removeStyles);

+

+				window.setTimeout(function() {

+					Event.remove(ed.getDoc(), 'DOMNodeInserted', removeStyles);

+				}, 0);

+			});

+

+			ed.onKeyUp.add(function(ed, e) {

+				var h, b;

+

+				// If backspace or delete key

+				if (e.keyCode == 46 || e.keyCode == 8) {

+					b = ed.getBody();

+					h = b.innerHTML;

+

+					// If there is no text content or images or hr elements then remove everything

+					if (b.childNodes.length == 1 && !/<(img|hr)/.test(h) && tinymce.trim(h.replace(/<[^>]+>/g, '')).length == 0)

+						ed.setContent('', {format : 'raw'});

+				}

+			});

+

+			// Workaround for FormatBlock bug, http://bugs.webkit.org/show_bug.cgi?id=16004

+			ed.addCommand('FormatBlock', function(u, v) {

+				var dom = ed.dom, e = dom.getParent(ed.selection.getNode(), dom.isBlock);

+

+				if (e)

+					dom.replace(dom.create(v), e, 1);

+				else

+					ed.getDoc().execCommand("FormatBlock", false, v);

+			});

+

+			// Workaround for InsertHTML bug, http://bugs.webkit.org/show_bug.cgi?id=16382

+			ed.addCommand('mceInsertContent', function(u, v) {

+				ed.getDoc().execCommand("InsertText", false, 'mce_marker');

+				ed.getBody().innerHTML = ed.getBody().innerHTML.replace(/mce_marker/g, v + '<span id="_mce_tmp">XX</span>');

+				ed.selection.select(ed.dom.get('_mce_tmp'));

+				ed.getDoc().execCommand("Delete", false, ' ');

+			});

+

+			// Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973

+			ed.onKeyPress.add(function(ed, e) {

+				if (e.keyCode == 13 && (e.shiftKey || ed.settings.force_br_newlines && ed.selection.getNode().nodeName != 'LI')) {

+					t._insertBR(ed);

+					Event.cancel(e);

+				}

+			});

+

+			// Safari returns incorrect values

+			ed.addQueryValueHandler('FontSize', function(u, v) {

+				var e, v;

+

+				// Check for the real font size at the start of selection

+				if ((e = ed.dom.getParent(ed.selection.getStart(), 'span')) && (v = e.style.fontSize))

+					return tinymce.inArray(t.namedFontSizes, v) + 1;

+

+				// Check for the real font size at the end of selection

+				if ((e = ed.dom.getParent(ed.selection.getEnd(), 'span')) && (v = e.style.fontSize))

+					return tinymce.inArray(t.namedFontSizes, v) + 1;

+

+				// Return default value it's better than nothing right!

+				return ed.getDoc().queryCommandValue('FontSize');

+			});

+

+			// Safari returns incorrect values

+			ed.addQueryValueHandler('FontName', function(u, v) {

+				var e, v;

+

+				// Check for the real font name at the start of selection

+				if ((e = ed.dom.getParent(ed.selection.getStart(), 'span')) && (v = e.style.fontFamily))

+					return v.replace(/, /g, ',');

+

+				// Check for the real font name at the end of selection

+				if ((e = ed.dom.getParent(ed.selection.getEnd(), 'span')) && (v = e.style.fontFamily))

+					return v.replace(/, /g, ',');

+

+				// Return default value it's better than nothing right!

+				return ed.getDoc().queryCommandValue('FontName');

+			});

+

+			// Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250

+			ed.onClick.add(function(ed, e) {

+				e = e.target;

+

+				if (e.nodeName == 'IMG') {

+					t.selElm = e;

+					ed.selection.select(e);

+				} else

+					t.selElm = null;

+			});

+

+/*			ed.onBeforeExecCommand.add(function(ed, c, b) {

+				var r = t.bookmarkRng;

+

+				// Restore selection

+				if (r) {

+					ed.selection.setRng(r);

+					t.bookmarkRng = null;

+					//console.debug('restore', r.startContainer, r.startOffset, r.endContainer, r.endOffset);

+				}

+			});*/

+

+			ed.onInit.add(function() {

+				t._fixWebKitSpans();

+

+/*				ed.windowManager.onOpen.add(function() {

+					var r = ed.selection.getRng();

+

+					// Store selection if valid

+					if (r.startContainer != ed.getDoc()) {

+						t.bookmarkRng = r.cloneRange();

+						//console.debug('store', r.startContainer, r.startOffset, r.endContainer, r.endOffset);

+					}

+				});

+

+				ed.windowManager.onClose.add(function() {

+					t.bookmarkRng = null;

+				});*/

+

+				if (isOldWebKit)

+					t._patchSafari2x(ed);

+			});

+

+			ed.onSetContent.add(function() {

+				dom = ed.dom;

+

+				// Convert strong,b,em,u,strike to spans

+				each(['strong','b','em','u','strike','sub','sup','a'], function(v) {

+					each(grep(dom.select(v)).reverse(), function(n) {

+						var nn = n.nodeName.toLowerCase(), st;

+

+						// Convert anchors into images

+						if (nn == 'a') {

+							if (n.name)

+								dom.replace(dom.create('img', {mce_name : 'a', name : n.name, 'class' : 'mceItemAnchor'}), n);

+

+							return;

+						}

+

+						switch (nn) {

+							case 'b':

+							case 'strong':

+								if (nn == 'b')

+									nn = 'strong';

+

+								st = 'font-weight: bold;';

+								break;

+

+							case 'em':

+								st = 'font-style: italic;';

+								break;

+

+							case 'u':

+								st = 'text-decoration: underline;';

+								break;

+

+							case 'sub':

+								st = 'vertical-align: sub;';

+								break;

+

+							case 'sup':

+								st = 'vertical-align: super;';

+								break;

+

+							case 'strike':

+								st = 'text-decoration: line-through;';

+								break;

+						}

+

+						dom.replace(dom.create('span', {mce_name : nn, style : st, 'class' : 'Apple-style-span'}), n, 1);

+					});

+				});

+			});

+

+			ed.onPreProcess.add(function(ed, o) {

+				dom = ed.dom;

+

+				each(grep(o.node.getElementsByTagName('span')).reverse(), function(n) {

+					var v, bg;

+

+					if (o.get) {

+						if (dom.hasClass(n, 'Apple-style-span')) {

+							bg = n.style.backgroundColor;

+

+							switch (dom.getAttrib(n, 'mce_name')) {

+								case 'font':

+									if (!ed.settings.convert_fonts_to_spans)

+										dom.setAttrib(n, 'style', '');

+									break;

+

+								case 'strong':

+								case 'em':

+								case 'sub':

+								case 'sup':

+									dom.setAttrib(n, 'style', '');

+									break;

+

+								case 'strike':

+								case 'u':

+									if (!ed.settings.inline_styles)

+										dom.setAttrib(n, 'style', '');

+									else

+										dom.setAttrib(n, 'mce_name', '');

+

+									break;

+

+								default:

+									if (!ed.settings.inline_styles)

+										dom.setAttrib(n, 'style', '');

+							}

+

+

+							if (bg)

+								n.style.backgroundColor = bg;

+						}

+					}

+

+					if (dom.hasClass(n, 'mceItemRemoved'))

+						dom.remove(n, 1);

+				});

+			});

+

+			ed.onPostProcess.add(function(ed, o) {

+				// Safari adds BR at end of all block elements

+				o.content = o.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g, '</$1>');

+

+				// Safari adds id="undefined" to HR elements

+				o.content = o.content.replace(/ id=\"undefined\"/g, '');

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Safari compatibility',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Internal methods

+

+		_fixWebKitSpans : function() {

+			var t = this, ed = t.editor;

+

+			if (!isOldWebKit) {

+				// Use mutator events on new WebKit

+				Event.add(ed.getDoc(), 'DOMNodeInserted', function(e) {

+					e = e.target;

+

+					if (e && e.nodeType == 1)

+						t._fixAppleSpan(e);

+				});

+			} else {

+				// Do post command processing in old WebKit since the browser crashes on Mutator events :(

+				ed.onExecCommand.add(function() {

+					each(ed.dom.select('span'), function(n) {

+						t._fixAppleSpan(n);

+					});

+

+					ed.nodeChanged();

+				});

+			}

+		},

+

+		_fixAppleSpan : function(e) {

+			var ed = this.editor, dom = ed.dom, fz = this.webKitFontSizes, fzn = this.namedFontSizes, s = ed.settings, st, p;

+

+			if (dom.getAttrib(e, 'mce_fixed'))

+				return;

+

+			// Handle Apple style spans

+			if (e.nodeName == 'SPAN' && e.className == 'Apple-style-span') {

+				st = e.style;

+

+				if (!s.convert_fonts_to_spans) {

+					if (st.fontSize) {

+						dom.setAttrib(e, 'mce_name', 'font');

+						dom.setAttrib(e, 'size', inArray(fz, st.fontSize) + 1);

+					}

+

+					if (st.fontFamily) {

+						dom.setAttrib(e, 'mce_name', 'font');

+						dom.setAttrib(e, 'face', st.fontFamily);

+					}

+

+					if (st.color) {

+						dom.setAttrib(e, 'mce_name', 'font');

+						dom.setAttrib(e, 'color', dom.toHex(st.color));

+					}

+

+					if (st.backgroundColor) {

+						dom.setAttrib(e, 'mce_name', 'font');

+						dom.setStyle(e, 'background-color', st.backgroundColor);

+					}

+				} else {

+					if (st.fontSize)

+						dom.setStyle(e, 'fontSize', fzn[inArray(fz, st.fontSize)]);

+				}

+

+				if (st.fontWeight == 'bold')

+					dom.setAttrib(e, 'mce_name', 'strong');

+

+				if (st.fontStyle == 'italic')

+					dom.setAttrib(e, 'mce_name', 'em');

+

+				if (st.textDecoration == 'underline')

+					dom.setAttrib(e, 'mce_name', 'u');

+

+				if (st.textDecoration == 'line-through')

+					dom.setAttrib(e, 'mce_name', 'strike');

+

+				if (st.verticalAlign == 'super')

+					dom.setAttrib(e, 'mce_name', 'sup');

+

+				if (st.verticalAlign == 'sub')

+					dom.setAttrib(e, 'mce_name', 'sub');

+

+				dom.setAttrib(e, 'mce_fixed', '1');

+			}

+		},

+

+		_patchSafari2x : function(ed) {

+			var t = this, setContent, getNode, dom = ed.dom, lr;

+

+			// Inline dialogs

+			if (ed.windowManager.onBeforeOpen) {

+				ed.windowManager.onBeforeOpen.add(function() {

+					r = ed.selection.getRng();

+				});

+			}

+

+			// Fake select on 2.x

+			ed.selection.select = function(n) {

+				this.getSel().setBaseAndExtent(n, 0, n, 1);

+			};

+

+			getNode = ed.selection.getNode;

+			ed.selection.getNode = function() {

+				return t.selElm || getNode.call(this);

+			};

+

+			// Fake range on Safari 2.x

+			ed.selection.getRng = function() {

+				var t = this, s = t.getSel(), d = ed.getDoc(), r, rb, ra, di;

+

+				// Fake range on Safari 2.x

+				if (s.anchorNode) {

+					r = d.createRange();

+

+					try {

+						// Setup before range

+						rb = d.createRange();

+						rb.setStart(s.anchorNode, s.anchorOffset);

+						rb.collapse(1);

+

+						// Setup after range

+						ra = d.createRange();

+						ra.setStart(s.focusNode, s.focusOffset);

+						ra.collapse(1);

+

+						// Setup start/end points by comparing locations

+						di = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;

+						r.setStart(di ? s.anchorNode : s.focusNode, di ? s.anchorOffset : s.focusOffset);

+						r.setEnd(di ? s.focusNode : s.anchorNode, di ? s.focusOffset : s.anchorOffset);

+

+						lr = r;

+					} catch (ex) {

+						// Sometimes fails, at least we tried to do it by the book. I hope Safari 2.x will go disappear soooon!!!

+					}

+				}

+

+				return r || lr;

+			};

+

+			// Fix setContent so it works

+			setContent = ed.selection.setContent;

+			ed.selection.setContent = function(h, s) {

+				var r = this.getRng(), b;

+

+				try {

+					setContent.call(this, h, s);

+				} catch (ex) {

+					// Workaround for Safari 2.x

+					b = dom.create('body');

+					b.innerHTML = h;

+

+					each(b.childNodes, function(n) {

+						r.insertNode(n.cloneNode(true));

+					});

+				}

+			};

+		},

+

+		_insertBR : function(ed) {

+			var dom = ed.dom, s = ed.selection, r = s.getRng(), br;

+

+			// Insert BR element

+			r.insertNode(br = dom.create('br'));

+

+			// Place caret after BR

+			r.setStartAfter(br);

+			r.setEndAfter(br);

+			s.setRng(r);

+

+			// Could not place caret after BR then insert an nbsp entity and move the caret

+			if (s.getSel().focusNode == br.previousSibling) {

+				s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));

+				s.collapse(1);

+			}

+

+			// Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117

+			ed.getWin().scrollTo(0, dom.getPos(s.getRng().startContainer).y);

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('safari', tinymce.plugins.Safari);

+})();

+

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/save/editor_plugin_src.js
@@ -1,1 +1,101 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.Save', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceSave', t._save, t);

+			ed.addCommand('mceCancel', t._cancel, t);

+

+			// Register buttons

+			ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'});

+			ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'});

+

+			ed.onNodeChange.add(t._nodeChange, t);

+			ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave');

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Save',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Private methods

+

+		_nodeChange : function(ed, cm, n) {

+			var ed = this.editor;

+

+			if (ed.getParam('save_enablewhendirty')) {

+				cm.setDisabled('save', !ed.isDirty());

+				cm.setDisabled('cancel', !ed.isDirty());

+			}

+		},

+

+		// Private methods

+

+		_save : function() {

+			var ed = this.editor, formObj, os, i, elementId;

+

+			formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');

+

+			if (ed.getParam("save_enablewhendirty") && !ed.isDirty())

+				return;

+

+			tinyMCE.triggerSave();

+

+			// Use callback instead

+			if (os = ed.getParam("save_onsavecallback")) {

+				if (ed.execCallback('save_onsavecallback', ed)) {

+					ed.startContent = tinymce.trim(ed.getContent({format : 'raw'}));

+					ed.nodeChanged();

+				}

+

+				return;

+			}

+

+			if (formObj) {

+				ed.isNotDirty = true;

+

+				if (formObj.onsubmit == null || formObj.onsubmit() != false)

+					formObj.submit();

+

+				ed.nodeChanged();

+			} else

+				ed.windowManager.alert("Error: No form element found.");

+		},

+

+		_cancel : function() {

+			var ed = this.editor, os, h = tinymce.trim(ed.startContent);

+

+			// Use callback instead

+			if (os = ed.getParam("save_oncancelcallback")) {

+				ed.execCallback('save_oncancelcallback', ed);

+				return;

+			}

+

+			ed.setContent(h);

+			ed.undoManager.clear();

+			ed.nodeChanged();

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('save', tinymce.plugins.Save);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
@@ -1,1 +1,7 @@
+.panel_wrapper {height:85px;}

+.panel_wrapper div.current {height:85px;}

+

+/* IE */

+* html .panel_wrapper {height:100px;}

+* html .panel_wrapper div.current {height:100px;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
@@ -1,1 +1,61 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.SearchReplacePlugin', {

+		init : function(ed, url) {

+			function open(m) {

+				// Keep IE from writing out the f/r character to the editor

+				// instance while initializing a new dialog. See: #3131190

+				window.focus();

+

+				ed.windowManager.open({

+					file : url + '/searchreplace.htm',

+					width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),

+					height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)),

+					inline : 1,

+					auto_focus : 0

+				}, {

+					mode : m,

+					search_string : ed.selection.getContent({format : 'text'}),

+					plugin_url : url

+				});

+			};

+

+			// Register commands

+			ed.addCommand('mceSearch', function() {

+				open('search');

+			});

+

+			ed.addCommand('mceReplace', function() {

+				open('replace');

+			});

+

+			// Register buttons

+			ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});

+			ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});

+

+			ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch');

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Search/Replace',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
@@ -1,1 +1,143 @@
+tinyMCEPopup.requireLangPack();

+

+var SearchReplaceDialog = {

+	init : function(ed) {

+		var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");

+

+		t.switchMode(m);

+

+		f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");

+

+		// Focus input field

+		f[m + '_panel_searchstring'].focus();

+		

+		mcTabs.onChange.add(function(tab_id, panel_id) {

+			t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));

+		});

+	},

+

+	switchMode : function(m) {

+		var f, lm = this.lastMode;

+

+		if (lm != m) {

+			f = document.forms[0];

+

+			if (lm) {

+				f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;

+				f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;

+				f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;

+				f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;

+			}

+

+			mcTabs.displayTab(m + '_tab',  m + '_panel');

+			document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";

+			document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";

+			this.lastMode = m;

+		}

+	},

+

+	searchNext : function(a) {

+		var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;

+

+		// Get input

+		f = document.forms[0];

+		s = f[m + '_panel_searchstring'].value;

+		b = f[m + '_panel_backwardsu'].checked;

+		ca = f[m + '_panel_casesensitivebox'].checked;

+		rs = f['replace_panel_replacestring'].value;

+

+		if (tinymce.isIE) {

+			r = ed.getDoc().selection.createRange();

+		}

+

+		if (s == '')

+			return;

+

+		function fix() {

+			// Correct Firefox graphics glitches

+			// TODO: Verify if this is actually needed any more, maybe it was for very old FF versions? 

+			r = se.getRng().cloneRange();

+			ed.getDoc().execCommand('SelectAll', false, null);

+			se.setRng(r);

+		};

+

+		function replace() {

+			ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE

+		};

+

+		// IE flags

+		if (ca)

+			fl = fl | 4;

+

+		switch (a) {

+			case 'all':

+				// Move caret to beginning of text

+				ed.execCommand('SelectAll');

+				ed.selection.collapse(true);

+

+				if (tinymce.isIE) {

+					ed.focus();

+					r = ed.getDoc().selection.createRange();

+

+					while (r.findText(s, b ? -1 : 1, fl)) {

+						r.scrollIntoView();

+						r.select();

+						replace();

+						fo = 1;

+

+						if (b) {

+							r.moveEnd("character", -(rs.length)); // Otherwise will loop forever

+						}

+					}

+

+					tinyMCEPopup.storeSelection();

+				} else {

+					while (w.find(s, ca, b, false, false, false, false)) {

+						replace();

+						fo = 1;

+					}

+				}

+

+				if (fo)

+					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));

+				else

+					tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));

+

+				return;

+

+			case 'current':

+				if (!ed.selection.isCollapsed())

+					replace();

+

+				break;

+		}

+

+		se.collapse(b);

+		r = se.getRng();

+

+		// Whats the point

+		if (!s)

+			return;

+

+		if (tinymce.isIE) {

+			ed.focus();

+			r = ed.getDoc().selection.createRange();

+

+			if (r.findText(s, b ? -1 : 1, fl)) {

+				r.scrollIntoView();

+				r.select();

+			} else

+				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));

+

+			tinyMCEPopup.storeSelection();

+		} else {

+			if (!w.find(s, ca, b, false, false, false, false))

+				tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));

+			else

+				fix();

+		}

+	}

+};

+

+tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm
@@ -1,1 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#searchreplace_dlg.replace_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="js/searchreplace.js"></script>

+	<link rel="stylesheet" type="text/css" href="css/searchreplace.css" />

+</head>

+<body style="display:none;" role="application" aria-labelledby="app_title">

+<span id="app_title" style="display:none">{#searchreplace_dlg.replace_title}</span>

+<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="search_tab" aria-controls="search_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>

+			<li id="replace_tab" aria-controls="replace_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="search_panel" class="panel">

+			<table role="presentation" border="0" cellspacing="0" cellpadding="2">

+				<tr>

+					<td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>

+					<td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" aria-required="true" /></td>

+				</tr>

+				<tr>

+					<td colspan="2">

+						<table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">

+							<tr role="group" aria-labelledby="search_panel_backwards_label">

+								<td><label id="search_panel_backwards_label">{#searchreplace_dlg.direction}</label></td>

+								<td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>

+								<td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>

+								<td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>

+								<td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>

+							</tr>

+						</table>

+					</td>

+				</tr>

+				<tr>

+					<td colspan="2">

+						<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+							<tr>

+								<td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>

+								<td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>

+							</tr>

+						</table>

+					</td>

+				</tr>

+			</table>

+		</div>

+

+		<div id="replace_panel" class="panel">

+			<table role="presentation" border="0" cellspacing="0" cellpadding="2">

+				<tr>

+					<td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>

+					<td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" aria-required="true" /></td>

+				</tr>

+				<tr>

+					<td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>

+					<td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" aria-required="true" /></td>

+				</tr>

+				<tr>

+					<td colspan="2">

+						<table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">

+							<tr role="group" aria-labelledby="replace_panel_dir_label">

+								<td><label id="replace_panel_dir_label">{#searchreplace_dlg.direction}</label></td>

+								<td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>

+								<td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>

+								<td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>

+								<td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>

+							</tr>

+						</table>

+					</td>

+				</tr>

+				<tr>

+					<td colspan="2">

+						<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+							<tr>

+								<td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>

+								<td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>

+							</tr>

+						</table>

+					</td>

+				</tr>

+			</table>

+		</div>

+

+	</div>

+

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />

+		<input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />

+		<input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/spellchecker/css/content.css
@@ -1,1 +1,2 @@
+.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js
@@ -1,1 +1,1 @@
-


--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
@@ -1,1 +1,437 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;

+

+	tinymce.create('tinymce.plugins.SpellcheckerPlugin', {

+		getInfo : function() {

+			return {

+				longname : 'Spellchecker',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		init : function(ed, url) {

+			var t = this, cm;

+

+			t.url = url;

+			t.editor = ed;

+			t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}");

+

+			if (t.rpcUrl == '{backend}') {

+				// Sniff if the browser supports native spellchecking (Don't know of a better way)

+				if (tinymce.isIE)

+					return;

+

+				t.hasSupport = true;

+

+				// Disable the context menu when spellchecking is active

+				ed.onContextMenu.addToTop(function(ed, e) {

+					if (t.active)

+						return false;

+				});

+			}

+

+			// Register commands

+			ed.addCommand('mceSpellCheck', function() {

+				if (t.rpcUrl == '{backend}') {

+					// Enable/disable native spellchecker

+					t.editor.getBody().spellcheck = t.active = !t.active;

+					return;

+				}

+

+				if (!t.active) {

+					ed.setProgressState(1);

+					t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {

+						if (r.length > 0) {

+							t.active = 1;

+							t._markWords(r);

+							ed.setProgressState(0);

+							ed.nodeChanged();

+						} else {

+							ed.setProgressState(0);

+

+							if (ed.getParam('spellchecker_report_no_misspellings', true))

+								ed.windowManager.alert('spellchecker.no_mpell');

+						}

+					});

+				} else

+					t._done();

+			});

+

+			if (ed.settings.content_css !== false)

+				ed.contentCSS.push(url + '/css/content.css');

+

+			ed.onClick.add(t._showMenu, t);

+			ed.onContextMenu.add(t._showMenu, t);

+			ed.onBeforeGetContent.add(function() {

+				if (t.active)

+					t._removeWords();

+			});

+

+			ed.onNodeChange.add(function(ed, cm) {

+				cm.setActive('spellchecker', t.active);

+			});

+

+			ed.onSetContent.add(function() {

+				t._done();

+			});

+

+			ed.onBeforeGetContent.add(function() {

+				t._done();

+			});

+

+			ed.onBeforeExecCommand.add(function(ed, cmd) {

+				if (cmd == 'mceFullScreen')

+					t._done();

+			});

+

+			// Find selected language

+			t.languages = {};

+			each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {

+				if (k.indexOf('+') === 0) {

+					k = k.substring(1);

+					t.selectedLang = v;

+				}

+

+				t.languages[k] = v;

+			});

+		},

+

+		createControl : function(n, cm) {

+			var t = this, c, ed = t.editor;

+

+			if (n == 'spellchecker') {

+				// Use basic button if we use the native spellchecker

+				if (t.rpcUrl == '{backend}') {

+					// Create simple toggle button if we have native support

+					if (t.hasSupport)

+						c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});

+

+					return c;

+				}

+

+				c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});

+

+				c.onRenderMenu.add(function(c, m) {

+					m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

+					each(t.languages, function(v, k) {

+						var o = {icon : 1}, mi;

+

+						o.onclick = function() {

+							if (v == t.selectedLang) {

+								return;

+							}

+							mi.setSelected(1);

+							t.selectedItem.setSelected(0);

+							t.selectedItem = mi;

+							t.selectedLang = v;

+						};

+

+						o.title = k;

+						mi = m.add(o);

+						mi.setSelected(v == t.selectedLang);

+

+						if (v == t.selectedLang)

+							t.selectedItem = mi;

+					})

+				});

+

+				return c;

+			}

+		},

+

+		// Internal functions

+

+		_walk : function(n, f) {

+			var d = this.editor.getDoc(), w;

+

+			if (d.createTreeWalker) {

+				w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);

+

+				while ((n = w.nextNode()) != null)

+					f.call(this, n);

+			} else

+				tinymce.walk(n, f, 'childNodes');

+		},

+

+		_getSeparators : function() {


+

+			// Build word separator regexp

+			for (i=0; i<str.length; i++)

+				re += '\\' + str.charAt(i);

+

+			return re;

+		},

+

+		_getWords : function() {

+			var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = [];

+

+			// Get area text

+			this._walk(ed.getBody(), function(n) {

+				if (n.nodeType == 3)

+					tx += n.nodeValue + ' ';

+			});

+

+			// split the text up into individual words

+			if (ed.getParam('spellchecker_word_pattern')) {

+				// look for words that match the pattern

+				rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi');

+			} else {

+				// Split words by separator

+				tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');

+				tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));

+				rawWords = tx.split(' ');

+			}

+

+			// Build word array and remove duplicates

+			each(rawWords, function(v) {

+				if (!lo[v]) {

+					wl.push(v);

+					lo[v] = 1;

+				}

+			});

+

+			return wl;

+		},

+

+		_removeWords : function(w) {

+			var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();

+

+			each(dom.select('span').reverse(), function(n) {

+				if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {

+					if (!w || dom.decode(n.innerHTML) == w)

+						dom.remove(n, 1);

+				}

+			});

+

+			se.moveToBookmark(b);

+		},

+

+		_markWords : function(wl) {

+			var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, b = se.getBookmark(), nl = [],

+				w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g');

+

+			// Collect all text nodes

+			this._walk(ed.getBody(), function(n) {

+				if (n.nodeType == 3) {

+					nl.push(n);

+				}

+			});

+

+			// Wrap incorrect words in spans

+			each(nl, function(n) {

+				var node, elem, txt, pos, v = n.nodeValue;

+

+				if (rx.test(v)) {

+					// Encode the content

+					v = dom.encode(v);

+					// Create container element

+					elem = dom.create('span', {'class' : 'mceItemHidden'});

+

+					// Following code fixes IE issues by creating text nodes

+					// using DOM methods instead of innerHTML.

+					// Bug #3124: <PRE> elements content is broken after spellchecking.

+					// Bug #1408: Preceding whitespace characters are removed

+					// @TODO: I'm not sure that both are still issues on IE9.

+					if (tinymce.isIE) {

+						// Enclose mispelled words with temporal tag

+						v = v.replace(rx, '$1<mcespell>$2</mcespell>');

+						// Loop over the content finding mispelled words

+						while ((pos = v.indexOf('<mcespell>')) != -1) {

+							// Add text node for the content before the word

+							txt = v.substring(0, pos);

+							if (txt.length) {

+								node = doc.createTextNode(dom.decode(txt));

+								elem.appendChild(node);

+							}

+							v = v.substring(pos+10);

+							pos = v.indexOf('</mcespell>');

+							txt = v.substring(0, pos);

+							v = v.substring(pos+11);

+							// Add span element for the word

+							elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt));

+						}

+						// Add text node for the rest of the content

+						if (v.length) {

+							node = doc.createTextNode(dom.decode(v));

+							elem.appendChild(node);

+						}

+					} else {

+						// Other browsers preserve whitespace characters on innerHTML usage

+						elem.innerHTML = v.replace(rx, '$1<span class="mceItemHiddenSpellWord">$2</span>');

+					}

+

+					// Finally, replace the node with the container

+					dom.replace(elem, n);

+				}

+			});

+

+			se.moveToBookmark(b);

+		},

+

+		_showMenu : function(ed, e) {

+			var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target;

+

+			e = 0; // Fixes IE memory leak

+

+			if (!m) {

+				m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'});

+				t._menu = m;

+			}

+

+			if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) {

+				m.removeAll();

+				m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

+

+				t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) {

+					var ignoreRpc;

+

+					m.removeAll();

+

+					if (r.length > 0) {

+						m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

+						each(r, function(v) {

+							m.add({title : v, onclick : function() {

+								dom.replace(ed.getDoc().createTextNode(v), wordSpan);

+								t._checkDone();

+							}});

+						});

+

+						m.addSeparator();

+					} else

+						m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);

+

+					if (ed.getParam('show_ignore_words', true)) {

+						ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');

+						m.add({

+							title : 'spellchecker.ignore_word',

+							onclick : function() {

+								var word = wordSpan.innerHTML;

+

+								dom.remove(wordSpan, 1);

+								t._checkDone();

+

+								// tell the server if we need to

+								if (ignoreRpc) {

+									ed.setProgressState(1);

+									t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {

+										ed.setProgressState(0);

+									});

+								}

+							}

+						});

+

+						m.add({

+							title : 'spellchecker.ignore_words',

+							onclick : function() {

+								var word = wordSpan.innerHTML;

+

+								t._removeWords(dom.decode(word));

+								t._checkDone();

+

+								// tell the server if we need to

+								if (ignoreRpc) {

+									ed.setProgressState(1);

+									t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {

+										ed.setProgressState(0);

+									});

+								}

+							}

+						});

+					}

+

+					if (t.editor.getParam("spellchecker_enable_learn_rpc")) {

+						m.add({

+							title : 'spellchecker.learn_word',

+							onclick : function() {

+								var word = wordSpan.innerHTML;

+

+								dom.remove(wordSpan, 1);

+								t._checkDone();

+

+								ed.setProgressState(1);

+								t._sendRPC('learnWord', [t.selectedLang, word], function(r) {

+									ed.setProgressState(0);

+								});

+							}

+						});

+					}

+

+					m.update();

+				});

+

+				p1 = DOM.getPos(ed.getContentAreaContainer());

+				m.settings.offset_x = p1.x;

+				m.settings.offset_y = p1.y;

+

+				ed.selection.select(wordSpan);

+				p1 = dom.getPos(wordSpan);

+				m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);

+

+				return tinymce.dom.Event.cancel(e);

+			} else

+				m.hideMenu();

+		},

+

+		_checkDone : function() {

+			var t = this, ed = t.editor, dom = ed.dom, o;

+

+			each(dom.select('span'), function(n) {

+				if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {

+					o = true;

+					return false;

+				}

+			});

+

+			if (!o)

+				t._done();

+		},

+

+		_done : function() {

+			var t = this, la = t.active;

+

+			if (t.active) {

+				t.active = 0;

+				t._removeWords();

+

+				if (t._menu)

+					t._menu.hideMenu();

+

+				if (la)

+					t.editor.nodeChanged();

+			}

+		},

+

+		_sendRPC : function(m, p, cb) {

+			var t = this;

+

+			JSONRequest.sendRPC({

+				url : t.rpcUrl,

+				method : m,

+				params : p,

+				success : cb,

+				error : function(e, x) {

+					t.editor.setProgressState(0);

+					t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));

+				}

+			});

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);

+})();

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/style/css/props.css
@@ -1,1 +1,14 @@
+#text_font {width:250px;}

+#text_size {width:70px;}

+.mceAddSelectValue {background:#DDD;}

+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 {border-left:1px solid gray;}

+.tdelim {border-bottom:1px solid gray;}

+#block_display {width:145px;}

+#list_type {width:115px;}

+.disabled {background:#EEE;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/style/editor_plugin_src.js
@@ -1,1 +1,55 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.StylePlugin', {

+		init : function(ed, url) {

+			// Register commands

+			ed.addCommand('mceStyleProps', function() {

+				ed.windowManager.open({

+					file : url + '/props.htm',

+					width : 480 + parseInt(ed.getLang('style.delta_width', 0)),

+					height : 320 + parseInt(ed.getLang('style.delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url,

+					style_text : ed.selection.getNode().style.cssText

+				});

+			});

+

+			ed.addCommand('mceSetElementStyle', function(ui, v) {

+				if (e = ed.selection.getNode()) {

+					ed.dom.setAttrib(e, 'style', v);

+					ed.execCommand('mceRepaint');

+				}

+			});

+

+			ed.onNodeChange.add(function(ed, cm, n) {

+				cm.setDisabled('styleprops', n.nodeName === 'BODY');

+			});

+

+			// Register buttons

+			ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Style',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/style/js/props.js
@@ -1,1 +1,636 @@
+tinyMCEPopup.requireLangPack();

+

+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;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";

+var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";

+var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";

+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'), h;

+

+	ce.style.cssText = tinyMCEPopup.getWindowArg('style_text');

+

+	h = getBrowserHTML('background_image_browser','background_image','image','advimage');

+	document.getElementById("background_image_browser").innerHTML = h;

+

+	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 = tinyMCEPopup.editor.dom.toHex(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 = tinyMCEPopup.editor.dom.toHex(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));

+	selectByValue(f, 'box_float', ce.style.cssFloat || 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');

+

+	f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value);

+	f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value);

+	f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value);

+	f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value);

+

+	// 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', '', '', ['top', 'right', 'bottom', 'left']);

+

+	s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1");

+	s = s.replace(/,/g, ' ');

+

+	if (!hasEqualValues([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 = s.split(' ');

+

+	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 = ['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 = [], i, x;

+

+	if (typeof(b) == "undefined")

+		b = ['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<a.length; i++) {

+		if (a[i] == null)

+			return false;

+

+		for (x=0; x<a.length; x++) {

+			if (a[x] != a[i])

+				return false;

+		}

+	}

+

+	return true;

+};

+

+function hasEqualValues(a) {

+	var i, x;

+

+	for (i=0; i<a.length; i++) {

+		if (a[i] == null)

+			return false;

+

+		for (x=0; x<a.length; x++) {

+			if (a[x] != a[i])

+				return false;

+		}

+	}

+

+	return true;

+}

+

+function applyAction() {

+	var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;

+

+	generateCSS();

+

+	tinyMCEPopup.restoreSelection();

+	ed.dom.setAttrib(ed.selection.getSelectedBlocks(), 'style', tinyMCEPopup.editor.dom.serializeStyle(tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText)));

+}

+

+function updateAction() {

+	applyAction();

+	tinyMCEPopup.close();

+}

+

+function generateCSS() {

+	var ce = document.getElementById('container'), f = document.forms[0], num = new RegExp('[0-9]+', 'g'), s, t;

+

+	ce.style.cssText = "";

+

+	// Build text styles

+	ce.style.fontFamily = f.text_font.value;

+	ce.style.fontSize = f.text_size.value + (isNum(f.text_size.value) ? (f.text_size_measurement.value || 'px') : "");

+	ce.style.fontStyle = f.text_style.value;

+	ce.style.lineHeight = f.text_lineheight.value + (isNum(f.text_lineheight.value) ? f.text_lineheight_measurement.value : "");

+	ce.style.textTransform = f.text_case.value;

+	ce.style.fontWeight = f.text_weight.value;

+	ce.style.fontVariant = f.text_variant.value;

+	ce.style.color = f.text_color.value;

+

+	s = "";

+	s += f.text_underline.checked ? " underline" : "";

+	s += f.text_overline.checked ? " overline" : "";

+	s += f.text_linethrough.checked ? " line-through" : "";

+	s += f.text_blink.checked ? " blink" : "";

+	s = s.length > 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;

+	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 + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.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 = 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<f.length; i++) {

+		for (a=0; a<f[i].elements.length; a++) {

+			if (f[i].elements[a].disabled)

+				tinyMCEPopup.editor.dom.addClass(f[i].elements[a], "disabled");

+			else

+				tinyMCEPopup.editor.dom.removeClass(f[i].elements[a], "disabled");

+		}

+	}

+}

+

+function fillSelect(f, s, param, dval, sep, em) {

+	var i, ar, p, se;

+

+	f = document.forms[f];

+	sep = typeof(sep) == "undefined" ? ";" : sep;

+

+	if (em)

+		addSelectValue(f, s, "", "");

+

+	ar = tinyMCEPopup.getParam(param, dval).split(sep);

+	for (i=0; i<ar.length; i++) {

+		se = false;

+

+		if (ar[i].charAt(0) == '+') {

+			ar[i] = ar[i].substring(1);

+			se = true;

+		}

+

+		p = ar[i].split('=');

+

+		if (p.length > 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);

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/style/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/style/props.htm
@@ -1,1 +1,841 @@
-
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>{#style_dlg.title}</title>
+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+	<script type="text/javascript" src="../../utils/mctabs.js"></script>
+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>
+	<script type="text/javascript" src="../../utils/form_utils.js"></script>
+	<script type="text/javascript" src="js/props.js"></script>
+	<link href="css/props.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body id="styleprops" style="display: none" role="application" aria-labelledby="app_title">
+<span id="app_title" style="display:none">{#style_dlg.title}</span>
+<form onsubmit="updateAction();return false;" action="#">
+<div class="tabs">
+	<ul>
+		<li id="text_tab" class="current" aria-controls="text_panel"><span><a href="javascript:mcTabs.displayTab('text_tab','text_panel');" onMouseDown="return false;">{#style_dlg.text_tab}</a></span></li>
+		<li id="background_tab" aria-controls="background_panel"><span><a href="javascript:mcTabs.displayTab('background_tab','background_panel');" onMouseDown="return false;">{#style_dlg.background_tab}</a></span></li>
+		<li id="block_tab" aria-controls="block_panel"><span><a href="javascript:mcTabs.displayTab('block_tab','block_panel');" onMouseDown="return false;">{#style_dlg.block_tab}</a></span></li>
+		<li id="box_tab" aria-controls="box_panel"><span><a href="javascript:mcTabs.displayTab('box_tab','box_panel');" onMouseDown="return false;">{#style_dlg.box_tab}</a></span></li>
+		<li id="border_tab" aria-controls="border_panel"><span><a href="javascript:mcTabs.displayTab('border_tab','border_panel');" onMouseDown="return false;">{#style_dlg.border_tab}</a></span></li>
+		<li id="list_tab" aria-controls="list_panel"><span><a href="javascript:mcTabs.displayTab('list_tab','list_panel');" onMouseDown="return false;">{#style_dlg.list_tab}</a></span></li>
+		<li id="positioning_tab" aria-controls="positioning_panel"><span><a href="javascript:mcTabs.displayTab('positioning_tab','positioning_panel');" onMouseDown="return false;">{#style_dlg.positioning_tab}</a></span></li>
+	</ul>
+</div>
+
+<div class="panel_wrapper">
+<div id="text_panel" class="panel current">
+	<fieldset>
+		<legend>{#style_dlg.text}</legend>
+		<table role="presentation" border="0" width="100%">
+			<tr>
+				<td><label for="text_font">{#style_dlg.text_font}</label></td>
+				<td colspan="3">
+					<select id="text_font" name="text_font" class="mceEditableSelect mceFocus"></select>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="text_size">{#style_dlg.text_size}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><select id="text_size" name="text_size" class="mceEditableSelect"></select></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="text_size_measurement_label" for="text_size_measurement" style="display: none; visibility: hidden;">Text Size Measurement Unit</label>
+								<select id="text_size_measurement" name="text_size_measurement" aria-labelledby="text_size_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+				<td><label for="text_weight">{#style_dlg.text_weight}</label></td>
+				<td>
+					<select id="text_weight" name="text_weight"></select>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="text_style">{#style_dlg.text_style}</label></td>
+				<td>
+					<select id="text_style" name="text_style" class="mceEditableSelect"></select>
+				</td>
+				<td><label for="text_variant">{#style_dlg.text_variant}</label></td>
+				<td>
+					<select id="text_variant" name="text_variant"></select>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="text_lineheight">{#style_dlg.text_lineheight}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td>
+								<select id="text_lineheight" name="text_lineheight" class="mceEditableSelect"></select>
+							</td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="text_lineheight_measurement_label" for="text_lineheight_measurement" style="display: none; visibility: hidden;">Line Height Measurement Unit</label>
+								<select id="text_lineheight_measurement" name="text_lineheight_measurement" aria-labelledby="text_lineheight_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+				<td><label for="text_case">{#style_dlg.text_case}</label></td>
+				<td>
+					<select id="text_case" name="text_case"></select>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="text_color">{#style_dlg.text_color}</label></td>
+				<td colspan="2">
+					<table role="presentation" border="0" cellpadding="0" cellspacing="0">
+						<tr>
+							<td><input id="text_color" name="text_color" type="text" value="" size="9" onChange="updateColor('text_color_pick','text_color');" /></td>
+							<td id="text_color_pickcontainer">&nbsp;</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td valign="top" style="vertical-align: top; padding-top: 3px;">{#style_dlg.text_decoration}</td>
+				<td colspan="2">
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input id="text_underline" name="text_underline" class="checkbox" type="checkbox" /></td>
+							<td><label for="text_underline">{#style_dlg.text_underline}</label></td>
+						</tr>
+						<tr>
+							<td><input id="text_overline" name="text_overline" class="checkbox" type="checkbox" /></td>
+							<td><label for="text_overline">{#style_dlg.text_overline}</label></td>
+						</tr>
+						<tr>
+							<td><input id="text_linethrough" name="text_linethrough" class="checkbox" type="checkbox" /></td>
+							<td><label for="text_linethrough">{#style_dlg.text_striketrough}</label></td>
+						</tr>
+						<tr>
+							<td><input id="text_blink" name="text_blink" class="checkbox" type="checkbox" /></td>
+							<td><label for="text_blink">{#style_dlg.text_blink}</label></td>
+						</tr>
+						<tr>
+							<td><input id="text_none" name="text_none" class="checkbox" type="checkbox" /></td>
+							<td><label for="text_none">{#style_dlg.text_none}</label></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+
+<div id="background_panel" class="panel">
+	<fieldset>
+		<legend>{#style_dlg.background}</legend>
+		<table role="presentation" border="0">
+			<tr>
+				<td><label for="background_color">{#style_dlg.background_color}</label></td>
+				<td>
+					<table role="presentation" border="0" cellpadding="0" cellspacing="0">
+						<tr>
+							<td><input id="background_color" name="background_color" type="text" value="" size="9" onChange="updateColor('background_color_pick','background_color');" /></td>
+							<td id="background_color_pickcontainer">&nbsp;</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+
+			<tr>
+				<td><label for="background_image">{#style_dlg.background_image}</label></td>
+				<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
+					<tr> 
+						<td><input id="background_image" name="background_image" type="text" /></td> 
+						<td id="background_image_browser">&nbsp;</td>
+					</tr>
+					</table>
+				</td>
+			</tr>
+
+			<tr>
+				<td><label for="background_repeat">{#style_dlg.background_repeat}</label></td>
+				<td><select id="background_repeat" name="background_repeat" class="mceEditableSelect"></select></td>
+			</tr>
+
+			<tr>
+				<td><label for="background_attachment">{#style_dlg.background_attachment}</label></td>
+				<td><select id="background_attachment" name="background_attachment" class="mceEditableSelect"></select></td>
+			</tr>
+
+			<tr>
+				<td><label for="background_hpos">{#style_dlg.background_hpos}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><select id="background_hpos" name="background_hpos" class="mceEditableSelect"></select></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="background_hpos_measurement_label" for="background_hpos_measurement" style="display: none; visibility: hidden;">Horizontal position measurement unit</label>
+								<select id="background_hpos_measurement" name="background_hpos_measurement" aria-labelledby="background_hpos_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+
+			<tr>
+				<td><label for="background_vpos">{#style_dlg.background_vpos}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><select id="background_vpos" name="background_vpos" class="mceEditableSelect"></select></td>
+							<td>&nbsp;</td>
+							<td>
+
+								<label id="background_vpos_measurement_label" for="background_vpos_measurement" style="display: none; visibility: hidden;">Vertical position measurement unit</label>
+								<select id="background_vpos_measurement" name="background_vpos_measurement" aria-labelledby="background_vpos_measurement_label">></select></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+
+<div id="block_panel" class="panel">
+	<fieldset>
+		<legend>{#style_dlg.block}</legend>
+		<table role="presentation" border="0">
+			<tr>
+				<td><label for="block_wordspacing">{#style_dlg.block_wordspacing}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><select id="block_wordspacing" name="block_wordspacing" class="mceEditableSelect"></select></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="block_wordspacing_measurement_label" for="block_wordspacing_measurement" style="display: none; visibility: hidden;">Word spacing measurement unit</label>
+								<select id="block_wordspacing_measurement" name="block_wordspacing_measurement" aria-labelledby="block_wordspacing_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+
+			<tr>
+				<td><label for="block_letterspacing">{#style_dlg.block_letterspacing}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><select id="block_letterspacing" name="block_letterspacing" class="mceEditableSelect"></select></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="block_letterspacing_measurement_label" for="block_letterspacing_measurement" style="display: none; visibility: hidden;">Letter spacing measurement unit</label>
+								<select id="block_letterspacing_measurement" name="block_letterspacing_measurement" aria-labelledby="block_letterspacing_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+
+			<tr>
+				<td><label for="block_vertical_alignment">{#style_dlg.block_vertical_alignment}</label></td>
+				<td><select id="block_vertical_alignment" name="block_vertical_alignment" class="mceEditableSelect"></select></td>
+			</tr>
+
+			<tr>
+				<td><label for="block_text_align">{#style_dlg.block_text_align}</label></td>
+				<td><select id="block_text_align" name="block_text_align" class="mceEditableSelect"></select></td>
+			</tr>
+
+			<tr>
+				<td><label for="block_text_indent">{#style_dlg.block_text_indent}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="block_text_indent" name="block_text_indent" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="block_text_indent_measurement_label" for="block_text_indent_measurement" style="display: none; visibility: hidden;">Text Indent Measurement Unit</label>
+
+								<select id="block_text_indent_measurement" name="block_text_indent_measurement" aria-labelledby="block_text_indent_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+
+			<tr>
+				<td><label for="block_whitespace">{#style_dlg.block_whitespace}</label></td>
+				<td><select id="block_whitespace" name="block_whitespace" class="mceEditableSelect"></select></td>
+			</tr>
+
+			<tr>
+				<td><label for="block_display">{#style_dlg.block_display}</label></td>
+				<td><select id="block_display" name="block_display" class="mceEditableSelect"></select></td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+
+<div id="box_panel" class="panel">
+	<fieldset>
+		<legend>{#style_dlg.box}</legend>
+		<table role="presentation" border="0">
+			<tr>
+				<td><label for="box_width">{#style_dlg.box_width}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_width" name="box_width" class="mceEditableSelect" onChange="synch('box_width','positioning_width');" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_width_measurement_label" for="box_width_measurement" style="display: none; visibility: hidden;">Box Width Measurement Unit</label>
+								<select id="box_width_measurement" name="box_width_measurement" aria-labelledby="box_width_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+				<td>&nbsp;&nbsp;&nbsp;<label for="box_float">{#style_dlg.box_float}</label></td>
+				<td><select id="box_float" name="box_float" class="mceEditableSelect"></select></td>
+			</tr>
+
+			<tr>
+				<td><label for="box_height">{#style_dlg.box_height}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_height" name="box_height" class="mceEditableSelect" onChange="synch('box_height','positioning_height');" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_height_measurement_label" for="box_height_measurement" style="display: none; visibility: hidden;">Box Height Measurement Unit</label>
+								<select id="box_height_measurement" name="box_height_measurement" aria-labelledby="box_height_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+				<td>&nbsp;&nbsp;&nbsp;<label for="box_clear">{#style_dlg.box_clear}</label></td>
+				<td><select id="box_clear" name="box_clear" class="mceEditableSelect"></select></td>
+			</tr>
+		</table>
+	</fieldset>
+
+<div style="float: left; width: 49%">
+	<fieldset>
+		<legend>{#style_dlg.padding}</legend>
+
+		<table role="presentation" border="0">
+			<tr>
+				<td>&nbsp;</td>
+				<td><input type="checkbox" id="box_padding_same" name="box_padding_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_padding');" /> <label for="box_padding_same">{#style_dlg.same}</label></td>
+			</tr>
+			<tr>
+				<td><label for="box_padding_top">{#style_dlg.top}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_padding_top" name="box_padding_top" class="mceEditableSelect" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_padding_top_measurement_label" for="box_padding_top_measurement" style="display: none; visibility: hidden;">Padding Top Measurement Unit</label>
+								<select id="box_padding_top_measurement" name="box_padding_top_measurement" aria-labelledby="box_padding_top_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="box_padding_right">{#style_dlg.right}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_padding_right" name="box_padding_right" class="mceEditableSelect" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_padding_right_measurement_label" for="box_padding_right_measurement" style="display: none; visibility: hidden;">Padding Right Measurement Unit</label>
+								<select id="box_padding_right_measurement" name="box_padding_right_measurement" disabled="disabled" aria-labelledby="box_padding_right_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="box_padding_bottom">{#style_dlg.bottom}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_padding_bottom" name="box_padding_bottom" class="mceEditableSelect" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_padding_bottom_measurement_label" for="box_padding_bottom_measurement" style="display: none; visibility: hidden;">Padding Bottom Measurement Unit</label>
+								<select id="box_padding_bottom_measurement" name="box_padding_bottom_measurement" disabled="disabled" aria-labelledby="box_padding_bottom_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="box_padding_left">{#style_dlg.left}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_padding_left" name="box_padding_left" class="mceEditableSelect" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_padding_left_measurement_label" for="box_padding_left_measurement" style="display: none; visibility: hidden;">Padding Left Measurement Unit</label>
+								<select id="box_padding_left_measurement" name="box_padding_left_measurement" disabled="disabled" aria-labelledby="box_padding_left_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+
+<div style="float: right; width: 49%">
+	<fieldset>
+		<legend>{#style_dlg.margin}</legend>
+
+		<table role="presentation" border="0">
+			<tr>
+				<td>&nbsp;</td>
+				<td><input type="checkbox" id="box_margin_same" name="box_margin_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_margin');" /> <label for="box_margin_same">{#style_dlg.same}</label></td>
+			</tr>
+			<tr>
+				<td><label for="box_margin_top">{#style_dlg.top}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_margin_top" name="box_margin_top" class="mceEditableSelect" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_margin_top_measurement_label" for="box_margin_top_measurement" style="display: none; visibility: hidden;">Margin Top Measurement Unit</label>
+								<select id="box_margin_top_measurement" name="box_margin_top_measurement" aria-labelledby="box_margin_top_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="box_margin_right">{#style_dlg.right}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_margin_right" name="box_margin_right" class="mceEditableSelect" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_margin_right_measurement_label" for="box_margin_right_measurement" style="display: none; visibility: hidden;">Margin Right Measurement Unit</label>
+								<select id="box_margin_right_measurement" name="box_margin_right_measurement" disabled="disabled" aria-labelledby="box_margin_right_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="box_margin_bottom">{#style_dlg.bottom}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_margin_bottom" name="box_margin_bottom" class="mceEditableSelect" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_margin_bottom_measurement_label" for="box_margin_bottom_measurement" style="display: none; visibility: hidden;">Margin Bottom Measurement Unit</label>
+								<select id="box_margin_bottom_measurement" name="box_margin_bottom_measurement" disabled="disabled" aria-labelledby="box_margin_bottom_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td><label for="box_margin_left">{#style_dlg.left}</label></td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="box_margin_left" name="box_margin_left" class="mceEditableSelect" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="box_margin_left_measurement_label" for="box_margin_left_measurement" style="display: none; visibility: hidden;">Margin Left Measurement Unit</label>
+								<select id="box_margin_left_measurement" name="box_margin_left_measurement" disabled="disabled" aria-labelledby="box_margin_left_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+<br style="clear: both" />
+</div>
+
+<div id="border_panel" class="panel">
+	<fieldset>
+		<legend>{#style_dlg.border}</legend>	
+		<table role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%">
+		<tr>
+			<td class="tdelim">&nbsp;</td>
+			<td class="tdelim delim">&nbsp;</td>
+			<td class="tdelim">{#style_dlg.style}</td>
+			<td class="tdelim delim">&nbsp;</td>
+			<td class="tdelim">{#style_dlg.width}</td>
+			<td class="tdelim delim">&nbsp;</td>
+			<td class="tdelim">{#style_dlg.color}</td>
+		</tr>
+
+		<tr>
+			<td>&nbsp;</td>
+			<td class="delim">&nbsp;</td>
+			<td><input type="checkbox" id="border_style_same" name="border_style_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_style');" /> <label for="border_style_same">{#style_dlg.same}</label></td>
+			<td class="delim">&nbsp;</td>
+			<td><input type="checkbox" id="border_width_same" name="border_width_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_width');" /> <label for="border_width_same">{#style_dlg.same}</label></td>
+			<td class="delim">&nbsp;</td>
+			<td><input type="checkbox" id="border_color_same" name="border_color_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_color');" /> <label for="border_color_same">{#style_dlg.same}</label></td>
+		</tr>
+
+		<tr>
+			<td>{#style_dlg.top}</td>
+			<td class="delim">&nbsp;</td>
+			<td><select id="border_style_top" name="border_style_top" class="mceEditableSelect"></select></td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+					<tr>
+						<td><select id="border_width_top" name="border_width_top" class="mceEditableSelect"></select></td>
+						<td>&nbsp;</td>
+						<td>
+							<label id="border_width_top_measurement_label" for="border_width_top_measurement" style="display: none; visibility: hidden;">Width top Measurement Unit</label>
+							<select id="border_width_top_measurement" name="border_width_top_measurement" aria-labelledby="border_width_top_measurement_label"></select>
+						</td>
+					</tr>
+				</table>
+			</td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
+					<tr>
+						<td><input id="border_color_top" name="border_color_top" type="text" value="" size="9" onChange="updateColor('border_color_top_pick','border_color_top');" /></td>
+						<td id="border_color_top_pickcontainer">&nbsp;</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+
+		<tr>
+			<td>{#style_dlg.right}</td>
+			<td class="delim">&nbsp;</td>
+			<td><select id="border_style_right" name="border_style_right" class="mceEditableSelect" disabled="disabled"></select></td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+					<tr>
+						<td><select id="border_width_right" name="border_width_right" class="mceEditableSelect" disabled="disabled"></select></td>
+						<td>&nbsp;</td>
+						<td>
+							<label id="border_width_right_measurement_label" for="border_width_right_measurement" style="display: none; visibility: hidden;">Width Right Measurement Unit</label>
+							<select id="border_width_right_measurement" name="border_width_right_measurement" disabled="disabled" aria-labelledby="border_width_right_measurement_label"></select>
+						</td>
+					</tr>
+				</table>
+			</td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
+					<tr>
+						<td><input id="border_color_right" name="border_color_right" type="text" value="" size="9" onChange="updateColor('border_color_right_pick','border_color_right');" disabled="disabled" /></td>
+						<td id="border_color_right_pickcontainer">&nbsp;</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+
+		<tr>
+			<td>{#style_dlg.bottom}</td>
+			<td class="delim">&nbsp;</td>
+			<td><select id="border_style_bottom" name="border_style_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+					<tr>
+						<td><select id="border_width_bottom" name="border_width_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
+						<td>&nbsp;</td>
+						<td>
+							<label id="border_width_bottom_measurement_label" for="border_width_bottom_measurement" style="display: none; visibility: hidden;">Width Bottom Measurement Unit</label>
+							<select id="border_width_bottom_measurement" name="border_width_bottom_measurement" disabled="disabled" aria-labelledby="border_width_bottom_measurement_label"></select>
+						</td>
+					</tr>
+				</table>
+			</td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
+					<tr>
+						<td><input id="border_color_bottom" name="border_color_bottom" type="text" value="" size="9" onChange="updateColor('border_color_bottom_pick','border_color_bottom');" disabled="disabled" /></td>
+						<td id="border_color_bottom_pickcontainer">&nbsp;</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+
+		<tr>
+			<td>{#style_dlg.left}</td>
+			<td class="delim">&nbsp;</td>
+			<td><select id="border_style_left" name="border_style_left" class="mceEditableSelect" disabled="disabled"></select></td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+					<tr>
+						<td><select id="border_width_left" name="border_width_left" class="mceEditableSelect" disabled="disabled"></select></td>
+						<td>&nbsp;</td>
+						<td>
+							<label id="border_width_left_measurement_label" for="border_width_left_measurement" style="display: none; visibility: hidden;">Width Left Measurement Unit</label>
+							<select id="border_width_left_measurement" name="border_width_left_measurement" disabled="disabled" aria-labelledby="border_width_left_measurement_label"></select>
+						</td>
+					</tr>
+				</table>
+			</td>
+			<td class="delim">&nbsp;</td>
+			<td>
+				<table role="presentation" border="0" cellpadding="0" cellspacing="0">
+					<tr>
+						<td><input id="border_color_left" name="border_color_left" type="text" value="" size="9" onChange="updateColor('border_color_left_pick','border_color_left');" disabled="disabled" /></td>
+						<td id="border_color_left_pickcontainer">&nbsp;</td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+		</table>
+	</fieldset>
+</div>
+
+<div id="list_panel" class="panel">
+<fieldset>
+	<legend>{#style_dlg.list}</legend>
+	<table role="presentation" border="0">
+		<tr>
+			<td><label for="list_type">{#style_dlg.list_type}</label></td>
+			<td><select id="list_type" name="list_type" class="mceEditableSelect"></select></td>
+		</tr>
+
+		<tr>
+			<td><label for="list_bullet_image">{#style_dlg.bullet_image}</label></td>
+			<td><input id="list_bullet_image" name="list_bullet_image" type="text" /></td>
+		</tr>
+
+		<tr>
+			<td><label for="list_position">{#style_dlg.position}</label></td>
+			<td><select id="list_position" name="list_position" class="mceEditableSelect"></select></td>
+		</tr>
+	</table>
+</fieldset>
+</div>
+
+<div id="positioning_panel" class="panel">
+<fieldset>
+	<legend>{#style_dlg.position}</legend>
+<table role="presentation" border="0">
+	<tr>
+		<td><label for="positioning_type">{#style_dlg.positioning_type}</label></td>
+		<td><select id="positioning_type" name="positioning_type" class="mceEditableSelect"></select></td>
+		<td>&nbsp;&nbsp;&nbsp;<label for="positioning_visibility">{#style_dlg.visibility}</label></td>
+		<td><select id="positioning_visibility" name="positioning_visibility" class="mceEditableSelect"></select></td>
+	</tr>
+
+	<tr>
+		<td><label for="positioning_width">{#style_dlg.width}</label></td>
+		<td>
+			<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+				<tr>
+					<td><input type="text" id="positioning_width" name="positioning_width" onChange="synch('positioning_width','box_width');" /></td>
+					<td>&nbsp;</td>
+					<td>
+						<label id="positioning_width_measurement_label" for="positioning_width_measurement" style="display: none; visibility: hidden;">Positioning width Measurement Unit</label>
+						<select id="positioning_width_measurement" name="positioning_width_measurement" aria-labelledby="positioning_width_measurement_label"></select>
+					</td>
+				</tr>
+			</table>
+		</td>
+		<td>&nbsp;&nbsp;&nbsp;<label for="positioning_zindex">{#style_dlg.zindex}</label></td>
+		<td><input type="text" id="positioning_zindex" name="positioning_zindex" /></td>
+	</tr>
+
+	<tr>
+		<td><label for="positioning_height">{#style_dlg.height}</label></td>
+		<td>
+			<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+				<tr>
+					<td><input type="text" id="positioning_height" name="positioning_height" onChange="synch('positioning_height','box_height');" /></td>
+					<td>&nbsp;</td>
+					<td>
+						<label id="positioning_height_measurement_label" for="positioning_height_measurement" style="display: none; visibility: hidden;">Positioning Height Measurement Unit</label>
+						<select id="positioning_height_measurement" name="positioning_height_measurement" aria-labelledby="positioning_height_measurement_label"></select>
+					</td>
+				</tr>
+			</table>
+		</td>
+		<td>&nbsp;&nbsp;&nbsp;<label for="positioning_overflow">{#style_dlg.overflow}</label></td>
+		<td><select id="positioning_overflow" name="positioning_overflow" class="mceEditableSelect"></select></td>
+	</tr>
+</table>
+</fieldset>
+
+<div style="float: left; width: 49%">
+	<fieldset>
+		<legend>{#style_dlg.placement}</legend>
+
+		<table role="presentation" border="0">
+			<tr>
+				<td>&nbsp;</td>
+				<td><input type="checkbox" id="positioning_placement_same" name="positioning_placement_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_placement');" /> <label for="positioning_placement_same">{#style_dlg.same}</label></td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.top}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_placement_top" name="positioning_placement_top" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_placement_top_measurement_label" for="positioning_placement_top_measurement" style="display: none; visibility: hidden;">Placement Top Measurement Unit</label>
+								<select id="positioning_placement_top_measurement" name="positioning_placement_top_measurement" aria-labelledby="positioning_placement_top_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.right}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_placement_right" name="positioning_placement_right" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_placement_right_measurement_label" for="positioning_placement_right_measurement" style="display: none; visibility: hidden;">Placement Right Measurement Unit</label>
+								<select id="positioning_placement_right_measurement" name="positioning_placement_right_measurement" disabled="disabled" aria-labelledby="positioning_placement_right_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.bottom}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_placement_bottom" name="positioning_placement_bottom" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_placement_bottom_measurement_label" for="positioning_placement_bottom_measurement" style="display: none; visibility: hidden;">Placement Bottom Measurement Unit</label>
+								<select id="positioning_placement_bottom_measurement" name="positioning_placement_bottom_measurement" disabled="disabled" aria-labelledby="positioning_placement_bottom_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.left}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_placement_left" name="positioning_placement_left" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_placement_left_measurement_label" for="positioning_placement_left_measurement" style="display: none; visibility: hidden;">Placement Left Measurement Unit</label>
+								<select id="positioning_placement_left_measurement" name="positioning_placement_left_measurement" disabled="disabled" aria-labelledby="positioning_placement_left_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+
+<div style="float: right; width: 49%">
+	<fieldset>
+		<legend>{#style_dlg.clip}</legend>
+
+		<table role="presentation" border="0">
+			<tr>
+				<td>&nbsp;</td>
+				<td><input type="checkbox" id="positioning_clip_same" name="positioning_clip_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_clip');" /> <label for="positioning_clip_same">{#style_dlg.same}</label></td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.top}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_clip_top" name="positioning_clip_top" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_clip_top_measurement_label" for="positioning_clip_top_measurement" style="display: none; visibility: hidden;">Clip Top Measurement Unit</label>
+								<select id="positioning_clip_top_measurement" name="positioning_clip_top_measurement" aria-labelledby="positioning_clip_top_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.right}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_clip_right" name="positioning_clip_right" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_clip_right_measurement_label" for="positioning_clip_right_measurement" style="display: none; visibility: hidden;">Clip Right Measurement Unit</label>
+								<select id="positioning_clip_right_measurement" name="positioning_clip_right_measurement" disabled="disabled" aria-labelledby="positioning_clip_right_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.bottom}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_clip_bottom" name="positioning_clip_bottom" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_clip_bottom_measurement_label" for="positioning_clip_bottom_measurement" style="display: none; visibility: hidden;">Clip Bottom Measurement Unit</label>
+								<select id="positioning_clip_bottom_measurement" name="positioning_clip_bottom_measurement" disabled="disabled" aria-labelledby="positioning_clip_bottom_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+			<tr>
+				<td>{#style_dlg.left}</td>
+				<td>
+					<table role="presentation" border="0" cellspacing="0" cellpadding="0">
+						<tr>
+							<td><input type="text" id="positioning_clip_left" name="positioning_clip_left" disabled="disabled" /></td>
+							<td>&nbsp;</td>
+							<td>
+								<label id="positioning_clip_left_measurement_label" for="positioning_clip_left_measurement" style="display: none; visibility: hidden;">Clip Left Measurement Unit</label>
+								<select id="positioning_clip_left_measurement" name="positioning_clip_left_measurement" disabled="disabled" aria-labelledby="positioning_clip_left_measurement_label"></select>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</fieldset>
+</div>
+<br style="clear: both" />
+</div>
+</div>
+
+<div class="mceActionPanel">
+	<input type="submit" id="insert" name="insert" value="{#update}" />
+	<input type="button" class="button" id="apply" name="apply" value="{#style_dlg.apply}" onClick="applyAction();" />
+	<input type="button" id="cancel" name="cancel" value="{#cancel}" onClick="tinyMCEPopup.close();" />
+</div>
+</form>
+
+<div style="display: none">
+	<div id="container"></div>
+</div>
+
+</body>
+</html>
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m<n.length;m++){if(r(n[m])){return n[m]}}}else{for(m=j-1;m>=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
@@ -1,1 +1,123 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
 
+(function() {
+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;
+
+	tinymce.create('tinymce.plugins.TabFocusPlugin', {
+		init : function(ed, url) {
+			function tabCancel(ed, e) {
+				if (e.keyCode === 9)
+					return Event.cancel(e);
+			}
+
+			function tabHandler(ed, e) {
+				var x, i, f, el, v;
+
+				function find(d) {
+					el = DOM.select(':input:enabled,*[tabindex]');
+
+					function canSelectRecursive(e) {
+						return e.nodeName==="BODY" || (e.type != 'hidden' &&
+							!(e.style.display == "none") &&
+							!(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode));
+					}
+					function canSelectInOldIe(el) {
+						return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA";
+					}
+					function isOldIe() {
+						return tinymce.isIE6 || tinymce.isIE7;
+					}
+					function canSelect(el) {
+						return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el);
+					}
+
+					each(el, function(e, i) {
+						if (e.id == ed.id) {
+							x = i;
+							return false;
+						}
+					});
+					if (d > 0) {
+						for (i = x + 1; i < el.length; i++) {
+							if (canSelect(el[i]))
+								return el[i];
+						}
+					} else {
+						for (i = x - 1; i >= 0; i--) {
+							if (canSelect(el[i]))
+								return el[i];
+						}
+					}
+
+					return null;
+				}
+
+				if (e.keyCode === 9) {
+					v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));
+
+					if (v.length == 1) {
+						v[1] = v[0];
+						v[0] = ':prev';
+					}
+
+					// Find element to focus
+					if (e.shiftKey) {
+						if (v[0] == ':prev')
+							el = find(-1);
+						else
+							el = DOM.get(v[0]);
+					} else {
+						if (v[1] == ':next')
+							el = find(1);
+						else
+							el = DOM.get(v[1]);
+					}
+
+					if (el) {
+						if (el.id && (ed = tinymce.get(el.id || el.name)))
+							ed.focus();
+						else
+							window.setTimeout(function() {
+								if (!tinymce.isWebKit)
+									window.focus();
+								el.focus();
+							}, 10);
+
+						return Event.cancel(e);
+					}
+				}
+			}
+
+			ed.onKeyUp.add(tabCancel);
+
+			if (tinymce.isGecko) {
+				ed.onKeyPress.add(tabHandler);
+				ed.onKeyDown.add(tabCancel);
+			} else
+				ed.onKeyDown.add(tabHandler);
+
+		},
+
+		getInfo : function() {
+			return {
+				longname : 'Tabfocus',
+				author : 'Moxiecode Systems AB',
+				authorurl : 'http://tinymce.moxiecode.com',
+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',
+				version : tinymce.majorVersion + "." + tinymce.minorVersion
+			};
+		}
+	});
+
+	// Register plugin
+	tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);
+})();
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/cell.htm
@@ -1,1 +1,181 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#table_dlg.cell_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/cell.js"></script>

+	<link href="css/cell.css" rel="stylesheet" type="text/css" />

+</head>

+<body id="tablecell" style="display: none" role="application">

+	<form onsubmit="updateAction();return false;" action="#">

+		<div class="tabs">

+			<ul>

+				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>

+				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="general_panel" class="panel current">

+				<fieldset>

+					<legend>{#table_dlg.general_props}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td><label for="align">{#table_dlg.align}</label></td>

+							<td>

+								<select id="align" name="align" class="mceFocus">

+									<option value="">{#not_set}</option>

+									<option value="center">{#table_dlg.align_middle}</option>

+									<option value="left">{#table_dlg.align_left}</option>

+									<option value="right">{#table_dlg.align_right}</option>

+								</select>

+							</td>

+		

+							<td><label for="celltype">{#table_dlg.cell_type}</label></td>

+							<td>

+								<select id="celltype" name="celltype">

+									<option value="td">{#table_dlg.td}</option>

+									<option value="th">{#table_dlg.th}</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="valign">{#table_dlg.valign}</label></td>

+							<td>

+								<select id="valign" name="valign">

+									<option value="">{#not_set}</option>

+									<option value="top">{#table_dlg.align_top}</option>

+									<option value="middle">{#table_dlg.align_middle}</option>

+									<option value="bottom">{#table_dlg.align_bottom}</option>

+								</select>

+							</td>

+

+							<td><label for="scope">{#table_dlg.scope}</label></td>

+							<td>

+								<select id="scope" name="scope">

+									<option value="">{#not_set}</option>

+									<option value="col">{#table.col}</option>

+									<option value="row">{#table.row}</option>

+									<option value="rowgroup">{#table_dlg.rowgroup}</option>

+									<option value="colgroup">{#table_dlg.colgroup}</option>

+								</select>

+							</td>

+

+						</tr>

+

+						<tr>

+							<td><label for="width">{#table_dlg.width}</label></td>

+							<td><input id="width" name="width" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

+

+							<td><label for="height">{#table_dlg.height}</label></td>

+							<td><input id="height" name="height" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

+						</tr>

+

+						<tr id="styleSelectRow">

+							<td><label for="class">{#class_name}</label></td>

+							<td colspan="3">

+								<select id="class" name="class" class="mceEditableSelect">

+									<option value="" selected="selected">{#not_set}</option>

+								</select>

+							</td>

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="advanced_panel" class="panel">

+				<fieldset>

+					<legend>{#table_dlg.advanced_props}</legend>

+

+					<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+						<tr>

+							<td class="column1"><label for="id">{#table_dlg.id}</label></td> 

+							<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> 

+						</tr>

+

+						<tr>

+							<td><label for="style">{#table_dlg.style}</label></td>

+							<td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> 

+							<td>

+								<select id="dir" name="dir" style="width: 200px"> 

+										<option value="">{#not_set}</option> 

+										<option value="ltr">{#table_dlg.ltr}</option> 

+										<option value="rtl">{#table_dlg.rtl}</option> 

+								</select>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> 

+							<td>

+								<input id="lang" name="lang" type="text" value="" style="width: 200px" />

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> 

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>

+										<td id="backgroundimagebrowsercontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+

+						<tr role="group" aria-labelledby="bordercolor_label">

+							<td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td> 

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>

+										<td id="bordercolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+

+						<tr role="group" aria-labelledby="bgcolor_label">

+							<td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td> 

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>

+										<td id="bgcolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<div>

+				<select id="action" name="action">

+					<option value="cell">{#table_dlg.cell_cell}</option>

+					<option value="row">{#table_dlg.cell_row}</option>

+					<option value="col">{#table_dlg.cell_col}</option>

+					<option value="all">{#table_dlg.cell_all}</option>

+				</select>

+			</div>

+

+			<input type="submit" id="insert" name="insert" value="{#update}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/css/cell.css
@@ -1,1 +1,17 @@
-
+/* CSS file for cell dialog in the table plugin */

+

+.panel_wrapper div.current {

+	height: 200px;

+}

+

+.advfield {

+	width: 200px;

+}

+

+#action {

+	margin-bottom: 3px;

+}

+

+#class {

+	width: 150px;

+}

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/css/row.css
@@ -1,1 +1,26 @@
+/* CSS file for row dialog in the table plugin */

+

+.panel_wrapper div.current {

+	height: 200px;

+}

+

+.advfield {

+	width: 200px;

+}

+

+#action {

+	margin-bottom: 3px;

+}

+

+#rowtype,#align,#valign,#class,#height {

+	width: 150px;

+}

+

+#height {

+	width: 50px;	

+}

+

+.col2 {

+	padding-left: 20px;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/css/table.css
@@ -1,1 +1,14 @@
+/* CSS file for table dialog in the table plugin */

+

+.panel_wrapper div.current {

+	height: 245px;

+}

+

+.advfield {

+	width: 200px;

+}

+

+#class {

+	width: 150px;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T<Q+U;T++){if(!g[T]){g[T]=[]}for(S=R;S<R+V;S++){g[T][S]={part:N,real:T==Q&&S==R,elm:W,rowspan:U,colspan:V}}}})});M+=O.length})}function z(M,O){var N;N=g[O];if(N){return N[M]}}function s(O,M,N){if(O){N=parseInt(N);if(N===1){O.removeAttribute(M,1)}else{O.setAttribute(M,N,1)}}}function j(M){return M&&(G.hasClass(M.elm,"mceSelected")||M==o)}function k(){var M=[];e(H.rows,function(N){e(N.cells,function(O){if(G.hasClass(O,"mceSelected")||O==o.elm){M.push(N);return false}})});return M}function r(){var M=G.createRng();M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H)}function f(M){var N;d.walk(M,function(P){var O;if(P.nodeType==3){e(G.getParents(P.parentNode,null,M).reverse(),function(Q){Q=A(Q,false);if(!N){N=O=Q}else{if(O){O.appendChild(Q)}}O=Q});if(O){O.innerHTML=d.isIE?"&nbsp;":'<br data-mce-bogus="1" />'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='<br data-mce-bogus="1" />'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q<S-1;Q++){G.insertAfter(f(P),P)}u(O,N,R-1,S)}}})})}function p(V,S,Y){var P,O,X,W,U,R,T,M,V,N,Q;if(V){pos=F(V);P=pos.x;O=pos.y;X=P+(S-1);W=O+(Y-1)}else{P=L.x;O=L.y;X=D.x;W=D.y}T=z(P,O);M=z(X,W);if(T&&M&&T.part==M.part){C();t();T=z(P,O).elm;s(T,"colSpan",(X-P)+1);s(T,"rowSpan",(W-O)+1);for(R=O;R<=W;R++){for(U=P;U<=X;U++){if(!g[R]||!g[R][U]){continue}V=g[R][U].elm;if(V!=T){N=d.grep(V.childNodes);e(N,function(Z){T.appendChild(Z)});if(N.length){N=d.grep(T.childNodes);Q=0;e(N,function(Z){if(Z.nodeName=="BR"&&G.getAttrib(Z,"data-mce-bogus")&&Q++<N.length-1){T.removeChild(Z)}})}G.remove(V)}}}q()}}function l(Q){var M,S,P,R,T,U,N,V,O;e(g,function(W,X){e(W,function(Z,Y){if(j(Z)){Z=Z.elm;T=Z.parentNode;U=A(T,false);M=X;if(Q){return false}}});if(Q){return !M}});for(R=0;R<g[0].length;R++){if(!g[M][R]){continue}S=g[M][R].elm;if(S!=P){if(!Q){O=a(S,"rowspan");if(O>1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;i<S;i++){R=T.cells[i];s(R,"colSpan",1);s(R,"rowSpan",1)}for(i=S;i<Q;i++){T.appendChild(f(T.cells[S-1]))}for(i=Q;i<S;i++){G.remove(T.cells[i])}if(N){M.parentNode.insertBefore(T,M)}else{G.insertAfter(T,M)}})}function F(M){var N;e(g,function(O,P){e(O,function(R,Q){if(R.elm==M){N={x:Q,y:P};return false}});return !N});return N}function w(M){L=F(M)}function I(){var O,N,M;N=M=0;e(g,function(P,Q){e(P,function(S,R){var U,T;if(j(S)){S=g[Q][R];if(R>N){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)<P){P-=S.colspan-1}}}for(x=P;x<=N;x++){S=g[O][x];if(!S.real){if(O-(S.rowspan-1)<O){O-=S.rowspan-1}}}for(y=O;y<=T;y++){for(x=P;x<=U;x++){S=g[y][x];if(S.real){Q=S.colspan-1;R=S.rowspan-1;if(Q){if(x+Q>N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){return S&&S[R?"lastChild":"firstChild"]}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}if(!d.isIE){function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){r.dom.add(r.getBody(),"p",null,'<br mce_bogus="1" />')}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&z.childNodes.length==1&&z.firstChild.nodeName=="BR"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})}});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/editor_plugin_src.js
@@ -1,1 +1,1409 @@
-
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function(tinymce) {
+	var each = tinymce.each;
+
+	// Checks if the selection/caret is at the start of the specified block element
+	function isAtStart(rng, par) {
+		var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
+
+		rng2.setStartBefore(par);
+		rng2.setEnd(rng.endContainer, rng.endOffset);
+
+		elm = doc.createElement('body');
+		elm.appendChild(rng2.cloneContents());
+
+		// Check for text characters of other elements that should be treated as content
+		return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;
+	};
+
+	function getSpanVal(td, name) {
+		return parseInt(td.getAttribute(name) || 1);
+	}
+
+	/**
+	 * Table Grid class.
+	 */
+	function TableGrid(table, dom, selection) {
+		var grid, startPos, endPos, selectedCell;
+
+		buildGrid();
+		selectedCell = dom.getParent(selection.getStart(), 'th,td');
+		if (selectedCell) {
+			startPos = getPos(selectedCell);
+			endPos = findEndPos();
+			selectedCell = getCell(startPos.x, startPos.y);
+		}
+
+		function cloneNode(node, children) {
+			node = node.cloneNode(children);
+			node.removeAttribute('id');
+
+			return node;
+		}
+
+		function buildGrid() {
+			var startY = 0;
+
+			grid = [];
+
+			each(['thead', 'tbody', 'tfoot'], function(part) {
+				var rows = dom.select('> ' + part + ' tr', table);
+
+				each(rows, function(tr, y) {
+					y += startY;
+
+					each(dom.select('> td, > th', tr), function(td, x) {
+						var x2, y2, rowspan, colspan;
+
+						// Skip over existing cells produced by rowspan
+						if (grid[y]) {
+							while (grid[y][x])
+								x++;
+						}
+
+						// Get col/rowspan from cell
+						rowspan = getSpanVal(td, 'rowspan');
+						colspan = getSpanVal(td, 'colspan');
+
+						// Fill out rowspan/colspan right and down
+						for (y2 = y; y2 < y + rowspan; y2++) {
+							if (!grid[y2])
+								grid[y2] = [];
+
+							for (x2 = x; x2 < x + colspan; x2++) {
+								grid[y2][x2] = {
+									part : part,
+									real : y2 == y && x2 == x,
+									elm : td,
+									rowspan : rowspan,
+									colspan : colspan
+								};
+							}
+						}
+					});
+				});
+
+				startY += rows.length;
+			});
+		};
+
+		function getCell(x, y) {
+			var row;
+
+			row = grid[y];
+			if (row)
+				return row[x];
+		};
+
+		function setSpanVal(td, name, val) {
+			if (td) {
+				val = parseInt(val);
+
+				if (val === 1)
+					td.removeAttribute(name, 1);
+				else
+					td.setAttribute(name, val, 1);
+			}
+		}
+
+		function isCellSelected(cell) {
+			return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell);
+		};
+
+		function getSelectedRows() {
+			var rows = [];
+
+			each(table.rows, function(row) {
+				each(row.cells, function(cell) {
+					if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) {
+						rows.push(row);
+						return false;
+					}
+				});
+			});
+
+			return rows;
+		};
+
+		function deleteTable() {
+			var rng = dom.createRng();
+
+			rng.setStartAfter(table);
+			rng.setEndAfter(table);
+
+			selection.setRng(rng);
+
+			dom.remove(table);
+		};
+
+		function cloneCell(cell) {
+			var formatNode;
+
+			// Clone formats
+			tinymce.walk(cell, function(node) {
+				var curNode;
+
+				if (node.nodeType == 3) {
+					each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {
+						node = cloneNode(node, false);
+
+						if (!formatNode)
+							formatNode = curNode = node;
+						else if (curNode)
+							curNode.appendChild(node);
+
+						curNode = node;
+					});
+
+					// Add something to the inner node
+					if (curNode)
+						curNode.innerHTML = tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />';
+
+					return false;
+				}
+			}, 'childNodes');
+
+			cell = cloneNode(cell, false);
+			setSpanVal(cell, 'rowSpan', 1);
+			setSpanVal(cell, 'colSpan', 1);
+
+			if (formatNode) {
+				cell.appendChild(formatNode);
+			} else {
+				if (!tinymce.isIE)
+					cell.innerHTML = '<br data-mce-bogus="1" />';
+			}
+
+			return cell;
+		};
+
+		function cleanup() {
+			var rng = dom.createRng();
+
+			// Empty rows
+			each(dom.select('tr', table), function(tr) {
+				if (tr.cells.length == 0)
+					dom.remove(tr);
+			});
+
+			// Empty table
+			if (dom.select('tr', table).length == 0) {
+				rng.setStartAfter(table);
+				rng.setEndAfter(table);
+				selection.setRng(rng);
+				dom.remove(table);
+				return;
+			}
+
+			// Empty header/body/footer
+			each(dom.select('thead,tbody,tfoot', table), function(part) {
+				if (part.rows.length == 0)
+					dom.remove(part);
+			});
+
+			// Restore selection to start position if it still exists
+			buildGrid();
+
+			// Restore the selection to the closest table position
+			row = grid[Math.min(grid.length - 1, startPos.y)];
+			if (row) {
+				selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);
+				selection.collapse(true);
+			}
+		};
+
+		function fillLeftDown(x, y, rows, cols) {
+			var tr, x2, r, c, cell;
+
+			tr = grid[y][x].elm.parentNode;
+			for (r = 1; r <= rows; r++) {
+				tr = dom.getNext(tr, 'tr');
+
+				if (tr) {
+					// Loop left to find real cell
+					for (x2 = x; x2 >= 0; x2--) {
+						cell = grid[y + r][x2].elm;
+
+						if (cell.parentNode == tr) {
+							// Append clones after
+							for (c = 1; c <= cols; c++)
+								dom.insertAfter(cloneCell(cell), cell);
+
+							break;
+						}
+					}
+
+					if (x2 == -1) {
+						// Insert nodes before first cell
+						for (c = 1; c <= cols; c++)
+							tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);
+					}
+				}
+			}
+		};
+
+		function split() {
+			each(grid, function(row, y) {
+				each(row, function(cell, x) {
+					var colSpan, rowSpan, newCell, i;
+
+					if (isCellSelected(cell)) {
+						cell = cell.elm;
+						colSpan = getSpanVal(cell, 'colspan');
+						rowSpan = getSpanVal(cell, 'rowspan');
+
+						if (colSpan > 1 || rowSpan > 1) {
+							setSpanVal(cell, 'rowSpan', 1);
+							setSpanVal(cell, 'colSpan', 1);
+
+							// Insert cells right
+							for (i = 0; i < colSpan - 1; i++)
+								dom.insertAfter(cloneCell(cell), cell);
+
+							fillLeftDown(x, y, rowSpan - 1, colSpan);
+						}
+					}
+				});
+			});
+		};
+
+		function merge(cell, cols, rows) {
+			var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count;
+
+			// Use specified cell and cols/rows
+			if (cell) {
+				pos = getPos(cell);
+				startX = pos.x;
+				startY = pos.y;
+				endX = startX + (cols - 1);
+				endY = startY + (rows - 1);
+			} else {
+				// Use selection
+				startX = startPos.x;
+				startY = startPos.y;
+				endX = endPos.x;
+				endY = endPos.y;
+			}
+
+			// Find start/end cells
+			startCell = getCell(startX, startY);
+			endCell = getCell(endX, endY);
+
+			// Check if the cells exists and if they are of the same part for example tbody = tbody
+			if (startCell && endCell && startCell.part == endCell.part) {
+				// Split and rebuild grid
+				split();
+				buildGrid();
+
+				// Set row/col span to start cell
+				startCell = getCell(startX, startY).elm;
+				setSpanVal(startCell, 'colSpan', (endX - startX) + 1);
+				setSpanVal(startCell, 'rowSpan', (endY - startY) + 1);
+
+				// Remove other cells and add it's contents to the start cell
+				for (y = startY; y <= endY; y++) {
+					for (x = startX; x <= endX; x++) {
+						if (!grid[y] || !grid[y][x])
+							continue;
+
+						cell = grid[y][x].elm;
+
+						if (cell != startCell) {
+							// Move children to startCell
+							children = tinymce.grep(cell.childNodes);
+							each(children, function(node) {
+								startCell.appendChild(node);
+							});
+
+							// Remove bogus nodes if there is children in the target cell
+							if (children.length) {
+								children = tinymce.grep(startCell.childNodes);
+								count = 0;
+								each(children, function(node) {
+									if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1)
+										startCell.removeChild(node);
+								});
+							}
+							
+							// Remove cell
+							dom.remove(cell);
+						}
+					}
+				}
+
+				// Remove empty rows etc and restore caret location
+				cleanup();
+			}
+		};
+
+		function insertRow(before) {
+			var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan;
+
+			// Find first/last row
+			each(grid, function(row, y) {
+				each(row, function(cell, x) {
+					if (isCellSelected(cell)) {
+						cell = cell.elm;
+						rowElm = cell.parentNode;
+						newRow = cloneNode(rowElm, false);
+						posY = y;
+
+						if (before)
+							return false;
+					}
+				});
+
+				if (before)
+					return !posY;
+			});
+
+			for (x = 0; x < grid[0].length; x++) {
+				// Cell not found could be because of an invalid table structure
+				if (!grid[posY][x])
+					continue;
+
+				cell = grid[posY][x].elm;
+
+				if (cell != lastCell) {
+					if (!before) {
+						rowSpan = getSpanVal(cell, 'rowspan');
+						if (rowSpan > 1) {
+							setSpanVal(cell, 'rowSpan', rowSpan + 1);
+							continue;
+						}
+					} else {
+						// Check if cell above can be expanded
+						if (posY > 0 && grid[posY - 1][x]) {
+							otherCell = grid[posY - 1][x].elm;
+							rowSpan = getSpanVal(otherCell, 'rowSpan');
+							if (rowSpan > 1) {
+								setSpanVal(otherCell, 'rowSpan', rowSpan + 1);
+								continue;
+							}
+						}
+					}
+
+					// Insert new cell into new row
+					newCell = cloneCell(cell);
+					setSpanVal(newCell, 'colSpan', cell.colSpan);
+
+					newRow.appendChild(newCell);
+
+					lastCell = cell;
+				}
+			}
+
+			if (newRow.hasChildNodes()) {
+				if (!before)
+					dom.insertAfter(newRow, rowElm);
+				else
+					rowElm.parentNode.insertBefore(newRow, rowElm);
+			}
+		};
+
+		function insertCol(before) {
+			var posX, lastCell;
+
+			// Find first/last column
+			each(grid, function(row, y) {
+				each(row, function(cell, x) {
+					if (isCellSelected(cell)) {
+						posX = x;
+
+						if (before)
+							return false;
+					}
+				});
+
+				if (before)
+					return !posX;
+			});
+
+			each(grid, function(row, y) {
+				var cell, rowSpan, colSpan;
+
+				if (!row[posX])
+					return;
+
+				cell = row[posX].elm;
+				if (cell != lastCell) {
+					colSpan = getSpanVal(cell, 'colspan');
+					rowSpan = getSpanVal(cell, 'rowspan');
+
+					if (colSpan == 1) {
+						if (!before) {
+							dom.insertAfter(cloneCell(cell), cell);
+							fillLeftDown(posX, y, rowSpan - 1, colSpan);
+						} else {
+							cell.parentNode.insertBefore(cloneCell(cell), cell);
+							fillLeftDown(posX, y, rowSpan - 1, colSpan);
+						}
+					} else
+						setSpanVal(cell, 'colSpan', cell.colSpan + 1);
+
+					lastCell = cell;
+				}
+			});
+		};
+
+		function deleteCols() {
+			var cols = [];
+
+			// Get selected column indexes
+			each(grid, function(row, y) {
+				each(row, function(cell, x) {
+					if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) {
+						each(grid, function(row) {
+							var cell = row[x].elm, colSpan;
+
+							colSpan = getSpanVal(cell, 'colSpan');
+
+							if (colSpan > 1)
+								setSpanVal(cell, 'colSpan', colSpan - 1);
+							else
+								dom.remove(cell);
+						});
+
+						cols.push(x);
+					}
+				});
+			});
+
+			cleanup();
+		};
+
+		function deleteRows() {
+			var rows;
+
+			function deleteRow(tr) {
+				var nextTr, pos, lastCell;
+
+				nextTr = dom.getNext(tr, 'tr');
+
+				// Move down row spanned cells
+				each(tr.cells, function(cell) {
+					var rowSpan = getSpanVal(cell, 'rowSpan');
+
+					if (rowSpan > 1) {
+						setSpanVal(cell, 'rowSpan', rowSpan - 1);
+						pos = getPos(cell);
+						fillLeftDown(pos.x, pos.y, 1, 1);
+					}
+				});
+
+				// Delete cells
+				pos = getPos(tr.cells[0]);
+				each(grid[pos.y], function(cell) {
+					var rowSpan;
+
+					cell = cell.elm;
+
+					if (cell != lastCell) {
+						rowSpan = getSpanVal(cell, 'rowSpan');
+
+						if (rowSpan <= 1)
+							dom.remove(cell);
+						else
+							setSpanVal(cell, 'rowSpan', rowSpan - 1);
+
+						lastCell = cell;
+					}
+				});
+			};
+
+			// Get selected rows and move selection out of scope
+			rows = getSelectedRows();
+
+			// Delete all selected rows
+			each(rows.reverse(), function(tr) {
+				deleteRow(tr);
+			});
+
+			cleanup();
+		};
+
+		function cutRows() {
+			var rows = getSelectedRows();
+
+			dom.remove(rows);
+			cleanup();
+
+			return rows;
+		};
+
+		function copyRows() {
+			var rows = getSelectedRows();
+
+			each(rows, function(row, i) {
+				rows[i] = cloneNode(row, true);
+			});
+
+			return rows;
+		};
+
+		function pasteRows(rows, before) {
+			var selectedRows = getSelectedRows(),
+				targetRow = selectedRows[before ? 0 : selectedRows.length - 1],
+				targetCellCount = targetRow.cells.length;
+
+			// Calc target cell count
+			each(grid, function(row) {
+				var match;
+
+				targetCellCount = 0;
+				each(row, function(cell, x) {
+					if (cell.real)
+						targetCellCount += cell.colspan;
+
+					if (cell.elm.parentNode == targetRow)
+						match = 1;
+				});
+
+				if (match)
+					return false;
+			});
+
+			if (!before)
+				rows.reverse();
+
+			each(rows, function(row) {
+				var cellCount = row.cells.length, cell;
+
+				// Remove col/rowspans
+				for (i = 0; i < cellCount; i++) {
+					cell = row.cells[i];
+					setSpanVal(cell, 'colSpan', 1);
+					setSpanVal(cell, 'rowSpan', 1);
+				}
+
+				// Needs more cells
+				for (i = cellCount; i < targetCellCount; i++)
+					row.appendChild(cloneCell(row.cells[cellCount - 1]));
+
+				// Needs less cells
+				for (i = targetCellCount; i < cellCount; i++)
+					dom.remove(row.cells[i]);
+
+				// Add before/after
+				if (before)
+					targetRow.parentNode.insertBefore(row, targetRow);
+				else
+					dom.insertAfter(row, targetRow);
+			});
+		};
+
+		function getPos(target) {
+			var pos;
+
+			each(grid, function(row, y) {
+				each(row, function(cell, x) {
+					if (cell.elm == target) {
+						pos = {x : x, y : y};
+						return false;
+					}
+				});
+
+				return !pos;
+			});
+
+			return pos;
+		};
+
+		function setStartCell(cell) {
+			startPos = getPos(cell);
+		};
+
+		function findEndPos() {
+			var pos, maxX, maxY;
+
+			maxX = maxY = 0;
+
+			each(grid, function(row, y) {
+				each(row, function(cell, x) {
+					var colSpan, rowSpan;
+
+					if (isCellSelected(cell)) {
+						cell = grid[y][x];
+
+						if (x > maxX)
+							maxX = x;
+
+						if (y > maxY)
+							maxY = y;
+
+						if (cell.real) {
+							colSpan = cell.colspan - 1;
+							rowSpan = cell.rowspan - 1;
+
+							if (colSpan) {
+								if (x + colSpan > maxX)
+									maxX = x + colSpan;
+							}
+
+							if (rowSpan) {
+								if (y + rowSpan > maxY)
+									maxY = y + rowSpan;
+							}
+						}
+					}
+				});
+			});
+
+			return {x : maxX, y : maxY};
+		};
+
+		function setEndCell(cell) {
+			var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan;
+
+			endPos = getPos(cell);
+
+			if (startPos && endPos) {
+				// Get start/end positions
+				startX = Math.min(startPos.x, endPos.x);
+				startY = Math.min(startPos.y, endPos.y);
+				endX = Math.max(startPos.x, endPos.x);
+				endY = Math.max(startPos.y, endPos.y);
+
+				// Expand end positon to include spans
+				maxX = endX;
+				maxY = endY;
+
+				// Expand startX
+				for (y = startY; y <= maxY; y++) {
+					cell = grid[y][startX];
+
+					if (!cell.real) {
+						if (startX - (cell.colspan - 1) < startX)
+							startX -= cell.colspan - 1;
+					}
+				}
+
+				// Expand startY
+				for (x = startX; x <= maxX; x++) {
+					cell = grid[startY][x];
+
+					if (!cell.real) {
+						if (startY - (cell.rowspan - 1) < startY)
+							startY -= cell.rowspan - 1;
+					}
+				}
+
+				// Find max X, Y
+				for (y = startY; y <= endY; y++) {
+					for (x = startX; x <= endX; x++) {
+						cell = grid[y][x];
+
+						if (cell.real) {
+							colSpan = cell.colspan - 1;
+							rowSpan = cell.rowspan - 1;
+
+							if (colSpan) {
+								if (x + colSpan > maxX)
+									maxX = x + colSpan;
+							}
+
+							if (rowSpan) {
+								if (y + rowSpan > maxY)
+									maxY = y + rowSpan;
+							}
+						}
+					}
+				}
+
+				// Remove current selection
+				dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
+
+				// Add new selection
+				for (y = startY; y <= maxY; y++) {
+					for (x = startX; x <= maxX; x++) {
+						if (grid[y][x])
+							dom.addClass(grid[y][x].elm, 'mceSelected');
+					}
+				}
+			}
+		};
+
+		// Expose to public
+		tinymce.extend(this, {
+			deleteTable : deleteTable,
+			split : split,
+			merge : merge,
+			insertRow : insertRow,
+			insertCol : insertCol,
+			deleteCols : deleteCols,
+			deleteRows : deleteRows,
+			cutRows : cutRows,
+			copyRows : copyRows,
+			pasteRows : pasteRows,
+			getPos : getPos,
+			setStartCell : setStartCell,
+			setEndCell : setEndCell
+		});
+	};
+
+	tinymce.create('tinymce.plugins.TablePlugin', {
+		init : function(ed, url) {
+			var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload
+
+			function createTableGrid(node) {
+				var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');
+
+				if (tblElm)
+					return new TableGrid(tblElm, ed.dom, selection);
+			};
+
+			function cleanup() {
+				// Restore selection possibilities
+				ed.getBody().style.webkitUserSelect = '';
+
+				if (hasCellSelection) {
+					ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
+					hasCellSelection = false;
+				}
+			};
+
+			// Register buttons
+			each([
+				['table', 'table.desc', 'mceInsertTable', true],
+				['delete_table', 'table.del', 'mceTableDelete'],
+				['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],
+				['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],
+				['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],
+				['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],
+				['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],
+				['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],
+				['row_props', 'table.row_desc', 'mceTableRowProps', true],
+				['cell_props', 'table.cell_desc', 'mceTableCellProps', true],
+				['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],
+				['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]
+			], function(c) {
+				ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});
+			});
+
+			// Select whole table is a table border is clicked
+			if (!tinymce.isIE) {
+				ed.onClick.add(function(ed, e) {
+					e = e.target;
+
+					if (e.nodeName === 'TABLE') {
+						ed.selection.select(e);
+						ed.nodeChanged();
+					}
+				});
+			}
+
+			ed.onPreProcess.add(function(ed, args) {
+				var nodes, i, node, dom = ed.dom, value;
+
+				nodes = dom.select('table', args.node);
+				i = nodes.length;
+				while (i--) {
+					node = nodes[i];
+					dom.setAttrib(node, 'data-mce-style', '');
+
+					if ((value = dom.getAttrib(node, 'width'))) {
+						dom.setStyle(node, 'width', value);
+						dom.setAttrib(node, 'width', '');
+					}
+
+					if ((value = dom.getAttrib(node, 'height'))) {
+						dom.setStyle(node, 'height', value);
+						dom.setAttrib(node, 'height', '');
+					}
+				}
+			});
+
+			// Handle node change updates
+			ed.onNodeChange.add(function(ed, cm, n) {
+				var p;
+
+				n = ed.selection.getStart();
+				p = ed.dom.getParent(n, 'td,th,caption');
+				cm.setActive('table', n.nodeName === 'TABLE' || !!p);
+
+				// Disable table tools if we are in caption
+				if (p && p.nodeName === 'CAPTION')
+					p = 0;
+
+				cm.setDisabled('delete_table', !p);
+				cm.setDisabled('delete_col', !p);
+				cm.setDisabled('delete_table', !p);
+				cm.setDisabled('delete_row', !p);
+				cm.setDisabled('col_after', !p);
+				cm.setDisabled('col_before', !p);
+				cm.setDisabled('row_after', !p);
+				cm.setDisabled('row_before', !p);
+				cm.setDisabled('row_props', !p);
+				cm.setDisabled('cell_props', !p);
+				cm.setDisabled('split_cells', !p);
+				cm.setDisabled('merge_cells', !p);
+			});
+
+			ed.onInit.add(function(ed) {
+				var startTable, startCell, dom = ed.dom, tableGrid;
+
+				winMan = ed.windowManager;
+
+				// Add cell selection logic
+				ed.onMouseDown.add(function(ed, e) {
+					if (e.button != 2) {
+						cleanup();
+
+						startCell = dom.getParent(e.target, 'td,th');
+						startTable = dom.getParent(startCell, 'table');
+					}
+				});
+
+				dom.bind(ed.getDoc(), 'mouseover', function(e) {
+					var sel, table, target = e.target;
+
+					if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {
+						table = dom.getParent(target, 'table');
+						if (table == startTable) {
+							if (!tableGrid) {
+								tableGrid = createTableGrid(table);
+								tableGrid.setStartCell(startCell);
+
+								ed.getBody().style.webkitUserSelect = 'none';
+							}
+
+							tableGrid.setEndCell(target);
+							hasCellSelection = true;
+						}
+
+						// Remove current selection
+						sel = ed.selection.getSel();
+
+						try {
+							if (sel.removeAllRanges)
+								sel.removeAllRanges();
+							else
+								sel.empty();
+						} catch (ex) {
+							// IE9 might throw errors here
+						}
+
+						e.preventDefault();
+					}
+				});
+
+				ed.onMouseUp.add(function(ed, e) {
+					var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode;
+
+					// Move selection to startCell
+					if (startCell) {
+						if (tableGrid)
+							ed.getBody().style.webkitUserSelect = '';
+
+						function setPoint(node, start) {
+							var walker = new tinymce.dom.TreeWalker(node, node);
+
+							do {
+								// Text node
+								if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {
+									if (start)
+										rng.setStart(node, 0);
+									else
+										rng.setEnd(node, node.nodeValue.length);
+
+									return;
+								}
+
+								// BR element
+								if (node.nodeName == 'BR') {
+									if (start)
+										rng.setStartBefore(node);
+									else
+										rng.setEndBefore(node);
+
+									return;
+								}
+							} while (node = (start ? walker.next() : walker.prev()));
+						}
+
+						// Try to expand text selection as much as we can only Gecko supports cell selection
+						selectedCells = dom.select('td.mceSelected,th.mceSelected');
+						if (selectedCells.length > 0) {
+							rng = dom.createRng();
+							node = selectedCells[0];
+							endNode = selectedCells[selectedCells.length - 1];
+							rng.setStartBefore(node);
+							rng.setEndAfter(node);
+
+							setPoint(node, 1);
+							walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));
+
+							do {
+								if (node.nodeName == 'TD' || node.nodeName == 'TH') {
+									if (!dom.hasClass(node, 'mceSelected'))
+										break;
+
+									lastNode = node;
+								}
+							} while (node = walker.next());
+
+							setPoint(lastNode);
+
+							sel.setRng(rng);
+						}
+
+						ed.nodeChanged();
+						startCell = tableGrid = startTable = null;
+					}
+				});
+
+				ed.onKeyUp.add(function(ed, e) {
+					cleanup();
+				});
+
+				ed.onKeyDown.add(function (ed, e) {
+					fixTableCellSelection(ed);
+				});
+
+				ed.onMouseDown.add(function (ed, e) {
+					if (e.button != 2) {
+						fixTableCellSelection(ed);
+					}
+				});
+				function tableCellSelected(ed, rng, n, currentCell) {
+					// The decision of when a table cell is selected is somewhat involved.  The fact that this code is
+					// required is actually a pointer to the root cause of this bug. A cell is selected when the start 
+					// and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases)
+					// or the parent of the table (in the case of the selection containing the last cell of a table).
+					var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), 
+					tableParent, allOfCellSelected, tableCellSelection;
+					if (table) 
+					tableParent = table.parentNode;
+					allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE && 
+						rng.startOffset == 0 && 
+						rng.endOffset == 0 && 
+						currentCell && 
+						(n.nodeName=="TR" || n==tableParent);
+					tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell;	   
+					return  allOfCellSelected || tableCellSelection;
+					// return false;
+				}
+				
+				// this nasty hack is here to work around some WebKit selection bugs.
+				function fixTableCellSelection(ed) {
+					if (!tinymce.isWebKit)
+						return;
+
+					var rng = ed.selection.getRng();
+					var n = ed.selection.getNode();
+					var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH');
+				
+					if (!tableCellSelected(ed, rng, n, currentCell))
+						return;
+						if (!currentCell) {
+							currentCell=n;
+						}
+					
+					// Get the very last node inside the table cell
+					var end = currentCell.lastChild;
+					while (end.lastChild)
+						end = end.lastChild;
+					
+					// Select the entire table cell. Nothing outside of the table cell should be selected.
+					rng.setEnd(end, end.nodeValue.length);
+					ed.selection.setRng(rng);
+				}
+				ed.plugins.table.fixTableCellSelection=fixTableCellSelection;
+
+				// Add context menu
+				if (ed && ed.plugins.contextmenu) {
+					ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
+						var sm, se = ed.selection, el = se.getNode() || ed.getBody();
+
+						if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) {
+							m.removeAll();
+
+							if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {
+								m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
+								m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
+								m.addSeparator();
+							}
+
+							if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {
+								m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
+								m.addSeparator();
+							}
+
+							m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}});
+							m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'});
+							m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'});
+							m.addSeparator();
+
+							// Cell menu
+							sm = m.addMenu({title : 'table.cell'});
+							sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'});
+							sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'});
+							sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'});
+
+							// Row menu
+							sm = m.addMenu({title : 'table.row'});
+							sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'});
+							sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});
+							sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});
+							sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});
+							sm.addSeparator();
+							sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});
+							sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});
+							sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows);
+							sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows);
+
+							// Column menu
+							sm = m.addMenu({title : 'table.col'});
+							sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});
+							sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});
+							sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});
+						} else
+							m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'});
+					});
+				}
+
+				// Fix to allow navigating up and down in a table in WebKit browsers.
+				if (tinymce.isWebKit) {
+					function moveSelection(ed, e) {
+						var VK = tinymce.VK;
+						var key = e.keyCode;
+
+						function handle(upBool, sourceNode, event) {
+							var siblingDirection = upBool ? 'previousSibling' : 'nextSibling';
+							var currentRow = ed.dom.getParent(sourceNode, 'tr');
+							var siblingRow = currentRow[siblingDirection];
+
+							if (siblingRow) {
+								moveCursorToRow(ed, sourceNode, siblingRow, upBool);
+								tinymce.dom.Event.cancel(event);
+								return true;
+							} else {
+								var tableNode = ed.dom.getParent(currentRow, 'table');
+								var middleNode = currentRow.parentNode;
+								var parentNodeName = middleNode.nodeName.toLowerCase();
+								if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) {
+									var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody');
+									if (targetParent !== null) {
+										return moveToRowInTarget(upBool, targetParent, sourceNode, event);
+									}
+								}
+								return escapeTable(upBool, currentRow, siblingDirection, tableNode, event);
+							}
+						}
+
+						function getTargetParent(upBool, topNode, secondNode, nodeName) {
+							var tbodies = ed.dom.select('>' + nodeName, topNode);
+							var position = tbodies.indexOf(secondNode);
+							if (upBool && position === 0 || !upBool && position === tbodies.length - 1) {
+								return getFirstHeadOrFoot(upBool, topNode);
+							} else if (position === -1) {
+								var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1;
+								return tbodies[topOrBottom];
+							} else {
+								return tbodies[position + (upBool ? -1 : 1)];
+							}
+						}
+
+						function getFirstHeadOrFoot(upBool, parent) {
+							var tagName = upBool ? 'thead' : 'tfoot';
+							var headOrFoot = ed.dom.select('>' + tagName, parent);
+							return headOrFoot.length !== 0 ? headOrFoot[0] : null;
+						}
+
+						function moveToRowInTarget(upBool, targetParent, sourceNode, event) {
+							var targetRow = getChildForDirection(targetParent, upBool);
+							targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool);
+							tinymce.dom.Event.cancel(event);
+							return true;
+						}
+
+						function escapeTable(upBool, currentRow, siblingDirection, table, event) {
+							var tableSibling = table[siblingDirection];
+							if (tableSibling) {
+								moveCursorToStartOfElement(tableSibling);
+								return true;
+							} else {
+								var parentCell = ed.dom.getParent(table, 'td,th');
+								if (parentCell) {
+									return handle(upBool, parentCell, event);
+								} else {
+									var backUpSibling = getChildForDirection(currentRow, !upBool);
+									moveCursorToStartOfElement(backUpSibling);
+									return tinymce.dom.Event.cancel(event);
+								}
+							}
+						}
+
+						function getChildForDirection(parent, up) {
+							return parent && parent[up ? 'lastChild' : 'firstChild'];
+						}
+
+						function moveCursorToStartOfElement(n) {
+							ed.selection.setCursorLocation(n, 0);
+						}
+
+						function isVerticalMovement() {
+							return key == VK.UP || key == VK.DOWN;
+						}
+
+						function isInTable(ed) {
+							var node = ed.selection.getNode();
+							var currentRow = ed.dom.getParent(node, 'tr');
+							return currentRow !== null;
+						}
+
+						function columnIndex(column) {
+							var colIndex = 0;
+							var c = column;
+							while (c.previousSibling) {
+								c = c.previousSibling;
+								colIndex = colIndex + getSpanVal(c, "colspan");
+							}
+							return colIndex;
+						}
+
+						function findColumn(rowElement, columnIndex) {
+							var c = 0;
+							var r = 0;
+							each(rowElement.children, function(cell, i) {
+								c = c + getSpanVal(cell, "colspan");
+								r = i;
+								if (c > columnIndex)
+									return false;
+							});
+							return r;
+						}
+
+						function moveCursorToRow(ed, node, row, upBool) {
+							var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th'));
+							var tgtColumnIndex = findColumn(row, srcColumnIndex);
+							var tgtNode = row.childNodes[tgtColumnIndex];
+							var rowCellTarget = getChildForDirection(tgtNode, upBool);
+							moveCursorToStartOfElement(rowCellTarget || tgtNode);
+						}
+
+						function shouldFixCaret(preBrowserNode) {
+							var newNode = ed.selection.getNode();
+							var newParent = ed.dom.getParent(newNode, 'td,th');
+							var oldParent = ed.dom.getParent(preBrowserNode, 'td,th');
+							return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent)
+						}
+
+						function checkSameParentTable(nodeOne, NodeTwo) {
+							return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE');
+						}
+
+						if (isVerticalMovement() && isInTable(ed)) {
+							var preBrowserNode = ed.selection.getNode();
+							setTimeout(function() {
+								if (shouldFixCaret(preBrowserNode)) {
+									handle(!e.shiftKey && key === VK.UP, preBrowserNode, e);
+								}
+							}, 0);
+						}
+					}
+
+					ed.onKeyDown.add(moveSelection);
+				}
+								
+				// Fixes an issue on Gecko where it's impossible to place the caret behind a table
+				// This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
+				if (!tinymce.isIE) {
+					function fixTableCaretPos() {
+						var last;
+
+						// Skip empty text nodes form the end
+						for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ;
+
+						if (last && last.nodeName == 'TABLE')
+							ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');
+					};
+
+					// Fixes an bug where it's impossible to place the caret before a table in Gecko
+					// this fix solves it by detecting when the caret is at the beginning of such a table
+					// and then manually moves the caret infront of the table
+					if (tinymce.isGecko) {
+						ed.onKeyDown.add(function(ed, e) {
+							var rng, table, dom = ed.dom;
+
+							// On gecko it's not possible to place the caret before a table
+							if (e.keyCode == 37 || e.keyCode == 38) {
+								rng = ed.selection.getRng();
+								table = dom.getParent(rng.startContainer, 'table');
+
+								if (table && ed.getBody().firstChild == table) {
+									if (isAtStart(rng, table)) {
+										rng = dom.createRng();
+
+										rng.setStartBefore(table);
+										rng.setEndBefore(table);
+
+										ed.selection.setRng(rng);
+
+										e.preventDefault();
+									}
+								}
+							}
+						});
+					}
+
+					ed.onKeyUp.add(fixTableCaretPos);
+					ed.onSetContent.add(fixTableCaretPos);
+					ed.onVisualAid.add(fixTableCaretPos);
+
+					ed.onPreProcess.add(function(ed, o) {
+						var last = o.node.lastChild;
+
+						if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')
+							ed.dom.remove(last);
+					});
+
+					fixTableCaretPos();
+					ed.startContent = ed.getContent({format : 'raw'});
+				}
+			});
+
+			// Register action commands
+			each({
+				mceTableSplitCells : function(grid) {
+					grid.split();
+				},
+
+				mceTableMergeCells : function(grid) {
+					var rowSpan, colSpan, cell;
+
+					cell = ed.dom.getParent(ed.selection.getNode(), 'th,td');
+					if (cell) {
+						rowSpan = cell.rowSpan;
+						colSpan = cell.colSpan;
+					}
+
+					if (!ed.dom.select('td.mceSelected,th.mceSelected').length) {
+						winMan.open({
+							url : url + '/merge_cells.htm',
+							width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)),
+							height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)),
+							inline : 1
+						}, {
+							rows : rowSpan,
+							cols : colSpan,
+							onaction : function(data) {
+								grid.merge(cell, data.cols, data.rows);
+							},
+							plugin_url : url
+						});
+					} else
+						grid.merge();
+				},
+
+				mceTableInsertRowBefore : function(grid) {
+					grid.insertRow(true);
+				},
+
+				mceTableInsertRowAfter : function(grid) {
+					grid.insertRow();
+				},
+
+				mceTableInsertColBefore : function(grid) {
+					grid.insertCol(true);
+				},
+
+				mceTableInsertColAfter : function(grid) {
+					grid.insertCol();
+				},
+
+				mceTableDeleteCol : function(grid) {
+					grid.deleteCols();
+				},
+
+				mceTableDeleteRow : function(grid) {
+					grid.deleteRows();
+				},
+
+				mceTableCutRow : function(grid) {
+					clipboardRows = grid.cutRows();
+				},
+
+				mceTableCopyRow : function(grid) {
+					clipboardRows = grid.copyRows();
+				},
+
+				mceTablePasteRowBefore : function(grid) {
+					grid.pasteRows(clipboardRows, true);
+				},
+
+				mceTablePasteRowAfter : function(grid) {
+					grid.pasteRows(clipboardRows);
+				},
+
+				mceTableDelete : function(grid) {
+					grid.deleteTable();
+				}
+			}, function(func, name) {
+				ed.addCommand(name, function() {
+					var grid = createTableGrid();
+
+					if (grid) {
+						func(grid);
+						ed.execCommand('mceRepaint');
+						cleanup();
+					}
+				});
+			});
+
+			// Register dialog commands
+			each({
+				mceInsertTable : function(val) {
+					winMan.open({
+						url : url + '/table.htm',
+						width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)),
+						height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)),
+						inline : 1
+					}, {
+						plugin_url : url,
+						action : val ? val.action : 0
+					});
+				},
+
+				mceTableRowProps : function() {
+					winMan.open({
+						url : url + '/row.htm',
+						width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)),
+						height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)),
+						inline : 1
+					}, {
+						plugin_url : url
+					});
+				},
+
+				mceTableCellProps : function() {
+					winMan.open({
+						url : url + '/cell.htm',
+						width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)),
+						height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)),
+						inline : 1
+					}, {
+						plugin_url : url
+					});
+				}
+			}, function(func, name) {
+				ed.addCommand(name, function(ui, val) {
+					func(val);
+				});
+			});
+		}
+	});
+
+	// Register plugin
+	tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);
+})(tinymce);
+

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/js/cell.js
@@ -1,1 +1,320 @@
+tinyMCEPopup.requireLangPack();

+

+var ed;

+

+function init() {

+	ed = tinyMCEPopup.editor;

+	tinyMCEPopup.resizeToInnerSize();

+

+	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

+	document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');

+	document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')

+

+	var inst = ed;

+	var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");

+	var formObj = document.forms[0];

+	var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));

+

+	// Get table cell data

+	var celltype = tdElm.nodeName.toLowerCase();

+	var align = ed.dom.getAttrib(tdElm, 'align');

+	var valign = ed.dom.getAttrib(tdElm, 'valign');

+	var width = trimSize(getStyle(tdElm, 'width', 'width'));

+	var height = trimSize(getStyle(tdElm, 'height', 'height'));

+	var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));

+	var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));

+	var className = ed.dom.getAttrib(tdElm, 'class');

+	var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

+	var id = ed.dom.getAttrib(tdElm, 'id');

+	var lang = ed.dom.getAttrib(tdElm, 'lang');

+	var dir = ed.dom.getAttrib(tdElm, 'dir');

+	var scope = ed.dom.getAttrib(tdElm, 'scope');

+

+	// Setup form

+	addClassesToList('class', 'table_cell_styles');

+	TinyMCE_EditableSelects.init();

+

+	if (!ed.dom.hasClass(tdElm, 'mceSelected')) {

+		formObj.bordercolor.value = bordercolor;

+		formObj.bgcolor.value = bgcolor;

+		formObj.backgroundimage.value = backgroundimage;

+		formObj.width.value = width;

+		formObj.height.value = height;

+		formObj.id.value = id;

+		formObj.lang.value = lang;

+		formObj.style.value = ed.dom.serializeStyle(st);

+		selectByValue(formObj, 'align', align);

+		selectByValue(formObj, 'valign', valign);

+		selectByValue(formObj, 'class', className, true, true);

+		selectByValue(formObj, 'celltype', celltype);

+		selectByValue(formObj, 'dir', dir);

+		selectByValue(formObj, 'scope', scope);

+

+		// Resize some elements

+		if (isVisible('backgroundimagebrowser'))

+			document.getElementById('backgroundimage').style.width = '180px';

+

+		updateColor('bordercolor_pick', 'bordercolor');

+		updateColor('bgcolor_pick', 'bgcolor');

+	} else

+		tinyMCEPopup.dom.hide('action');

+}

+

+function updateAction() {

+	var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];

+

+	if (!AutoValidator.validate(formObj)) {

+		tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');

+		return false;

+	}

+

+	tinyMCEPopup.restoreSelection();

+	el = ed.selection.getStart();

+	tdElm = ed.dom.getParent(el, "td,th");

+	trElm = ed.dom.getParent(el, "tr");

+	tableElm = ed.dom.getParent(el, "table");

+

+	// Cell is selected

+	if (ed.dom.hasClass(tdElm, 'mceSelected')) {

+		// Update all selected sells

+		tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {

+			updateCell(td);

+		});

+

+		ed.addVisual();

+		ed.nodeChanged();

+		inst.execCommand('mceEndUndoLevel');

+		tinyMCEPopup.close();

+		return;

+	}

+

+	switch (getSelectValue(formObj, 'action')) {

+		case "cell":

+			var celltype = getSelectValue(formObj, 'celltype');

+			var scope = getSelectValue(formObj, 'scope');

+

+			function doUpdate(s) {

+				if (s) {

+					updateCell(tdElm);

+

+					ed.addVisual();

+					ed.nodeChanged();

+					inst.execCommand('mceEndUndoLevel');

+					tinyMCEPopup.close();

+				}

+			};

+

+			if (ed.getParam("accessibility_warnings", 1)) {

+				if (celltype == "th" && scope == "")

+					tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);

+				else

+					doUpdate(1);

+

+				return;

+			}

+

+			updateCell(tdElm);

+			break;

+

+		case "row":

+			var cell = trElm.firstChild;

+

+			if (cell.nodeName != "TD" && cell.nodeName != "TH")

+				cell = nextCell(cell);

+

+			do {

+				cell = updateCell(cell, true);

+			} while ((cell = nextCell(cell)) != null);

+

+			break;

+

+		case "col":

+			var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr");

+

+			if (cell.nodeName != "TD" && cell.nodeName != "TH")

+				cell = nextCell(cell);

+

+			do {

+				if (cell == tdElm)

+					break;

+				col += cell.getAttribute("colspan");

+			} while ((cell = nextCell(cell)) != null);

+

+			for (var i=0; i<rows.length; i++) {

+				cell = rows[i].firstChild;

+

+				if (cell.nodeName != "TD" && cell.nodeName != "TH")

+					cell = nextCell(cell);

+

+				curr = 0;

+				do {

+					if (curr == col) {

+						cell = updateCell(cell, true);

+						break;

+					}

+					curr += cell.getAttribute("colspan");

+				} while ((cell = nextCell(cell)) != null);

+			}

+

+			break;

+

+		case "all":

+			var rows = tableElm.getElementsByTagName("tr");

+

+			for (var i=0; i<rows.length; i++) {

+				var cell = rows[i].firstChild;

+

+				if (cell.nodeName != "TD" && cell.nodeName != "TH")

+					cell = nextCell(cell);

+

+				do {

+					cell = updateCell(cell, true);

+				} while ((cell = nextCell(cell)) != null);

+			}

+

+			break;

+	}

+

+	ed.addVisual();

+	ed.nodeChanged();

+	inst.execCommand('mceEndUndoLevel');

+	tinyMCEPopup.close();

+}

+

+function nextCell(elm) {

+	while ((elm = elm.nextSibling) != null) {

+		if (elm.nodeName == "TD" || elm.nodeName == "TH")

+			return elm;

+	}

+

+	return null;

+}

+

+function updateCell(td, skip_id) {

+	var inst = ed;

+	var formObj = document.forms[0];

+	var curCellType = td.nodeName.toLowerCase();

+	var celltype = getSelectValue(formObj, 'celltype');

+	var doc = inst.getDoc();

+	var dom = ed.dom;

+

+	if (!skip_id)

+		dom.setAttrib(td, 'id', formObj.id.value);

+

+	dom.setAttrib(td, 'align', formObj.align.value);

+	dom.setAttrib(td, 'vAlign', formObj.valign.value);

+	dom.setAttrib(td, 'lang', formObj.lang.value);

+	dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir'));

+	dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));

+	dom.setAttrib(td, 'scope', formObj.scope.value);

+	dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));

+

+	// Clear deprecated attributes

+	ed.dom.setAttrib(td, 'width', '');

+	ed.dom.setAttrib(td, 'height', '');

+	ed.dom.setAttrib(td, 'bgColor', '');

+	ed.dom.setAttrib(td, 'borderColor', '');

+	ed.dom.setAttrib(td, 'background', '');

+

+	// Set styles

+	td.style.width = getCSSSize(formObj.width.value);

+	td.style.height = getCSSSize(formObj.height.value);

+	if (formObj.bordercolor.value != "") {

+		td.style.borderColor = formObj.bordercolor.value;

+		td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;

+		td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;

+	} else

+		td.style.borderColor = '';

+

+	td.style.backgroundColor = formObj.bgcolor.value;

+

+	if (formObj.backgroundimage.value != "")

+		td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";

+	else

+		td.style.backgroundImage = '';

+

+	if (curCellType != celltype) {

+		// changing to a different node type

+		var newCell = doc.createElement(celltype);

+

+		for (var c=0; c<td.childNodes.length; c++)

+			newCell.appendChild(td.childNodes[c].cloneNode(1));

+

+		for (var a=0; a<td.attributes.length; a++)

+			ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));

+

+		td.parentNode.replaceChild(newCell, td);

+		td = newCell;

+	}

+

+	dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));

+

+	return td;

+}

+

+function changedBackgroundImage() {

+	var formObj = document.forms[0];

+	var st = ed.dom.parseStyle(formObj.style.value);

+

+	st['background-image'] = "url('" + formObj.backgroundimage.value + "')";

+

+	formObj.style.value = ed.dom.serializeStyle(st);

+}

+

+function changedSize() {

+	var formObj = document.forms[0];

+	var st = ed.dom.parseStyle(formObj.style.value);

+

+	var width = formObj.width.value;

+	if (width != "")

+		st['width'] = getCSSSize(width);

+	else

+		st['width'] = "";

+

+	var height = formObj.height.value;

+	if (height != "")

+		st['height'] = getCSSSize(height);

+	else

+		st['height'] = "";

+

+	formObj.style.value = ed.dom.serializeStyle(st);

+}

+

+function changedColor() {

+	var formObj = document.forms[0];

+	var st = ed.dom.parseStyle(formObj.style.value);

+

+	st['background-color'] = formObj.bgcolor.value;

+	st['border-color'] = formObj.bordercolor.value;

+

+	formObj.style.value = ed.dom.serializeStyle(st);

+}

+

+function changedStyle() {

+	var formObj = document.forms[0];

+	var st = ed.dom.parseStyle(formObj.style.value);

+

+	if (st['background-image'])

+		formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");

+	else

+		formObj.backgroundimage.value = '';

+

+	if (st['width'])

+		formObj.width.value = trimSize(st['width']);

+

+	if (st['height'])

+		formObj.height.value = trimSize(st['height']);

+

+	if (st['background-color']) {

+		formObj.bgcolor.value = st['background-color'];

+		updateColor('bgcolor_pick','bgcolor');

+	}

+

+	if (st['border-color']) {

+		formObj.bordercolor.value = st['border-color'];

+		updateColor('bordercolor_pick','bordercolor');

+	}

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/js/merge_cells.js
@@ -1,1 +1,28 @@
+tinyMCEPopup.requireLangPack();

+

+var MergeCellsDialog = {

+	init : function() {

+		var f = document.forms[0];

+

+		f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);

+		f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);

+	},

+

+	merge : function() {

+		var func, f = document.forms[0];

+

+		tinyMCEPopup.restoreSelection();

+

+		func = tinyMCEPopup.getWindowArg('onaction');

+

+		func({

+			cols : f.numcols.value,

+			rows : f.numrows.value

+		});

+

+		tinyMCEPopup.close();

+	}

+};

+

+tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/js/row.js
@@ -1,1 +1,238 @@
+tinyMCEPopup.requireLangPack();

+

+function init() {

+	tinyMCEPopup.resizeToInnerSize();

+

+	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

+	document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

+

+	var inst = tinyMCEPopup.editor;

+	var dom = inst.dom;

+	var trElm = dom.getParent(inst.selection.getStart(), "tr");

+	var formObj = document.forms[0];

+	var st = dom.parseStyle(dom.getAttrib(trElm, "style"));

+

+	// Get table row data

+	var rowtype = trElm.parentNode.nodeName.toLowerCase();

+	var align = dom.getAttrib(trElm, 'align');

+	var valign = dom.getAttrib(trElm, 'valign');

+	var height = trimSize(getStyle(trElm, 'height', 'height'));

+	var className = dom.getAttrib(trElm, 'class');

+	var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));

+	var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

+	var id = dom.getAttrib(trElm, 'id');

+	var lang = dom.getAttrib(trElm, 'lang');

+	var dir = dom.getAttrib(trElm, 'dir');

+

+	selectByValue(formObj, 'rowtype', rowtype);

+

+	// Any cells selected

+	if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {

+		// Setup form

+		addClassesToList('class', 'table_row_styles');

+		TinyMCE_EditableSelects.init();

+

+		formObj.bgcolor.value = bgcolor;

+		formObj.backgroundimage.value = backgroundimage;

+		formObj.height.value = height;

+		formObj.id.value = id;

+		formObj.lang.value = lang;

+		formObj.style.value = dom.serializeStyle(st);

+		selectByValue(formObj, 'align', align);

+		selectByValue(formObj, 'valign', valign);

+		selectByValue(formObj, 'class', className, true, true);

+		selectByValue(formObj, 'dir', dir);

+

+		// Resize some elements

+		if (isVisible('backgroundimagebrowser'))

+			document.getElementById('backgroundimage').style.width = '180px';

+

+		updateColor('bgcolor_pick', 'bgcolor');

+	} else

+		tinyMCEPopup.dom.hide('action');

+}

+

+function updateAction() {

+	var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];

+	var action = getSelectValue(formObj, 'action');

+

+	if (!AutoValidator.validate(formObj)) {

+		tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');

+		return false;

+	}

+

+	tinyMCEPopup.restoreSelection();

+	trElm = dom.getParent(inst.selection.getStart(), "tr");

+	tableElm = dom.getParent(inst.selection.getStart(), "table");

+

+	// Update all selected rows

+	if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {

+		tinymce.each(tableElm.rows, function(tr) {

+			var i;

+

+			for (i = 0; i < tr.cells.length; i++) {

+				if (dom.hasClass(tr.cells[i], 'mceSelected')) {

+					updateRow(tr, true);

+					return;

+				}

+			}

+		});

+

+		inst.addVisual();

+		inst.nodeChanged();

+		inst.execCommand('mceEndUndoLevel');

+		tinyMCEPopup.close();

+		return;

+	}

+

+	switch (action) {

+		case "row":

+			updateRow(trElm);

+			break;

+

+		case "all":

+			var rows = tableElm.getElementsByTagName("tr");

+

+			for (var i=0; i<rows.length; i++)

+				updateRow(rows[i], true);

+

+			break;

+

+		case "odd":

+		case "even":

+			var rows = tableElm.getElementsByTagName("tr");

+

+			for (var i=0; i<rows.length; i++) {

+				if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))

+					updateRow(rows[i], true, true);

+			}

+

+			break;

+	}

+

+	inst.addVisual();

+	inst.nodeChanged();

+	inst.execCommand('mceEndUndoLevel');

+	tinyMCEPopup.close();

+}

+

+function updateRow(tr_elm, skip_id, skip_parent) {

+	var inst = tinyMCEPopup.editor;

+	var formObj = document.forms[0];

+	var dom = inst.dom;

+	var curRowType = tr_elm.parentNode.nodeName.toLowerCase();

+	var rowtype = getSelectValue(formObj, 'rowtype');

+	var doc = inst.getDoc();

+

+	// Update row element

+	if (!skip_id)

+		dom.setAttrib(tr_elm, 'id', formObj.id.value);

+

+	dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));

+	dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));

+	dom.setAttrib(tr_elm, 'lang', formObj.lang.value);

+	dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));

+	dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));

+	dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));

+

+	// Clear deprecated attributes

+	dom.setAttrib(tr_elm, 'background', '');

+	dom.setAttrib(tr_elm, 'bgColor', '');

+	dom.setAttrib(tr_elm, 'height', '');

+

+	// Set styles

+	tr_elm.style.height = getCSSSize(formObj.height.value);

+	tr_elm.style.backgroundColor = formObj.bgcolor.value;

+

+	if (formObj.backgroundimage.value != "")

+		tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";

+	else

+		tr_elm.style.backgroundImage = '';

+

+	// Setup new rowtype

+	if (curRowType != rowtype && !skip_parent) {

+		// first, clone the node we are working on

+		var newRow = tr_elm.cloneNode(1);

+

+		// next, find the parent of its new destination (creating it if necessary)

+		var theTable = dom.getParent(tr_elm, "table");

+		var dest = rowtype;

+		var newParent = null;

+		for (var i = 0; i < theTable.childNodes.length; i++) {

+			if (theTable.childNodes[i].nodeName.toLowerCase() == dest)

+				newParent = theTable.childNodes[i];

+		}

+

+		if (newParent == null) {

+			newParent = doc.createElement(dest);

+

+			if (theTable.firstChild.nodeName == 'CAPTION')

+				inst.dom.insertAfter(newParent, theTable.firstChild);

+			else

+				theTable.insertBefore(newParent, theTable.firstChild);

+		}

+

+		// append the row to the new parent

+		newParent.appendChild(newRow);

+

+		// remove the original

+		tr_elm.parentNode.removeChild(tr_elm);

+

+		// set tr_elm to the new node

+		tr_elm = newRow;

+	}

+

+	dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));

+}

+

+function changedBackgroundImage() {

+	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

+	var st = dom.parseStyle(formObj.style.value);

+

+	st['background-image'] = "url('" + formObj.backgroundimage.value + "')";

+

+	formObj.style.value = dom.serializeStyle(st);

+}

+

+function changedStyle() {

+	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

+	var st = dom.parseStyle(formObj.style.value);

+

+	if (st['background-image'])

+		formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");

+	else

+		formObj.backgroundimage.value = '';

+

+	if (st['height'])

+		formObj.height.value = trimSize(st['height']);

+

+	if (st['background-color']) {

+		formObj.bgcolor.value = st['background-color'];

+		updateColor('bgcolor_pick','bgcolor');

+	}

+}

+

+function changedSize() {

+	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

+	var st = dom.parseStyle(formObj.style.value);

+

+	var height = formObj.height.value;

+	if (height != "")

+		st['height'] = getCSSSize(height);

+	else

+		st['height'] = "";

+

+	formObj.style.value = dom.serializeStyle(st);

+}

+

+function changedColor() {

+	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

+	var st = dom.parseStyle(formObj.style.value);

+

+	st['background-color'] = formObj.bgcolor.value;

+

+	formObj.style.value = dom.serializeStyle(st);

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/js/table.js
@@ -1,1 +1,489 @@
+tinyMCEPopup.requireLangPack();

+

+var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;

+

+function insertTable() {

+	var formObj = document.forms[0];

+	var inst = tinyMCEPopup.editor, dom = inst.dom;

+	var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;

+	var html = '', capEl, elm;

+	var cellLimit, rowLimit, colLimit;

+

+	tinyMCEPopup.restoreSelection();

+

+	if (!AutoValidator.validate(formObj)) {

+		tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');

+		return false;

+	}

+

+	elm = dom.getParent(inst.selection.getNode(), 'table');

+

+	// Get form data

+	cols = formObj.elements['cols'].value;

+	rows = formObj.elements['rows'].value;

+	border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;

+	cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";

+	cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";

+	align = getSelectValue(formObj, "align");

+	frame = getSelectValue(formObj, "tframe");

+	rules = getSelectValue(formObj, "rules");

+	width = formObj.elements['width'].value;

+	height = formObj.elements['height'].value;

+	bordercolor = formObj.elements['bordercolor'].value;

+	bgcolor = formObj.elements['bgcolor'].value;

+	className = getSelectValue(formObj, "class");

+	id = formObj.elements['id'].value;

+	summary = formObj.elements['summary'].value;

+	style = formObj.elements['style'].value;

+	dir = formObj.elements['dir'].value;

+	lang = formObj.elements['lang'].value;

+	background = formObj.elements['backgroundimage'].value;

+	caption = formObj.elements['caption'].checked;

+

+	cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);

+	rowLimit = tinyMCEPopup.getParam('table_row_limit', false);

+	colLimit = tinyMCEPopup.getParam('table_col_limit', false);

+

+	// Validate table size

+	if (colLimit && cols > colLimit) {

+		tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));

+		return false;

+	} else if (rowLimit && rows > rowLimit) {

+		tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));

+		return false;

+	} else if (cellLimit && cols * rows > cellLimit) {

+		tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));

+		return false;

+	}

+

+	// Update table

+	if (action == "update") {

+		dom.setAttrib(elm, 'cellPadding', cellpadding, true);

+		dom.setAttrib(elm, 'cellSpacing', cellspacing, true);

+

+		if (!isCssSize(border)) {

+			dom.setAttrib(elm, 'border', border);

+		} else {

+			dom.setAttrib(elm, 'border', '');

+		}

+

+		if (border == '') {

+			dom.setStyle(elm, 'border-width', '');

+			dom.setStyle(elm, 'border', '');

+			dom.setAttrib(elm, 'border', '');

+		}

+

+		dom.setAttrib(elm, 'align', align);

+		dom.setAttrib(elm, 'frame', frame);

+		dom.setAttrib(elm, 'rules', rules);

+		dom.setAttrib(elm, 'class', className);

+		dom.setAttrib(elm, 'style', style);

+		dom.setAttrib(elm, 'id', id);

+		dom.setAttrib(elm, 'summary', summary);

+		dom.setAttrib(elm, 'dir', dir);

+		dom.setAttrib(elm, 'lang', lang);

+

+		capEl = inst.dom.select('caption', elm)[0];

+

+		if (capEl && !caption)

+			capEl.parentNode.removeChild(capEl);

+

+		if (!capEl && caption) {

+			capEl = elm.ownerDocument.createElement('caption');

+

+			if (!tinymce.isIE)

+				capEl.innerHTML = '<br data-mce-bogus="1"/>';

+

+			elm.insertBefore(capEl, elm.firstChild);

+		}

+

+		if (width && inst.settings.inline_styles) {

+			dom.setStyle(elm, 'width', width);

+			dom.setAttrib(elm, 'width', '');

+		} else {

+			dom.setAttrib(elm, 'width', width, true);

+			dom.setStyle(elm, 'width', '');

+		}

+

+		// Remove these since they are not valid XHTML

+		dom.setAttrib(elm, 'borderColor', '');

+		dom.setAttrib(elm, 'bgColor', '');

+		dom.setAttrib(elm, 'background', '');

+

+		if (height && inst.settings.inline_styles) {

+			dom.setStyle(elm, 'height', height);

+			dom.setAttrib(elm, 'height', '');

+		} else {

+			dom.setAttrib(elm, 'height', height, true);

+			dom.setStyle(elm, 'height', '');

+ 		}

+

+		if (background != '')

+			elm.style.backgroundImage = "url('" + background + "')";

+		else

+			elm.style.backgroundImage = '';

+

+/*		if (tinyMCEPopup.getParam("inline_styles")) {

+			if (width != '')

+				elm.style.width = getCSSSize(width);

+		}*/

+

+		if (bordercolor != "") {

+			elm.style.borderColor = bordercolor;

+			elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;

+			elm.style.borderWidth = cssSize(border);

+		} else

+			elm.style.borderColor = '';

+

+		elm.style.backgroundColor = bgcolor;

+		elm.style.height = getCSSSize(height);

+

+		inst.addVisual();

+

+		// Fix for stange MSIE align bug

+		//elm.outerHTML = elm.outerHTML;

+

+		inst.nodeChanged();

+		inst.execCommand('mceEndUndoLevel');

+

+		// Repaint if dimensions changed

+		if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)

+			inst.execCommand('mceRepaint');

+

+		tinyMCEPopup.close();

+		return true;

+	}

+

+	// Create new table

+	html += '<table';

+

+	html += makeAttrib('id', id);

+	if (!isCssSize(border)) {

+		html += makeAttrib('border', border);

+	}

+

+	html += makeAttrib('cellpadding', cellpadding);

+	html += makeAttrib('cellspacing', cellspacing);

+	html += makeAttrib('data-mce-new', '1');

+

+	if (width && inst.settings.inline_styles) {

+		if (style)

+			style += '; ';

+

+		// Force px

+		if (/^[0-9\.]+$/.test(width))

+			width += 'px';

+

+		style += 'width: ' + width;

+	} else

+		html += makeAttrib('width', width);

+

+/*	if (height) {

+		if (style)

+			style += '; ';

+

+		style += 'height: ' + height;

+	}*/

+

+	//html += makeAttrib('height', height);

+	//html += makeAttrib('bordercolor', bordercolor);

+	//html += makeAttrib('bgcolor', bgcolor);

+	html += makeAttrib('align', align);

+	html += makeAttrib('frame', frame);

+	html += makeAttrib('rules', rules);

+	html += makeAttrib('class', className);

+	html += makeAttrib('style', style);

+	html += makeAttrib('summary', summary);

+	html += makeAttrib('dir', dir);

+	html += makeAttrib('lang', lang);

+	html += '>';

+

+	if (caption) {

+		if (!tinymce.isIE)

+			html += '<caption><br data-mce-bogus="1"/></caption>';

+		else

+			html += '<caption></caption>';

+	}

+

+	for (var y=0; y<rows; y++) {

+		html += "<tr>";

+

+		for (var x=0; x<cols; x++) {

+			if (!tinymce.isIE)

+				html += '<td><br data-mce-bogus="1"/></td>';

+			else

+				html += '<td></td>';

+		}

+

+		html += "</tr>";

+	}

+

+	html += "</table>";

+

+	// Move table

+	if (inst.settings.fix_table_elements) {

+		var patt = '';

+

+		inst.focus();

+		inst.selection.setContent('<br class="_mce_marker" />');

+

+		tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {

+			if (patt)

+				patt += ',';

+

+			patt += n + ' ._mce_marker';

+		});

+

+		tinymce.each(inst.dom.select(patt), function(n) {

+			inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);

+		});

+

+		dom.setOuterHTML(dom.select('br._mce_marker')[0], html);

+	} else

+		inst.execCommand('mceInsertContent', false, html);

+

+	tinymce.each(dom.select('table[data-mce-new]'), function(node) {

+		// Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document

+		if (tinymce.isIE && node.nextSibling == null) {

+			dom.insertAfter(dom.create('p'), node);

+		}

+

+		var tdorth = dom.select('td,th', node);

+		try {

+			// IE9 might fail to do this selection 

+			inst.selection.setCursorLocation(tdorth[0], 0);

+		} catch (ex) {

+			// Ignore

+		}

+

+		dom.setAttrib(node, 'data-mce-new', '');

+	});

+

+	inst.addVisual();

+	inst.execCommand('mceEndUndoLevel');

+

+	tinyMCEPopup.close();

+}

+

+function makeAttrib(attrib, value) {

+	var formObj = document.forms[0];

+	var valueElm = formObj.elements[attrib];

+

+	if (typeof(value) == "undefined" || value == null) {

+		value = "";

+

+		if (valueElm)

+			value = valueElm.value;

+	}

+

+	if (value == "")

+		return "";

+

+	// XML encode it

+	value = value.replace(/&/g, '&amp;');

+	value = value.replace(/\"/g, '&quot;');

+	value = value.replace(/</g, '&lt;');

+	value = value.replace(/>/g, '&gt;');

+

+	return ' ' + attrib + '="' + value + '"';

+}

+

+function init() {

+	tinyMCEPopup.resizeToInnerSize();

+

+	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

+	document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');

+	document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');

+	document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');

+

+	var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');

+	var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";

+	var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";

+	var inst = tinyMCEPopup.editor, dom = inst.dom;

+	var formObj = document.forms[0];

+	var elm = dom.getParent(inst.selection.getNode(), "table");

+

+	action = tinyMCEPopup.getWindowArg('action');

+

+	if (!action)

+		action = elm ? "update" : "insert";

+

+	if (elm && action != "insert") {

+		var rowsAr = elm.rows;

+		var cols = 0;

+		for (var i=0; i<rowsAr.length; i++)

+			if (rowsAr[i].cells.length > cols)

+				cols = rowsAr[i].cells.length;

+

+		cols = cols;

+		rows = rowsAr.length;

+

+		st = dom.parseStyle(dom.getAttrib(elm, "style"));

+		border = trimSize(getStyle(elm, 'border', 'borderWidth'));

+		cellpadding = dom.getAttrib(elm, 'cellpadding', "");

+		cellspacing = dom.getAttrib(elm, 'cellspacing', "");

+		width = trimSize(getStyle(elm, 'width', 'width'));

+		height = trimSize(getStyle(elm, 'height', 'height'));

+		bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));

+		bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));

+		align = dom.getAttrib(elm, 'align', align);

+		frame = dom.getAttrib(elm, 'frame');

+		rules = dom.getAttrib(elm, 'rules');

+		className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));

+		id = dom.getAttrib(elm, 'id');

+		summary = dom.getAttrib(elm, 'summary');

+		style = dom.serializeStyle(st);

+		dir = dom.getAttrib(elm, 'dir');

+		lang = dom.getAttrib(elm, 'lang');

+		background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

+		formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;

+

+		orgTableWidth = width;

+		orgTableHeight = height;

+

+		action = "update";

+		formObj.insert.value = inst.getLang('update');

+	}

+

+	addClassesToList('class', "table_styles");

+	TinyMCE_EditableSelects.init();

+

+	// Update form

+	selectByValue(formObj, 'align', align);

+	selectByValue(formObj, 'tframe', frame);

+	selectByValue(formObj, 'rules', rules);

+	selectByValue(formObj, 'class', className, true, true);

+	formObj.cols.value = cols;

+	formObj.rows.value = rows;

+	formObj.border.value = border;

+	formObj.cellpadding.value = cellpadding;

+	formObj.cellspacing.value = cellspacing;

+	formObj.width.value = width;

+	formObj.height.value = height;

+	formObj.bordercolor.value = bordercolor;

+	formObj.bgcolor.value = bgcolor;

+	formObj.id.value = id;

+	formObj.summary.value = summary;

+	formObj.style.value = style;

+	formObj.dir.value = dir;

+	formObj.lang.value = lang;

+	formObj.backgroundimage.value = background;

+

+	updateColor('bordercolor_pick', 'bordercolor');

+	updateColor('bgcolor_pick', 'bgcolor');

+

+	// Resize some elements

+	if (isVisible('backgroundimagebrowser'))

+		document.getElementById('backgroundimage').style.width = '180px';

+

+	// Disable some fields in update mode

+	if (action == "update") {

+		formObj.cols.disabled = true;

+		formObj.rows.disabled = true;

+	}

+}

+

+function changedSize() {

+	var formObj = document.forms[0];

+	var st = dom.parseStyle(formObj.style.value);

+

+/*	var width = formObj.width.value;

+	if (width != "")

+		st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";

+	else

+		st['width'] = "";*/

+

+	var height = formObj.height.value;

+	if (height != "")

+		st['height'] = getCSSSize(height);

+	else

+		st['height'] = "";

+

+	formObj.style.value = dom.serializeStyle(st);

+}

+

+function isCssSize(value) {

+	return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value);

+}

+

+function cssSize(value, def) {

+	value = tinymce.trim(value || def);

+

+	if (!isCssSize(value)) {

+		return parseInt(value, 10) + 'px';

+	}

+

+	return value;

+}

+

+function changedBackgroundImage() {

+	var formObj = document.forms[0];

+	var st = dom.parseStyle(formObj.style.value);

+

+	st['background-image'] = "url('" + formObj.backgroundimage.value + "')";

+

+	formObj.style.value = dom.serializeStyle(st);

+}

+

+function changedBorder() {

+	var formObj = document.forms[0];

+	var st = dom.parseStyle(formObj.style.value);

+

+	// Update border width if the element has a color

+	if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != ""))

+		st['border-width'] = cssSize(formObj.border.value);

+	else {

+		if (!formObj.border.value) {

+			st['border'] = '';

+			st['border-width'] = '';

+		}

+	}

+

+	formObj.style.value = dom.serializeStyle(st);

+}

+

+function changedColor() {

+	var formObj = document.forms[0];

+	var st = dom.parseStyle(formObj.style.value);

+

+	st['background-color'] = formObj.bgcolor.value;

+

+	if (formObj.bordercolor.value != "") {

+		st['border-color'] = formObj.bordercolor.value;

+

+		// Add border-width if it's missing

+		if (!st['border-width'])

+			st['border-width'] = cssSize(formObj.border.value, 1);

+	}

+

+	formObj.style.value = dom.serializeStyle(st);

+}

+

+function changedStyle() {

+	var formObj = document.forms[0];

+	var st = dom.parseStyle(formObj.style.value);

+

+	if (st['background-image'])

+		formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");

+	else

+		formObj.backgroundimage.value = '';

+

+	if (st['width'])

+		formObj.width.value = trimSize(st['width']);

+

+	if (st['height'])

+		formObj.height.value = trimSize(st['height']);

+

+	if (st['background-color']) {

+		formObj.bgcolor.value = st['background-color'];

+		updateColor('bgcolor_pick','bgcolor');

+	}

+

+	if (st['border-color']) {

+		formObj.bordercolor.value = st['border-color'];

+		updateColor('bordercolor_pick','bordercolor');

+	}

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/merge_cells.htm
@@ -1,1 +1,33 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#table_dlg.merge_cells_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="js/merge_cells.js"></script>

+</head>

+<body style="margin: 8px" role="application">

+<form onsubmit="MergeCellsDialog.merge();return false;" action="#">

+	<fieldset>

+		<legend>{#table_dlg.merge_cells_title}</legend>

+		<table role="presentation" border="0" cellpadding="0" cellspacing="3" width="100%">

+			<tr>

+				<td><label for="numcols">{#table_dlg.cols}</label>:</td>

+				<td align="right"><input type="text" id="numcols" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" aria-required="true" /></td>

+			</tr>

+			<tr>

+				<td><label for="numrows">{#table_dlg.rows}</label>:</td>

+				<td align="right"><input type="text" id="numrows" name="numrows" value="" class="number min1" style="width: 30px" aria-required="true" /></td>

+			</tr>

+		</table>

+	</fieldset>

+

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#update}" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/row.htm
@@ -1,1 +1,159 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#table_dlg.row_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/row.js"></script>

+	<link href="css/row.css" rel="stylesheet" type="text/css" />

+</head>

+<body id="tablerow" style="display: none" role="application">

+	<form onsubmit="updateAction();return false;" action="#">

+		<div class="tabs">

+			<ul>

+				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>

+				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="general_panel" class="panel current">

+				<fieldset>

+					<legend>{#table_dlg.general_props}</legend>

+

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0">

+						<tr>

+							<td><label for="rowtype">{#table_dlg.rowtype}</label></td>

+							<td class="col2">

+								<select id="rowtype" name="rowtype" class="mceFocus">

+									<option value="thead">{#table_dlg.thead}</option>

+									<option value="tbody">{#table_dlg.tbody}</option>

+									<option value="tfoot">{#table_dlg.tfoot}</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="align">{#table_dlg.align}</label></td>

+							<td class="col2">

+								<select id="align" name="align">

+									<option value="">{#not_set}</option>

+									<option value="center">{#table_dlg.align_middle}</option>

+									<option value="left">{#table_dlg.align_left}</option>

+									<option value="right">{#table_dlg.align_right}</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="valign">{#table_dlg.valign}</label></td>

+							<td class="col2">

+								<select id="valign" name="valign">

+									<option value="">{#not_set}</option>

+									<option value="top">{#table_dlg.align_top}</option>

+									<option value="middle">{#table_dlg.align_middle}</option>

+									<option value="bottom">{#table_dlg.align_bottom}</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr id="styleSelectRow">

+							<td><label for="class">{#class_name}</label></td>

+							<td class="col2">

+								<select id="class" name="class" class="mceEditableSelect">

+									<option value="" selected="selected">{#not_set}</option>

+								</select>

+							</td>

+						</tr>

+

+						<tr>

+							<td><label for="height">{#table_dlg.height}</label></td>

+							<td class="col2"><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="advanced_panel" class="panel">

+				<fieldset>

+					<legend>{#table_dlg.advanced_props}</legend>

+

+					<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+						<tr>

+							<td class="column1"><label for="id">{#table_dlg.id}</label></td> 

+							<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> 

+						</tr>

+

+						<tr>

+							<td><label for="style">{#table_dlg.style}</label></td>

+							<td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> 

+							<td>

+								<select id="dir" name="dir" style="width: 200px"> 

+										<option value="">{#not_set}</option> 

+										<option value="ltr">{#table_dlg.ltr}</option> 

+										<option value="rtl">{#table_dlg.rtl}</option> 

+								</select>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> 

+							<td>

+								<input id="lang" name="lang" type="text" value="" style="width: 200px" />

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> 

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>

+										<td id="backgroundimagebrowsercontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="bgcolor" id="bgcolor_label">{#table_dlg.bgcolor}</label></td> 

+							<td>

+								<span role="group" aria-labelledby="bgcolor_label">

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>

+										<td id="bgcolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+								</span>

+							</td> 

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<div>

+				<select id="action" name="action">

+					<option value="row">{#table_dlg.row_row}</option>

+					<option value="odd">{#table_dlg.row_odd}</option>

+					<option value="even">{#table_dlg.row_even}</option>

+					<option value="all">{#table_dlg.row_all}</option>

+				</select>

+			</div>

+

+			<input type="submit" id="insert" name="insert" value="{#update}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/table/table.htm
@@ -1,1 +1,189 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#table_dlg.title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/table.js"></script>

+	<link href="css/table.css" rel="stylesheet" type="text/css" />

+</head>

+<body id="table" style="display: none" role="application" aria-labelledby="app_title">

+	<span style="display:none;" id="app_title">{#table_dlg.title}</span>

+	<form onsubmit="insertTable();return false;" action="#">

+		<div class="tabs">

+			<ul>

+				<li id="general_tab" aria-controls="general_panel" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>

+				<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="general_panel" class="panel current">

+				<fieldset>

+					<legend>{#table_dlg.general_props}</legend>

+					<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">

+						<tr>

+							<td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>

+							<td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" aria-required="true" /></td>

+							<td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>

+							<td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" aria-required="true" /></td>

+						</tr>

+						<tr>

+							<td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>

+							<td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>

+							<td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>

+							<td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>

+						</tr>

+						<tr>

+							<td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>

+							<td><select id="align" name="align">

+								<option value="">{#not_set}</option>

+								<option value="center">{#table_dlg.align_middle}</option>

+								<option value="left">{#table_dlg.align_left}</option>

+								<option value="right">{#table_dlg.align_right}</option>

+							</select></td>

+							<td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>

+							<td><input id="border" name="border" type="text" value="" size="3" maxlength="5" onchange="changedBorder();" class="size" /></td>

+						</tr>

+						<tr id="width_row">

+							<td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>

+							<td><input name="width" type="text" id="width" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

+							<td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>

+							<td><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>

+						</tr>

+						<tr id="styleSelectRow" >

+							<td><label id="classlabel" for="class">{#class_name}</label></td>

+							<td colspan="3" >

+							 <select id="class" name="class" class="mceEditableSelect">

+								<option value="" selected="selected">{#not_set}</option>

+							 </select></td>

+						</tr>

+						<tr>

+							<td class="column1" ><label for="caption">{#table_dlg.caption}</label></td> 

+							<td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td> 

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+

+			<div id="advanced_panel" class="panel">

+				<fieldset>

+					<legend>{#table_dlg.advanced_props}</legend>

+

+					<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+						<tr>

+							<td class="column1"><label for="id">{#table_dlg.id}</label></td> 

+							<td><input id="id" name="id" type="text" value="" class="advfield" /></td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="summary">{#table_dlg.summary}</label></td> 

+							<td><input id="summary" name="summary" type="text" value="" class="advfield" /></td> 

+						</tr>

+

+						<tr>

+							<td><label for="style">{#table_dlg.style}</label></td>

+							<td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>

+						</tr>

+

+						<tr>

+							<td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td> 

+							<td>

+								<input id="lang" name="lang" type="text" value="" class="advfield" />

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> 

+							<td>

+								<table role="presentation" aria-labelledby="backgroundimage_label" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>

+										<td id="backgroundimagebrowsercontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="tframe">{#table_dlg.frame}</label></td> 

+							<td>

+								<select id="tframe" name="tframe" class="advfield"> 

+										<option value="">{#not_set}</option>

+										<option value="void">{#table_dlg.rules_void}</option>

+										<option value="above">{#table_dlg.rules_above}</option> 

+										<option value="below">{#table_dlg.rules_below}</option> 

+										<option value="hsides">{#table_dlg.rules_hsides}</option> 

+										<option value="lhs">{#table_dlg.rules_lhs}</option> 

+										<option value="rhs">{#table_dlg.rules_rhs}</option> 

+										<option value="vsides">{#table_dlg.rules_vsides}</option> 

+										<option value="box">{#table_dlg.rules_box}</option> 

+										<option value="border">{#table_dlg.rules_border}</option> 

+								</select>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="rules">{#table_dlg.rules}</label></td> 

+							<td>

+								<select id="rules" name="rules" class="advfield"> 

+										<option value="">{#not_set}</option> 

+										<option value="none">{#table_dlg.frame_none}</option>

+										<option value="groups">{#table_dlg.frame_groups}</option>

+										<option value="rows">{#table_dlg.frame_rows}</option>

+										<option value="cols">{#table_dlg.frame_cols}</option>

+										<option value="all">{#table_dlg.frame_all}</option>

+									</select>

+							</td> 

+						</tr>

+

+						<tr>

+							<td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> 

+							<td>

+								<select id="dir" name="dir" class="advfield"> 

+										<option value="">{#not_set}</option> 

+										<option value="ltr">{#table_dlg.ltr}</option> 

+										<option value="rtl">{#table_dlg.rtl}</option> 

+								</select>

+							</td> 

+						</tr>

+

+						<tr role="group" aria-labelledby="bordercolor_label">

+							<td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td> 

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>

+										<td id="bordercolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+

+						<tr role="group" aria-labelledby="bgcolor_label">

+							<td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td> 

+							<td>

+								<table role="presentation" border="0" cellpadding="0" cellspacing="0">

+									<tr>

+										<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>

+										<td id="bgcolor_pickcontainer">&nbsp;</td>

+									</tr>

+								</table>

+							</td> 

+						</tr>

+					</table>

+				</fieldset>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<input type="submit" id="insert" name="insert" value="{#insert}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/template/blank.htm
@@ -1,1 +1,13 @@
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>blank_page</title>

+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

+	<script type="text/javascript">

+		parent.TemplateDialog.loadCSSFiles(document);

+	</script>

+</head>

+<body id="mceTemplatePreview" class="mceContentBody">

+

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/template/css/template.css
@@ -1,1 +1,24 @@
+#frmbody {

+	padding: 10px;

+	background-color: #FFF;

+	border: 1px solid #CCC;

+}

+

+.frmRow {

+	margin-bottom: 10px;

+}

+

+#templatesrc {

+	border: none;

+	width: 320px;

+	height: 240px;

+}

+

+.title {

+	padding-bottom: 5px;

+}

+

+.mceActionPanel {

+	padding-top: 5px;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/template/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length<d){for(f=0;f<(d-g.length);f++){g="0"+g}}return g}b=b.replace("%D","%m/%d/%y");b=b.replace("%r","%I:%M:%S %p");b=b.replace("%Y",""+e.getFullYear());b=b.replace("%y",""+e.getYear());b=b.replace("%m",c(e.getMonth()+1,2));b=b.replace("%d",c(e.getDate(),2));b=b.replace("%H",""+c(e.getHours(),2));b=b.replace("%M",""+c(e.getMinutes(),2));b=b.replace("%S",""+c(e.getSeconds(),2));b=b.replace("%I",""+((e.getHours()+11)%12+1));b=b.replace("%p",""+(e.getHours()<12?"AM":"PM"));b=b.replace("%B",""+this.editor.getLang("template_months_long").split(",")[e.getMonth()]);b=b.replace("%b",""+this.editor.getLang("template_months_short").split(",")[e.getMonth()]);b=b.replace("%A",""+this.editor.getLang("template_day_long").split(",")[e.getDay()]);b=b.replace("%a",""+this.editor.getLang("template_day_short").split(",")[e.getDay()]);b=b.replace("%%","%");return b}});tinymce.PluginManager.add("template",tinymce.plugins.TemplatePlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/template/editor_plugin_src.js
@@ -1,1 +1,159 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var each = tinymce.each;

+

+	tinymce.create('tinymce.plugins.TemplatePlugin', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceTemplate', function(ui) {

+				ed.windowManager.open({

+					file : url + '/template.htm',

+					width : ed.getParam('template_popup_width', 750),

+					height : ed.getParam('template_popup_height', 600),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			ed.addCommand('mceInsertTemplate', t._insertTemplate, t);

+

+			// Register buttons

+			ed.addButton('template', {title : 'template.desc', cmd : 'mceTemplate'});

+

+			ed.onPreProcess.add(function(ed, o) {

+				var dom = ed.dom;

+

+				each(dom.select('div', o.node), function(e) {

+					if (dom.hasClass(e, 'mceTmpl')) {

+						each(dom.select('*', e), function(e) {

+							if (dom.hasClass(e, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))

+								e.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));

+						});

+

+						t._replaceVals(e);

+					}

+				});

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Template plugin',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://www.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		_insertTemplate : function(ui, v) {

+			var t = this, ed = t.editor, h, el, dom = ed.dom, sel = ed.selection.getContent();

+

+			h = v.content;

+

+			each(t.editor.getParam('template_replace_values'), function(v, k) {

+				if (typeof(v) != 'function')

+					h = h.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v);

+			});

+

+			el = dom.create('div', null, h);

+

+			// Find template element within div

+			n = dom.select('.mceTmpl', el);

+			if (n && n.length > 0) {

+				el = dom.create('div', null);

+				el.appendChild(n[0].cloneNode(true));

+			}

+

+			function hasClass(n, c) {

+				return new RegExp('\\b' + c + '\\b', 'g').test(n.className);

+			};

+

+			each(dom.select('*', el), function(n) {

+				// Replace cdate

+				if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|')))

+					n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format")));

+

+				// Replace mdate

+				if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))

+					n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));

+

+				// Replace selection

+				if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|')))

+					n.innerHTML = sel;

+			});

+

+			t._replaceVals(el);

+

+			ed.execCommand('mceInsertContent', false, el.innerHTML);

+			ed.addVisual();

+		},

+

+		_replaceVals : function(e) {

+			var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values');

+

+			each(dom.select('*', e), function(e) {

+				each(vl, function(v, k) {

+					if (dom.hasClass(e, k)) {

+						if (typeof(vl[k]) == 'function')

+							vl[k](e);

+					}

+				});

+			});

+		},

+

+		_getDateTime : function(d, fmt) {

+				if (!fmt)

+					return "";

+

+				function addZeros(value, len) {

+					var i;

+

+					value = "" + value;

+

+					if (value.length < len) {

+						for (i=0; i<(len-value.length); i++)

+							value = "0" + value;

+					}

+

+					return value;

+				}

+

+				fmt = fmt.replace("%D", "%m/%d/%y");

+				fmt = fmt.replace("%r", "%I:%M:%S %p");

+				fmt = fmt.replace("%Y", "" + d.getFullYear());

+				fmt = fmt.replace("%y", "" + d.getYear());

+				fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));

+				fmt = fmt.replace("%d", addZeros(d.getDate(), 2));

+				fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));

+				fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));

+				fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));

+				fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));

+				fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));

+				fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]);

+				fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]);

+				fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]);

+				fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]);

+				fmt = fmt.replace("%%", "%");

+

+				return fmt;

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/template/js/template.js
@@ -1,1 +1,107 @@
+tinyMCEPopup.requireLangPack();

+

+var TemplateDialog = {

+	preInit : function() {

+		var url = tinyMCEPopup.getParam("template_external_list_url");

+

+		if (url != null)

+			document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></sc'+'ript>');

+	},

+

+	init : function() {

+		var ed = tinyMCEPopup.editor, tsrc, sel, x, u;

+

+ 		tsrc = ed.getParam("template_templates", false);

+ 		sel = document.getElementById('tpath');

+

+		// Setup external template list

+		if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') {

+			for (x=0, tsrc = []; x<tinyMCETemplateList.length; x++)

+				tsrc.push({title : tinyMCETemplateList[x][0], src : tinyMCETemplateList[x][1], description : tinyMCETemplateList[x][2]});

+		}

+

+		for (x=0; x<tsrc.length; x++)

+			sel.options[sel.options.length] = new Option(tsrc[x].title, tinyMCEPopup.editor.documentBaseURI.toAbsolute(tsrc[x].src));

+

+		this.resize();

+		this.tsrc = tsrc;

+	},

+

+	resize : function() {

+		var w, h, e;

+

+		if (!self.innerWidth) {

+			w = document.body.clientWidth - 50;

+			h = document.body.clientHeight - 160;

+		} else {

+			w = self.innerWidth - 50;

+			h = self.innerHeight - 170;

+		}

+

+		e = document.getElementById('templatesrc');

+

+		if (e) {

+			e.style.height = Math.abs(h) + 'px';

+			e.style.width = Math.abs(w - 5) + 'px';

+		}

+	},

+

+	loadCSSFiles : function(d) {

+		var ed = tinyMCEPopup.editor;

+

+		tinymce.each(ed.getParam("content_css", '').split(','), function(u) {

+			d.write('<link href="' + ed.documentBaseURI.toAbsolute(u) + '" rel="stylesheet" type="text/css" />');

+		});

+	},

+

+	selectTemplate : function(u, ti) {

+		var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc;

+

+		if (!u)

+			return;

+

+		d.body.innerHTML = this.templateHTML = this.getFileContents(u);

+

+		for (x=0; x<tsrc.length; x++) {

+			if (tsrc[x].title == ti)

+				document.getElementById('tmpldesc').innerHTML = tsrc[x].description || '';

+		}

+	},

+

+ 	insert : function() {

+		tinyMCEPopup.execCommand('mceInsertTemplate', false, {

+			content : this.templateHTML,

+			selection : tinyMCEPopup.editor.selection.getContent()

+		});

+

+		tinyMCEPopup.close();

+	},

+

+	getFileContents : function(u) {

+		var x, d, t = 'text/plain';

+

+		function g(s) {

+			x = 0;

+

+			try {

+				x = new ActiveXObject(s);

+			} catch (s) {

+			}

+

+			return x;

+		};

+

+		x = window.ActiveXObject ? g('Msxml2.XMLHTTP') || g('Microsoft.XMLHTTP') : new XMLHttpRequest();

+

+		// Synchronous AJAX load file

+		x.overrideMimeType && x.overrideMimeType(t);

+		x.open("GET", u, false);

+		x.send(null);

+

+		return x.responseText;

+	}

+};

+

+TemplateDialog.preInit();

+tinyMCEPopup.onInit.add(TemplateDialog.init, TemplateDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/template/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/template/template.htm
@@ -1,1 +1,32 @@
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#template_dlg.title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/template.js"></script>

+	<link href="css/template.css" rel="stylesheet" type="text/css" />

+</head>

+<body onresize="TemplateDialog.resize();"> 

+	<form onsubmit="TemplateDialog.insert();return false;">

+		<div id="frmbody">

+			<div class="title">{#template_dlg.desc}</div>

+			<div class="frmRow"><label for="tpath" title="{#template_dlg.select}">{#template_dlg.label}:</label>

+			<select id="tpath" name="tpath" onchange="TemplateDialog.selectTemplate(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text);" class="mceFocus">

+				<option value="">{#template_dlg.select}...</option>

+			</select>

+			<span id="warning"></span></div>

+			<div class="frmRow"><label for="tdesc">{#template_dlg.desc_label}:</label>

+			<span id="tmpldesc"></span></div>

+			<fieldset>

+				<legend>{#template_dlg.preview}</legend>

+				<iframe id="templatesrc" name="templatesrc" src="blank.htm" width="690" height="400" frameborder="0"></iframe>

+			</fieldset>

+		</div>

+		

+		<div class="mceActionPanel">

+			<input type="submit" id="insert" name="insert" value="{#insert}" />

+			<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+		</div>

+	</form>

+</body> 

+</html> 

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g<a.length;g++){l=a[g].nodeValue;l=l.replace(/(\u00a0)/g,'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js
@@ -1,1 +1,83 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.VisualChars', {

+		init : function(ed, url) {

+			var t = this;

+

+			t.editor = ed;

+

+			// Register commands

+			ed.addCommand('mceVisualChars', t._toggleVisualChars, t);

+

+			// Register buttons

+			ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});

+

+			ed.onBeforeGetContent.add(function(ed, o) {

+				if (t.state && o.format != 'raw' && !o.draft) {

+					t.state = true;

+					t._toggleVisualChars(false);

+				}

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Visual characters',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		},

+

+		// Private methods

+

+		_toggleVisualChars : function(bookmark) {

+			var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm;

+

+			t.state = !t.state;

+			ed.controlManager.setActive('visualchars', t.state);

+

+			if (bookmark)

+				bm = s.getBookmark();

+

+			if (t.state) {

+				nl = [];

+				tinymce.walk(b, function(n) {

+					if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)

+						nl.push(n);

+				}, 'childNodes');

+

+				for (i = 0; i < nl.length; i++) {

+					nv = nl[i].nodeValue;

+					nv = nv.replace(/(\u00a0)/g, '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');

+

+					div = ed.dom.create('div', null, nv);

+					while (node = div.lastChild)

+						ed.dom.insertAfter(node, nl[i]);

+

+					ed.dom.remove(nl[i]);

+				}

+			} else {

+				nl = ed.dom.select('span.mceItemNbsp', b);

+

+				for (i = nl.length - 1; i >= 0; i--)

+					ed.dom.remove(nl[i], 1);

+			}

+

+			s.moveToBookmark(bm);

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'<span id="'+c.id+'">0</span>')}}else{tinymce.DOM.add(h,"span",{},'<span id="'+c.id+'">0</span>')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},2000)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js
@@ -1,1 +1,115 @@
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.WordCount', {

+		block : 0,

+		id : null,

+		countre : null,

+		cleanre : null,

+

+		init : function(ed, url) {

+			var t = this, last = 0;

+

+			t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == &rsquo;

+			t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);

+			t.id = ed.id + '-word-count';

+

+			ed.onPostRender.add(function(ed, cm) {

+				var row, id;

+

+				// Add it to the specified id or the theme advanced path

+				id = ed.getParam('wordcount_target_id');

+				if (!id) {

+					row = tinymce.DOM.get(ed.id + '_path_row');

+

+					if (row)

+						tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '<span id="' + t.id + '">0</span>');

+				} else {

+					tinymce.DOM.add(id, 'span', {}, '<span id="' + t.id + '">0</span>');

+				}

+			});

+

+			ed.onInit.add(function(ed) {

+				ed.selection.onSetContent.add(function() {

+					t._count(ed);

+				});

+

+				t._count(ed);

+			});

+

+			ed.onSetContent.add(function(ed) {

+				t._count(ed);

+			});

+

+			ed.onKeyUp.add(function(ed, e) {

+				if (e.keyCode == last)

+					return;

+

+				if (13 == e.keyCode || 8 == last || 46 == last)

+					t._count(ed);

+

+				last = e.keyCode;

+			});

+		},

+

+		_getCount : function(ed) {

+			var tc = 0;

+			var tx = ed.getContent({ format: 'raw' });

+

+			if (tx) {

+					tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces

+					tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' '); // remove html tags and space chars

+

+					// deal with html entities

+					tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' ');

+					tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation

+

+					var wordArray = tx.match(this.countre);

+					if (wordArray) {

+							tc = wordArray.length;

+					}

+			}

+

+			return tc;

+		},

+

+		_count : function(ed) {

+			var t = this;

+

+			// Keep multiple calls from happening at the same time

+			if (t.block)

+				return;

+

+			t.block = 1;

+

+			setTimeout(function() {

+				if (!ed.destroyed) {

+					var tc = t._getCount(ed);

+					tinymce.DOM.setHTML(t.id, tc.toString());

+					setTimeout(function() {t.block = 0;}, 2000);

+				}

+			}, 1);

+		},

+

+		getInfo: function() {

+			return {

+				longname : 'Word Count plugin',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount);

+})();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm
@@ -1,1 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#xhtmlxtras_dlg.title_abbr_element}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/element_common.js"></script>

+	<script type="text/javascript" src="js/abbr.js"></script>

+	<link rel="stylesheet" type="text/css" href="css/popup.css" />

+</head>

+<body style="display: none" role="application" aria-labelledby="app_title">

+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_abbr_element}</span>

+<form onsubmit="insertAbbr();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

+			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

+						<td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

+						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

+						<td>

+							<select id="class" name="class" class="field mceEditableSelect">

+								<option value="">{#not_set}</option> 

+							</select>

+						</td>

+					</tr>

+					<tr>

+						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

+						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

+						<td>

+							<select id="dir" name="dir" class="field"> 

+								<option value="">{#not_set}</option> 

+								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

+								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

+							</select>

+						</td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

+						<td>

+							<input id="lang" name="lang" type="text" value="" class="field" />

+						</td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+		<div id="events_panel" class="panel">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

+

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label for="onfocus">onfocus</label>:</td> 

+						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onblur">onblur</label>:</td> 

+						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onclick">onclick</label>:</td> 

+						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

+						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

+						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

+						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

+						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

+						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

+						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

+						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

+						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

+						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+	</div>

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#update}" />

+		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm
@@ -1,1 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#xhtmlxtras_dlg.title_acronym_element}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/element_common.js"></script>

+	<script type="text/javascript" src="js/acronym.js"></script>

+	<link rel="stylesheet" type="text/css" href="css/popup.css" />

+</head>

+<body style="display: none" role="application" aria-labelledby="app_title">

+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_acronym_element}</span>

+<form onsubmit="insertAcronym();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

+			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

+						<td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

+						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

+						<td>

+							<select id="class" name="class" class="field mceEditableSelect">

+								<option value="">{#not_set}</option> 

+							</select>

+						</td>

+					</tr>

+					<tr>

+						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

+						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

+						<td>

+							<select id="dir" name="dir" class="field"> 

+								<option value="">{#not_set}</option> 

+								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

+								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

+							</select>

+						</td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

+						<td>

+							<input id="lang" name="lang" type="text" value="" class="field" />

+						</td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+		<div id="events_panel" class="panel">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

+

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label for="onfocus">onfocus</label>:</td> 

+						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onblur">onblur</label>:</td> 

+						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onclick">onclick</label>:</td> 

+						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

+						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

+						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

+						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

+						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

+						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

+						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

+						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

+						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

+						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+	</div>

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#update}" />

+		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm
@@ -1,1 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#xhtmlxtras_dlg.attribs_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="js/attributes.js"></script>

+	<link rel="stylesheet" type="text/css" href="css/attributes.css" />

+</head>

+<body style="display: none" role="application" aria-labelledby="app_title">

+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.attribs_title}</span>

+<form onsubmit="insertAction();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_attrib_tab}</a></span></li>

+			<li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_events_tab}</a></span></li>

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

+						<td><input id="title" name="title" type="text" value="" class="mceFocus" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

+						<td><input id="id" name="id" type="text" value="" /></td> 

+					</tr>

+					<tr>

+						<td><label id="classlabel" for="classlist">{#class_name}</label></td>

+						<td>

+							<select id="classlist" name="classlist" class="mceEditableSelect">

+								<option value="" selected="selected">{#not_set}</option>

+							</select>

+						</td>

+					</tr>

+					<tr>

+						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

+						<td><input id="style" name="style" type="text" value="" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

+						<td>

+							<select id="dir" name="dir"> 

+								<option value="">{#not_set}</option> 

+								<option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option> 

+								<option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option> 

+							</select>

+						</td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

+						<td>

+							<input id="lang" name="lang" type="text" value="" />

+						</td> 

+					</tr>

+					<tr>

+							<td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>

+							<td><input type="text" id="tabindex" name="tabindex" value="" /></td>

+						</tr>

+

+						<tr>

+							<td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>

+							<td><input type="text" id="accesskey" name="accesskey" value="" /></td>

+						</tr>

+				</table>

+			</fieldset>

+		</div>

+		<div id="events_panel" class="panel">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>

+

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label for="onfocus">onfocus</label>:</td> 

+						<td><input id="onfocus" name="onfocus" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onblur">onblur</label>:</td> 

+						<td><input id="onblur" name="onblur" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onclick">onclick</label>:</td> 

+						<td><input id="onclick" name="onclick" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

+						<td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

+						<td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

+						<td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

+						<td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

+						<td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

+						<td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

+						<td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

+						<td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

+						<td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+	</div>

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#insert}" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm
@@ -1,1 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#xhtmlxtras_dlg.title_cite_element}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/element_common.js"></script>

+	<script type="text/javascript" src="js/cite.js"></script>

+	<link rel="stylesheet" type="text/css" href="css/popup.css" />

+</head>

+<body style="display: none" role="application" aria-labelledby="app_title">

+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_cite_element}</span>

+<form onsubmit="insertCite();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

+			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

+						<td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

+						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

+						<td>

+							<select id="class" name="class" class="field mceEditableSelect">

+								<option value="">{#not_set}</option> 

+							</select>

+						</td>

+					</tr>

+					<tr>

+						<td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

+						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

+						<td>

+							<select id="dir" name="dir" class="field"> 

+								<option value="">{#not_set}</option> 

+								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

+								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

+							</select>

+						</td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

+						<td>

+							<input id="lang" name="lang" type="text" value="" class="field" />

+						</td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+		<div id="events_panel" class="panel">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

+

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label for="onfocus">onfocus</label>:</td> 

+						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onblur">onblur</label>:</td> 

+						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onclick">onclick</label>:</td> 

+						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

+						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

+						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

+						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

+						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

+						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

+						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

+						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

+						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

+						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+	</div>

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#update}" />

+		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css
@@ -1,1 +1,12 @@
+.panel_wrapper div.current {

+	height: 290px;

+}

+

+#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {

+	width: 200px;

+}

+

+#events_panel input {

+	width: 200px;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css
@@ -1,1 +1,10 @@
+input.field, select.field {width:200px;}

+input.picker {width:179px; margin-left: 5px;}

+input.disabled {border-color:#F2F2F2;}

+img.picker {vertical-align:text-bottom; cursor:pointer;}

+h1 {padding: 0 0 5px 0;}

+.panel_wrapper div.current {height:160px;}

+#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}

+a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}

+#datetime {width:180px;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm
@@ -1,1 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#xhtmlxtras_dlg.title_del_element}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/element_common.js"></script>

+	<script type="text/javascript" src="js/del.js"></script>

+	<link rel="stylesheet" type="text/css" href="css/popup.css" />

+</head>

+<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">

+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_del_element}</span>

+<form onsubmit="insertDel();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

+			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>

+						<td>

+							<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+								<tr> 

+									<td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> 

+									<td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse" role="button" aria-labelledby="datetimelabel"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>

+								</tr>

+							</table>

+						</td>

+					</tr>

+					<tr>

+						<td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>

+						<td><input id="cite" name="cite" type="text" value="" class="field" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

+						<td><input id="title" name="title" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

+						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

+						<td>

+							<select id="class" name="class" class="field mceEditableSelect">

+								<option value="">{#not_set}</option> 

+							</select>

+						</td>

+					</tr>

+					<tr>

+						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

+						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

+						<td>

+							<select id="dir" name="dir" class="field"> 

+								<option value="">{#not_set}</option> 

+								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

+								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

+							</select>

+						</td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

+						<td>

+							<input id="lang" name="lang" type="text" value="" class="field" />

+						</td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+		<div id="events_panel" class="panel">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

+

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label for="onfocus">onfocus</label>:</td> 

+						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onblur">onblur</label>:</td> 

+						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onclick">onclick</label>:</td> 

+						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

+						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

+						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

+						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

+						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

+						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

+						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

+						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

+						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

+						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+	</div>

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#update}" />

+		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
@@ -1,1 +1,1 @@
-
+(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
@@ -1,1 +1,132 @@
-
+/**

+ * editor_plugin_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', {

+		init : function(ed, url) {

+			// Register commands

+			ed.addCommand('mceCite', function() {

+				ed.windowManager.open({

+					file : url + '/cite.htm',

+					width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),

+					height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			ed.addCommand('mceAcronym', function() {

+				ed.windowManager.open({

+					file : url + '/acronym.htm',

+					width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),

+					height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			ed.addCommand('mceAbbr', function() {

+				ed.windowManager.open({

+					file : url + '/abbr.htm',

+					width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),

+					height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			ed.addCommand('mceDel', function() {

+				ed.windowManager.open({

+					file : url + '/del.htm',

+					width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),

+					height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			ed.addCommand('mceIns', function() {

+				ed.windowManager.open({

+					file : url + '/ins.htm',

+					width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),

+					height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			ed.addCommand('mceAttributes', function() {

+				ed.windowManager.open({

+					file : url + '/attributes.htm',

+					width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)),

+					height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)),

+					inline : 1

+				}, {

+					plugin_url : url

+				});

+			});

+

+			// Register buttons

+			ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});

+			ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});

+			ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});

+			ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});

+			ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});

+			ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});

+

+			ed.onNodeChange.add(function(ed, cm, n, co) {

+				n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');

+

+				cm.setDisabled('cite', co);

+				cm.setDisabled('acronym', co);

+				cm.setDisabled('abbr', co);

+				cm.setDisabled('del', co);

+				cm.setDisabled('ins', co);

+				cm.setDisabled('attribs', n && n.nodeName == 'BODY');

+				cm.setActive('cite', 0);

+				cm.setActive('acronym', 0);

+				cm.setActive('abbr', 0);

+				cm.setActive('del', 0);

+				cm.setActive('ins', 0);

+

+				// Activate all

+				if (n) {

+					do {

+						cm.setDisabled(n.nodeName.toLowerCase(), 0);

+						cm.setActive(n.nodeName.toLowerCase(), 1);

+					} while (n = n.parentNode);

+				}

+			});

+

+			ed.onPreInit.add(function() {

+				// Fixed IE issue where it can't handle these elements correctly

+				ed.dom.create('abbr');

+			});

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'XHTML Xtras Plugin',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			};

+		}

+	});

+

+	// Register plugin

+	tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);

+})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm
@@ -1,1 +1,163 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#xhtmlxtras_dlg.title_ins_element}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/editable_selects.js"></script>

+	<script type="text/javascript" src="js/element_common.js"></script>

+	<script type="text/javascript" src="js/ins.js"></script>

+	<link rel="stylesheet" type="text/css" href="css/popup.css" />

+</head>

+<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">

+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_ins_element}</span>

+<form onsubmit="insertIns();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>

+			<!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td> 

+						<td>

+							<table role="presentation" border="0" cellspacing="0" cellpadding="0">

+								<tr> 

+									<td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> 

+									<td ><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse" role="button" aria-labelledby="datetimelabel"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>

+								</tr>

+							</table>

+						</td>

+					</tr>

+					<tr >

+						<td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td> 

+						<td><input id="cite" name="cite" type="text" value="" class="field" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td  class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> 

+						<td><input id="title" name="title" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> 

+						<td><input id="id" name="id" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> 

+						<td>

+							<select id="class" name="class" class="field mceEditableSelect">

+								<option value="">{#not_set}</option> 

+							</select>

+						</td>

+					</tr>

+					<tr>

+						<td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 

+						<td><input id="style" name="style" type="text" value="" class="field" /></td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> 

+						<td>

+							<select id="dir" name="dir" class="field"> 

+								<option value="">{#not_set}</option> 

+								<option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> 

+								<option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> 

+							</select>

+						</td> 

+					</tr>

+					<tr>

+						<td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> 

+						<td>

+							<input id="lang" name="lang" type="text" value="" class="field" />

+						</td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+		<div id="events_panel" class="panel">

+			<fieldset>

+				<legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>

+

+				<table role="presentation" border="0" cellpadding="0" cellspacing="4">

+					<tr>

+						<td class="label"><label for="onfocus">onfocus</label>:</td> 

+						<td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onblur">onblur</label>:</td> 

+						<td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onclick">onclick</label>:</td> 

+						<td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="ondblclick">ondblclick</label>:</td> 

+						<td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousedown">onmousedown</label>:</td> 

+						<td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseup">onmouseup</label>:</td> 

+						<td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseover">onmouseover</label>:</td> 

+						<td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmousemove">onmousemove</label>:</td> 

+						<td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onmouseout">onmouseout</label>:</td> 

+						<td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeypress">onkeypress</label>:</td> 

+						<td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeydown">onkeydown</label>:</td> 

+						<td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> 

+					</tr>

+

+					<tr>

+						<td class="label"><label for="onkeyup">onkeyup</label>:</td> 

+						<td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> 

+					</tr>

+				</table>

+			</fieldset>

+		</div>

+	</div>

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#update}" />

+		<input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js
@@ -1,1 +1,29 @@
+/**

+ * abbr.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+function init() {

+	SXE.initElementDialog('abbr');

+	if (SXE.currentAction == "update") {

+		SXE.showRemoveButton();

+	}

+}

+

+function insertAbbr() {

+	SXE.insertElement('abbr');

+	tinyMCEPopup.close();

+}

+

+function removeAbbr() {

+	SXE.removeElement('abbr');

+	tinyMCEPopup.close();

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js
@@ -1,1 +1,29 @@
+/**

+ * acronym.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+function init() {

+	SXE.initElementDialog('acronym');

+	if (SXE.currentAction == "update") {

+		SXE.showRemoveButton();

+	}

+}

+

+function insertAcronym() {

+	SXE.insertElement('acronym');

+	tinyMCEPopup.close();

+}

+

+function removeAcronym() {

+	SXE.removeElement('acronym');

+	tinyMCEPopup.close();

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js
@@ -1,1 +1,112 @@
+/**

+ * attributes.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+function init() {

+	tinyMCEPopup.resizeToInnerSize();

+	var inst = tinyMCEPopup.editor;

+	var dom = inst.dom;

+	var elm = inst.selection.getNode();

+	var f = document.forms[0];

+	var onclick = dom.getAttrib(elm, 'onclick');

+

+	setFormValue('title', dom.getAttrib(elm, 'title'));

+	setFormValue('id', dom.getAttrib(elm, 'id'));

+	setFormValue('style', dom.getAttrib(elm, "style"));

+	setFormValue('dir', dom.getAttrib(elm, 'dir'));

+	setFormValue('lang', dom.getAttrib(elm, 'lang'));

+	setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));

+	setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));

+	setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));

+	setFormValue('onblur', dom.getAttrib(elm, 'onblur'));

+	setFormValue('onclick', onclick);

+	setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));

+	setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));

+	setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));

+	setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));

+	setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));

+	setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));

+	setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));

+	setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));

+	setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));

+	className = dom.getAttrib(elm, 'class');

+

+	addClassesToList('classlist', 'advlink_styles');

+	selectByValue(f, 'classlist', className, true);

+

+	TinyMCE_EditableSelects.init();

+}

+

+function setFormValue(name, value) {

+	if(value && document.forms[0].elements[name]){

+		document.forms[0].elements[name].value = value;

+	}

+}

+

+function insertAction() {

+	var inst = tinyMCEPopup.editor;

+	var elm = inst.selection.getNode();

+

+	setAllAttribs(elm);

+	tinyMCEPopup.execCommand("mceEndUndoLevel");

+	tinyMCEPopup.close();

+}

+

+function setAttrib(elm, attrib, value) {

+	var formObj = document.forms[0];

+	var valueElm = formObj.elements[attrib.toLowerCase()];

+	var inst = tinyMCEPopup.editor;

+	var dom = inst.dom;

+

+	if (typeof(value) == "undefined" || value == null) {

+		value = "";

+

+		if (valueElm)

+			value = valueElm.value;

+	}

+

+	dom.setAttrib(elm, attrib.toLowerCase(), value);

+}

+

+function setAllAttribs(elm) {

+	var f = document.forms[0];

+

+	setAttrib(elm, 'title');

+	setAttrib(elm, 'id');

+	setAttrib(elm, 'style');

+	setAttrib(elm, 'class', getSelectValue(f, 'classlist'));

+	setAttrib(elm, 'dir');

+	setAttrib(elm, 'lang');

+	setAttrib(elm, 'tabindex');

+	setAttrib(elm, 'accesskey');

+	setAttrib(elm, 'onfocus');

+	setAttrib(elm, 'onblur');

+	setAttrib(elm, 'onclick');

+	setAttrib(elm, 'ondblclick');

+	setAttrib(elm, 'onmousedown');

+	setAttrib(elm, 'onmouseup');

+	setAttrib(elm, 'onmouseover');

+	setAttrib(elm, 'onmousemove');

+	setAttrib(elm, 'onmouseout');

+	setAttrib(elm, 'onkeypress');

+	setAttrib(elm, 'onkeydown');

+	setAttrib(elm, 'onkeyup');

+

+	// Refresh in old MSIE

+//	if (tinyMCE.isMSIE5)

+//		elm.outerHTML = elm.outerHTML;

+}

+

+function insertAttribute() {

+	tinyMCEPopup.close();

+}

+

+tinyMCEPopup.onInit.add(init);

+tinyMCEPopup.requireLangPack();

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js
@@ -1,1 +1,29 @@
+/**

+ * cite.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+function init() {

+	SXE.initElementDialog('cite');

+	if (SXE.currentAction == "update") {

+		SXE.showRemoveButton();

+	}

+}

+

+function insertCite() {

+	SXE.insertElement('cite');

+	tinyMCEPopup.close();

+}

+

+function removeCite() {

+	SXE.removeElement('cite');

+	tinyMCEPopup.close();

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js
@@ -1,1 +1,54 @@
+/**

+ * del.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+function init() {

+	SXE.initElementDialog('del');

+	if (SXE.currentAction == "update") {

+		setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));

+		setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));

+		SXE.showRemoveButton();

+	}

+}

+

+function setElementAttribs(elm) {

+	setAllCommonAttribs(elm);

+	setAttrib(elm, 'datetime');

+	setAttrib(elm, 'cite');

+	elm.removeAttribute('data-mce-new');

+}

+

+function insertDel() {

+	var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');

+

+	if (elm == null) {

+		var s = SXE.inst.selection.getContent();

+		if(s.length > 0) {

+			insertInlineElement('del');

+			var elementArray = SXE.inst.dom.select('del[data-mce-new]');

+			for (var i=0; i<elementArray.length; i++) {

+				var elm = elementArray[i];

+				setElementAttribs(elm);

+			}

+		}

+	} else {

+		setElementAttribs(elm);

+	}

+	tinyMCEPopup.editor.nodeChanged();

+	tinyMCEPopup.execCommand('mceEndUndoLevel');

+	tinyMCEPopup.close();

+}

+

+function removeDel() {

+	SXE.removeElement('del');

+	tinyMCEPopup.close();

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js
@@ -1,1 +1,230 @@
+/**

+ * element_common.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+tinyMCEPopup.requireLangPack();

+

+function initCommonAttributes(elm) {

+	var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;

+

+	// Setup form data for common element attributes

+	setFormValue('title', dom.getAttrib(elm, 'title'));

+	setFormValue('id', dom.getAttrib(elm, 'id'));

+	selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);

+	setFormValue('style', dom.getAttrib(elm, 'style'));

+	selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));

+	setFormValue('lang', dom.getAttrib(elm, 'lang'));

+	setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));

+	setFormValue('onblur', dom.getAttrib(elm, 'onblur'));

+	setFormValue('onclick', dom.getAttrib(elm, 'onclick'));

+	setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));

+	setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));

+	setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));

+	setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));

+	setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));

+	setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));

+	setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));

+	setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));

+	setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));

+}

+

+function setFormValue(name, value) {

+	if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;

+}

+

+function insertDateTime(id) {

+	document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");

+}

+

+function getDateTime(d, fmt) {

+	fmt = fmt.replace("%D", "%m/%d/%y");

+	fmt = fmt.replace("%r", "%I:%M:%S %p");

+	fmt = fmt.replace("%Y", "" + d.getFullYear());

+	fmt = fmt.replace("%y", "" + d.getYear());

+	fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));

+	fmt = fmt.replace("%d", addZeros(d.getDate(), 2));

+	fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));

+	fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));

+	fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));

+	fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));

+	fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));

+	fmt = fmt.replace("%%", "%");

+

+	return fmt;

+}

+

+function addZeros(value, len) {

+	var i;

+

+	value = "" + value;

+

+	if (value.length < len) {

+		for (i=0; i<(len-value.length); i++)

+			value = "0" + value;

+	}

+

+	return value;

+}

+

+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {

+	if (!form_obj || !form_obj.elements[field_name])

+		return;

+

+	var sel = form_obj.elements[field_name];

+

+	var found = false;

+	for (var i=0; i<sel.options.length; i++) {

+		var option = sel.options[i];

+

+		if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {

+			option.selected = true;

+			found = true;

+		} else

+			option.selected = false;

+	}

+

+	if (!found && add_custom && value != '') {

+		var option = new Option('Value: ' + value, value);

+		option.selected = true;

+		sel.options[sel.options.length] = option;

+	}

+

+	return found;

+}

+

+function setAttrib(elm, attrib, value) {

+	var formObj = document.forms[0];

+	var valueElm = formObj.elements[attrib.toLowerCase()];

+	tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);

+}

+

+function setAllCommonAttribs(elm) {

+	setAttrib(elm, 'title');

+	setAttrib(elm, 'id');

+	setAttrib(elm, 'class');

+	setAttrib(elm, 'style');

+	setAttrib(elm, 'dir');

+	setAttrib(elm, 'lang');

+	/*setAttrib(elm, 'onfocus');

+	setAttrib(elm, 'onblur');

+	setAttrib(elm, 'onclick');

+	setAttrib(elm, 'ondblclick');

+	setAttrib(elm, 'onmousedown');

+	setAttrib(elm, 'onmouseup');

+	setAttrib(elm, 'onmouseover');

+	setAttrib(elm, 'onmousemove');

+	setAttrib(elm, 'onmouseout');

+	setAttrib(elm, 'onkeypress');

+	setAttrib(elm, 'onkeydown');

+	setAttrib(elm, 'onkeyup');*/

+}

+

+SXE = {

+	currentAction : "insert",

+	inst : tinyMCEPopup.editor,

+	updateElement : null

+}

+

+SXE.focusElement = SXE.inst.selection.getNode();

+

+SXE.initElementDialog = function(element_name) {

+	addClassesToList('class', 'xhtmlxtras_styles');

+	TinyMCE_EditableSelects.init();

+

+	element_name = element_name.toLowerCase();

+	var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());

+	if (elm != null && elm.nodeName.toUpperCase() == element_name.toUpperCase()) {

+		SXE.currentAction = "update";

+	}

+

+	if (SXE.currentAction == "update") {

+		initCommonAttributes(elm);

+		SXE.updateElement = elm;

+	}

+

+	document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true); 

+}

+

+SXE.insertElement = function(element_name) {

+	var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;

+

+	if (elm == null) {

+		var s = SXE.inst.selection.getContent();

+		if(s.length > 0) {

+			tagName = element_name;

+

+			insertInlineElement(element_name);

+			var elementArray = tinymce.grep(SXE.inst.dom.select(element_name));

+			for (var i=0; i<elementArray.length; i++) {

+				var elm = elementArray[i];

+

+				if (SXE.inst.dom.getAttrib(elm, 'data-mce-new')) {

+					elm.id = '';

+					elm.setAttribute('id', '');

+					elm.removeAttribute('id');

+					elm.removeAttribute('data-mce-new');

+

+					setAllCommonAttribs(elm);

+				}

+			}

+		}

+	} else {

+		setAllCommonAttribs(elm);

+	}

+	SXE.inst.nodeChanged();

+	tinyMCEPopup.execCommand('mceEndUndoLevel');

+}

+

+SXE.removeElement = function(element_name){

+	element_name = element_name.toLowerCase();

+	elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());

+	if(elm && elm.nodeName.toUpperCase() == element_name.toUpperCase()){

+		tinyMCE.execCommand('mceRemoveNode', false, elm);

+		SXE.inst.nodeChanged();

+		tinyMCEPopup.execCommand('mceEndUndoLevel');

+	}

+}

+

+SXE.showRemoveButton = function() {

+		document.getElementById("remove").style.display = '';

+}

+

+SXE.containsClass = function(elm,cl) {

+	return (elm.className.indexOf(cl) > -1) ? true : false;

+}

+

+SXE.removeClass = function(elm,cl) {

+	if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {

+		return true;

+	}

+	var classNames = elm.className.split(" ");

+	var newClassNames = "";

+	for (var x = 0, cnl = classNames.length; x < cnl; x++) {

+		if (classNames[x] != cl) {

+			newClassNames += (classNames[x] + " ");

+		}

+	}

+	elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end

+}

+

+SXE.addClass = function(elm,cl) {

+	if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;

+	return true;

+}

+

+function insertInlineElement(en) {

+	var ed = tinyMCEPopup.editor, dom = ed.dom;

+

+	ed.getDoc().execCommand('FontName', false, 'mceinline');

+	tinymce.each(dom.select('span,font'), function(n) {

+		if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')

+			dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1);

+	});

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js
@@ -1,1 +1,54 @@
+/**

+ * ins.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+function init() {

+	SXE.initElementDialog('ins');

+	if (SXE.currentAction == "update") {

+		setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));

+		setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));

+		SXE.showRemoveButton();

+	}

+}

+

+function setElementAttribs(elm) {

+	setAllCommonAttribs(elm);

+	setAttrib(elm, 'datetime');

+	setAttrib(elm, 'cite');

+	elm.removeAttribute('data-mce-new');

+}

+

+function insertIns() {

+	var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');

+

+	if (elm == null) {

+		var s = SXE.inst.selection.getContent();

+		if(s.length > 0) {

+			insertInlineElement('ins');

+			var elementArray = SXE.inst.dom.select('ins[data-mce-new]');

+			for (var i=0; i<elementArray.length; i++) {

+				var elm = elementArray[i];

+				setElementAttribs(elm);

+			}

+		}

+	} else {

+		setElementAttribs(elm);

+	}

+	tinyMCEPopup.editor.nodeChanged();

+	tinyMCEPopup.execCommand('mceEndUndoLevel');

+	tinyMCEPopup.close();

+}

+

+function removeIns() {

+	SXE.removeElement('ins');

+	tinyMCEPopup.close();

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/zoom/editor_plugin.js
@@ -1,1 +1,1 @@
-
+var TinyMCE_ZoomPlugin={getInfo:function(){return{longname:'Zoom',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/zoom',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(control_name){if(!tinyMCE.isMSIE||tinyMCE.isMSIE5_0||tinyMCE.isOpera)return"";switch(control_name){case"zoom":return'<select id="{$editor_id}_zoomSelect" name="{$editor_id}_zoomSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceZoom\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+'<option value="100%">+ 100%</option>'+'<option value="150%">+ 150%</option>'+'<option value="200%">+ 200%</option>'+'<option value="250%">+ 250%</option>'+'</select>'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceZoom":tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom=value;tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom=value;return true}return false}};tinyMCE.addPlugin("zoom",TinyMCE_ZoomPlugin);

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/zoom/editor_plugin_src.js
@@ -1,1 +1,57 @@
+/**

+ * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $

+ *

+ * @author Moxiecode


+ */

+

+var TinyMCE_ZoomPlugin = {

+	getInfo : function() {

+		return {

+			longname : 'Zoom',

+			author : 'Moxiecode Systems AB',

+			authorurl : 'http://tinymce.moxiecode.com',

+			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/zoom',

+			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion

+		};

+	},

+

+	/**

+	 * Returns the HTML contents of the zoom control.

+	 */

+	getControlHTML : function(control_name) {

+		if (!tinyMCE.isMSIE || tinyMCE.isMSIE5_0 || tinyMCE.isOpera)

+			return "";

+

+		switch (control_name) {

+			case "zoom":

+				return '<select id="{$editor_id}_zoomSelect" name="{$editor_id}_zoomSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceZoom\',false,this.options[this.selectedIndex].value);" class="mceSelectList">' + 

+						'<option value="100%">+ 100%</option>' + 

+						'<option value="150%">+ 150%</option>' + 

+						'<option value="200%">+ 200%</option>' + 

+						'<option value="250%">+ 250%</option>' + 

+						'</select>';

+		}

+

+		return "";

+	},

+

+	/**

+	 * Executes the mceZoom command.

+	 */

+	execCommand : function(editor_id, element, command, user_interface, value) {

+		// Handle commands

+		switch (command) {

+			case "mceZoom":

+				tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom = value;

+				tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom = value;

+				return true;

+		}

+

+		// Pass to next handler in chain

+		return false;

+	}

+};

+

+tinyMCE.addPlugin("zoom", TinyMCE_ZoomPlugin);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/plugins/zoom/readme.txt
@@ -1,1 +1,2 @@
+Check the TinyMCE documentation for details on this plugin.

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/about.htm
@@ -1,1 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advanced_dlg.about_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="js/about.js"></script>

+</head>

+<body id="about" style="display: none">

+		<div class="tabs">

+			<ul>

+				<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>

+				<li id="help_tab" style="display:none" aria-hidden="true" aria-controls="help_panel"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>

+				<li id="plugins_tab" aria-controls="plugins_panel"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>

+			</ul>

+		</div>

+

+		<div class="panel_wrapper">

+			<div id="general_panel" class="panel current">

+				<h3>{#advanced_dlg.about_title}</h3>

+				<p>Version: <span id="version"></span> (<span id="date"></span>)</p>

+				<p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>

+				by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>

+				<p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>

+				<p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>

+

+				<div id="buttoncontainer">

+					<a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>

+				</div>

+			</div>

+

+			<div id="plugins_panel" class="panel">

+				<div id="pluginscontainer">

+					<h3>{#advanced_dlg.about_loaded}</h3>

+

+					<div id="plugintablecontainer">

+					</div>

+

+					<p>&nbsp;</p>

+				</div>

+			</div>

+

+			<div id="help_panel" class="panel noscroll" style="overflow: visible;">

+				<div id="iframecontainer"></div>

+			</div>

+		</div>

+

+		<div class="mceActionPanel">

+			<input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />

+		</div>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/anchor.htm
@@ -1,1 +1,27 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advanced_dlg.anchor_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/anchor.js"></script>

+</head>

+<body style="display: none" role="application" aria-labelledby="app_title">

+<form onsubmit="AnchorDialog.update();return false;" action="#">

+	<table border="0" cellpadding="4" cellspacing="0" role="presentation">

+		<tr>

+			<td colspan="2" class="title" id="app_title">{#advanced_dlg.anchor_title}</td>

+		</tr>

+		<tr>

+			<td class="nowrap"><label for="anchorName">{#advanced_dlg.anchor_name}:</label></td>

+			<td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" aria-required="true" /></td>

+		</tr>

+	</table>

+

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#update}" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/charmap.htm
@@ -1,1 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advanced_dlg.charmap_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/charmap.js"></script>

+</head>

+<body id="charmap" style="display:none" role="application">

+<table align="center" border="0" cellspacing="0" cellpadding="2" role="presentation">

+	<tr>

+		<td colspan="2" class="title" ><label for="charmapView" id="charmap_label">{#advanced_dlg.charmap_title}</label></td>

+	</tr>

+	<tr>

+		<td id="charmapView" rowspan="2" align="left" valign="top">

+			<!-- Chars will be rendered here -->

+		</td>

+		<td width="100" align="center" valign="top">

+			<table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px" role="presentation">

+				<tr>

+					<td id="codeV">&nbsp;</td>

+				</tr>

+				<tr>

+					<td id="codeN">&nbsp;</td>

+				</tr>

+			</table>

+		</td>

+	</tr>

+	<tr>

+		<td valign="bottom" style="padding-bottom: 3px;">

+			<table width="100" align="center" border="0" cellpadding="2" cellspacing="0" role="presentation">

+				<tr>

+					<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;"><label for="codeA">HTML-Code</label></td>

+				</tr>

+				<tr>

+					<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeA" align="center">&nbsp;</td>

+				</tr>

+				<tr>

+					<td style="font-size: 1px;">&nbsp;</td>

+				</tr>

+				<tr>

+					<td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;"><label for="codeB">NUM-Code</label></td>

+				</tr>

+				<tr>

+					<td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeB" align="center">&nbsp;</td>

+				</tr>

+			</table>

+		</td>

+	</tr>

+	<tr>

+		<td colspan="2" id="charmap_usage">{#advanced_dlg.charmap_usage}</td>

+	</tr>

+	

+</table>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/color_picker.htm
@@ -1,1 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advanced_dlg.colorpicker_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="js/color_picker.js"></script>

+</head>

+<body id="colorpicker" style="display: none" role="application" aria-labelledby="app_label">

+	<span class="mceVoiceLabel" id="app_label" style="display:none;">{#advanced_dlg.colorpicker_title}</span>

+<form onsubmit="insertAction();return false" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="picker_tab" aria-controls="picker_panel" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>

+			<li id="rgb_tab" aria-controls="rgb_panel"><span><a href="javascript:;" onclick="mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>

+			<li id="named_tab" aria-controls="named_panel"><span><a  href="javascript:;" onclick="javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="picker_panel" class="panel current">

+			<fieldset>

+				<legend>{#advanced_dlg.colorpicker_picker_title}</legend>

+				<div id="picker">

+					<img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt="" />

+

+					<div id="light">

+						<!-- Will be filled with divs -->

+					</div>

+

+					<br style="clear: both" />

+				</div>

+			</fieldset>

+		</div>

+

+		<div id="rgb_panel" class="panel">

+			<fieldset>

+				<legend id="webcolors_title">{#advanced_dlg.colorpicker_palette_title}</legend>

+				<div id="webcolors">

+					<!-- Gets filled with web safe colors-->

+				</div>

+

+				<br style="clear: both" />

+			</fieldset>

+		</div>

+

+		<div id="named_panel" class="panel">

+			<fieldset id="named_picker_label">

+				<legend id="named_title">{#advanced_dlg.colorpicker_named_title}</legend>

+				<div id="namedcolors" role="listbox" tabindex="0" aria-labelledby="named_picker_label">

+					<!-- Gets filled with named colors-->

+				</div>

+

+				<br style="clear: both" />

+

+				<div id="colornamecontainer">

+					{#advanced_dlg.colorpicker_name} <span id="colorname"></span>

+				</div>

+			</fieldset>

+		</div>

+	</div>

+

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#apply}" />

+

+		<div id="preview"></div>

+

+		<div id="previewblock">

+			<label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" class="text mceFocus" aria-required="true" />

+		</div>

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template.js
@@ -1,1 +1,1 @@
-
+(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);j.forcedHighContrastMode=j.settings.detect_highcontrast&&l._isHighContrast();j.settings.skin=j.forcedHighContrastMode?"highcontrast":j.settings.skin;l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}if(j.settings.content_css!==false){j.contentCSS.push(j.baseURI.toAbsolute(k+"/skins/"+j.settings.skin+"/content.css"))}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l);j.onKeyUp.add(l._updateUndoStatus,l);j.onMouseUp.add(l._updateUndoStatus,l);j.dom.bind(j.dom.getRoot(),"dragend",function(){l._updateUndoStatus(j)})}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},_isHighContrast:function(){var i,j=d.add(d.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});i=(d.getStyle(j,"background-color",true)+"").toLowerCase().replace(/ /g,"");d.remove(j);return i!="rgb(171,239,86)"&&i!="#abef56"},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){if(p[0]){i.formatter.remove(p[0])}}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});if(m&&m.value==l){k.select(null)}return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});if(o&&(o.value.fontSize==i.fontSize||o.value["class"]&&o.value["class"]==i["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(l){j.editor.execCommand("FormatBlock",false,l);return false}});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;if(r.settings){r.settings.aria_label=w.aria_label+r.getLang("advanced.help_shortcut")}m=j=d.create("span",{role:"application","aria-labelledby":r.id+"_voice",id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});d.add(m,"span",{"class":"mceVoiceLabel",style:"display:none;",id:r.id+"_voice"},w.aria_label);if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{role:"presentation",id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;r.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(e.isWebKit){window.focus()}v.toolbarGroup.focus();return b.cancel(n)}else{if(n.keyCode===o){d.get(p.id+"_path_row").focus();return b.cancel(n)}}}});r.addShortcut("alt+0","","mceShortcuts",v);return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_ifr");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,m,k){var j=this.editor,l=this.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr");i=Math.max(l.theme_advanced_resizing_min_width||100,i);m=Math.max(l.theme_advanced_resizing_min_height||100,m);i=Math.min(l.theme_advanced_resizing_max_width||65535,i);m=Math.min(l.theme_advanced_resizing_max_height||65535,m);d.setStyle(n,"height","");d.setStyle(o,"height",m);if(l.theme_advanced_resize_horizontal){d.setStyle(n,"width","");d.setStyle(o,"width",i);if(i<n.clientWidth){i=n.clientWidth;d.setStyle(o,"width",n.clientWidth)}}if(k&&l.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+j.id+"_size",{cw:i,ch:m})}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(x,k){var A=this,p,m,r=A.editor,B=A.settings,z,j=r.controlManager,u,l,q=[],y,w;w=j.createToolbarGroup("toolbargroup",{name:r.getLang("advanced.toolbar"),tab_focus_toolbar:r.getParam("theme_advanced_tab_focus_toolbar")});A.toolbarGroup=w;y=B.theme_advanced_toolbar_align.toLowerCase();y="mce"+A._ufirst(y);l=d.add(d.add(x,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+y,role:"presentation"});for(p=1;(z=B["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(B["theme_advanced_buttons"+p+"_add"]){z+=","+B["theme_advanced_buttons"+p+"_add"]}if(B["theme_advanced_buttons"+p+"_add_before"]){z=B["theme_advanced_buttons"+p+"_add_before"]+","+z}A._addControls(z,m);w.add(m);k.deltaHeight-=B.theme_advanced_row_height}q.push(w.renderHTML());q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row",role:"group","aria-labelledby":p.id+"_path_voice"});if(w.theme_advanced_path){d.add(k,"span",{id:p.id+"_path_voice"},p.translate("advanced.path"));d.add(k,"span",{},": ")}else{d.add(k,"span",{},"&#160;")}if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","click",function(n){n.preventDefault()});b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){G.preventDefault();n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E,true)}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_updateUndoStatus:function(j){var i=j.controlManager,k=j.undoManager;i.setDisabled("undo",!k.hasUndo()&&!k.typing);i.setDisabled("redo",!k.hasRedo())},_nodeChanged:function(m,r,D,q,E){var y=this,C,F=0,x,G,z=y.settings,w,k,u,B,l,j,i;e.each(y.stateControls,function(n){r.setActive(n,m.queryCommandState(y.controls[n][1]))});function o(p){var s,n=E.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}r.setActive("visualaid",m.hasVisual);y._updateUndoStatus(m);r.setDisabled("outdent",!m.queryCommandState("Outdent"));C=o("A");if(G=r.get("link")){if(!C||!C.name){G.setDisabled(!C&&q);G.setActive(!!C)}}if(G=r.get("unlink")){G.setDisabled(!C&&q);G.setActive(!!C&&!C.name)}if(G=r.get("anchor")){G.setActive(!q&&!!C&&C.name)}C=o("IMG");if(G=r.get("image")){G.setActive(!q&&!!C&&D.className.indexOf("mceItem")==-1)}if(G=r.get("styleselect")){y._importClasses();j=[];f(G.items,function(n){j.push(n.value)});i=m.formatter.matchAll(j);G.select(i[0])}if(G=r.get("formatselect")){C=o(d.isBlock);if(C){G.select(C.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!w&&p.className){w=p.className}}if(m.dom.is(p,z.theme_advanced_font_selector)){if(!k&&p.style.fontSize){k=p.style.fontSize}if(!u&&p.style.fontFamily){u=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!B&&p.style.color){B=p.style.color}if(!l&&p.style.backgroundColor){l=p.style.backgroundColor}}return false});if(G=r.get("fontselect")){G.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==u})}if(G=r.get("fontsizeselect")){if(z.theme_advanced_runtime_fontsize&&!k&&!w){k=m.dom.getStyle(D,"fontSize",true)}G.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===w){return true}})}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_show_current_color){function A(p,n){if(G=r.get(p)){if(!n){n=G.settings.default_color}if(n!==G.value){G.displayColor(n)}}}A("forecolor",B);A("backcolor",l)}if(z.theme_advanced_path&&z.theme_advanced_statusbar_location){C=d.get(m.id+"_path")||d.add(m.id+"_path_row","span",{id:m.id+"_path"});if(y.statusKeyboardNavigation){y.statusKeyboardNavigation.destroy();y.statusKeyboardNavigation=null}d.setHTML(C,"");o(function(H){var p=H.nodeName.toLowerCase(),s,v,t="";if(H.nodeType!=1||p==="br"||H.getAttribute("data-mce-bogus")||d.hasClass(H,"mceItemHidden")||d.hasClass(H,"mceItemRemoved")){return}if(e.isIE&&H.scopeName!=="HTML"){p=H.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(x=d.getAttrib(H,"src")){t+="src: "+x+" "}break;case"a":if(x=d.getAttrib(H,"name")){t+="name: "+x+" ";p+="#"+x}if(x=d.getAttrib(H,"href")){t+="href: "+x+" "}break;case"font":if(x=d.getAttrib(H,"face")){t+="font: "+x+" "}if(x=d.getAttrib(H,"size")){t+="size: "+x+" "}if(x=d.getAttrib(H,"color")){t+="color: "+x+" "}break;case"span":if(x=d.getAttrib(H,"style")){t+="style: "+x+" "}break}if(x=d.getAttrib(H,"id")){t+="id: "+x+" "}if(x=H.className){x=x.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(x){t+="class: "+x+" ";if(d.isBlock(H)||p=="img"||p=="span"){p+="."+x}}}p=p.replace(/(html:)/g,"");p={name:p,node:H,title:t};y.onResolveName.dispatch(y,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(F++)},p);if(C.hasChildNodes()){C.insertBefore(d.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),C.firstChild);C.insertBefore(v,C.firstChild)}else{C.appendChild(v)}},m.getBody());if(d.select("a",C).length>0){y.statusKeyboardNavigation=new e.ui.KeyboardNavigation({root:m.id+"_path_row",items:d.select("a",C),excludeFromTabOrder:true,onCancel:function(){m.focus()}},d)}}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var i=this.editor;i.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce));

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/editor_template_src.js
@@ -1,1 +1,1363 @@
+/**

+ * editor_template_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function(tinymce) {

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;

+

+	// Tell it to load theme specific language pack(s)

+	tinymce.ThemeManager.requireLangPack('advanced');

+

+	tinymce.create('tinymce.themes.AdvancedTheme', {

+		sizes : [8, 10, 12, 14, 18, 24, 36],

+

+		// Control name lookup, format: title, command

+		controls : {

+			bold : ['bold_desc', 'Bold'],

+			italic : ['italic_desc', 'Italic'],

+			underline : ['underline_desc', 'Underline'],

+			strikethrough : ['striketrough_desc', 'Strikethrough'],

+			justifyleft : ['justifyleft_desc', 'JustifyLeft'],

+			justifycenter : ['justifycenter_desc', 'JustifyCenter'],

+			justifyright : ['justifyright_desc', 'JustifyRight'],

+			justifyfull : ['justifyfull_desc', 'JustifyFull'],

+			bullist : ['bullist_desc', 'InsertUnorderedList'],

+			numlist : ['numlist_desc', 'InsertOrderedList'],

+			outdent : ['outdent_desc', 'Outdent'],

+			indent : ['indent_desc', 'Indent'],

+			cut : ['cut_desc', 'Cut'],

+			copy : ['copy_desc', 'Copy'],

+			paste : ['paste_desc', 'Paste'],

+			undo : ['undo_desc', 'Undo'],

+			redo : ['redo_desc', 'Redo'],

+			link : ['link_desc', 'mceLink'],

+			unlink : ['unlink_desc', 'unlink'],

+			image : ['image_desc', 'mceImage'],

+			cleanup : ['cleanup_desc', 'mceCleanup'],

+			help : ['help_desc', 'mceHelp'],

+			code : ['code_desc', 'mceCodeEditor'],

+			hr : ['hr_desc', 'InsertHorizontalRule'],

+			removeformat : ['removeformat_desc', 'RemoveFormat'],

+			sub : ['sub_desc', 'subscript'],

+			sup : ['sup_desc', 'superscript'],

+			forecolor : ['forecolor_desc', 'ForeColor'],

+			forecolorpicker : ['forecolor_desc', 'mceForeColor'],

+			backcolor : ['backcolor_desc', 'HiliteColor'],

+			backcolorpicker : ['backcolor_desc', 'mceBackColor'],

+			charmap : ['charmap_desc', 'mceCharMap'],

+			visualaid : ['visualaid_desc', 'mceToggleVisualAid'],

+			anchor : ['anchor_desc', 'mceInsertAnchor'],

+			newdocument : ['newdocument_desc', 'mceNewDocument'],

+			blockquote : ['blockquote_desc', 'mceBlockQuote']

+		},

+

+		stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'],

+

+		init : function(ed, url) {

+			var t = this, s, v, o;

+	

+			t.editor = ed;

+			t.url = url;

+			t.onResolveName = new tinymce.util.Dispatcher(this);

+

+			ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast();

+			ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin;

+

+			// Default settings

+			t.settings = s = extend({

+				theme_advanced_path : true,

+				theme_advanced_toolbar_location : 'bottom',

+				theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",

+				theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",

+				theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap",

+				theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",

+				theme_advanced_toolbar_align : "center",

+				theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",

+				theme_advanced_more_colors : 1,

+				theme_advanced_row_height : 23,

+				theme_advanced_resize_horizontal : 1,

+				theme_advanced_resizing_use_cookie : 1,

+				theme_advanced_font_sizes : "1,2,3,4,5,6,7",

+				theme_advanced_font_selector : "span",

+				theme_advanced_show_current_color: 0,

+				readonly : ed.settings.readonly

+			}, ed.settings);

+

+			// Setup default font_size_style_values

+			if (!s.font_size_style_values)

+				s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt";

+

+			if (tinymce.is(s.theme_advanced_font_sizes, 'string')) {

+				s.font_size_style_values = tinymce.explode(s.font_size_style_values);

+				s.font_size_classes = tinymce.explode(s.font_size_classes || '');

+

+				// Parse string value

+				o = {};

+				ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes;

+				each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) {

+					var cl;

+

+					if (k == v && v >= 1 && v <= 7) {

+						k = v + ' (' + t.sizes[v - 1] + 'pt)';

+						cl = s.font_size_classes[v - 1];

+						v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt');

+					}

+

+					if (/^\s*\./.test(v))

+						cl = v.replace(/\./g, '');

+

+					o[k] = cl ? {'class' : cl} : {fontSize : v};

+				});

+

+				s.theme_advanced_font_sizes = o;

+			}

+

+			if ((v = s.theme_advanced_path_location) && v != 'none')

+				s.theme_advanced_statusbar_location = s.theme_advanced_path_location;

+

+			if (s.theme_advanced_statusbar_location == 'none')

+				s.theme_advanced_statusbar_location = 0;

+

+			if (ed.settings.content_css !== false)

+				ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css"));

+

+			// Init editor

+			ed.onInit.add(function() {

+				if (!ed.settings.readonly) {

+					ed.onNodeChange.add(t._nodeChanged, t);

+					ed.onKeyUp.add(t._updateUndoStatus, t);

+					ed.onMouseUp.add(t._updateUndoStatus, t);

+					ed.dom.bind(ed.dom.getRoot(), 'dragend', function() {

+						t._updateUndoStatus(ed);

+					});

+				}

+			});

+

+			ed.onSetProgressState.add(function(ed, b, ti) {

+				var co, id = ed.id, tb;

+

+				if (b) {

+					t.progressTimer = setTimeout(function() {

+						co = ed.getContainer();

+						co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);

+						tb = DOM.get(ed.id + '_tbl');

+

+						DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});

+						DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});

+					}, ti || 0);

+				} else {

+					DOM.remove(id + '_blocker');

+					DOM.remove(id + '_progress');

+					clearTimeout(t.progressTimer);

+				}

+			});

+

+			DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css");

+

+			if (s.skin_variant)

+				DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css");

+		},

+

+		_isHighContrast : function() {

+			var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'});

+

+			actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, '');

+			DOM.remove(div);

+

+			return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56';

+		},

+

+		createControl : function(n, cf) {

+			var cd, c;

+

+			if (c = cf.createControl(n))

+				return c;

+

+			switch (n) {

+				case "styleselect":

+					return this._createStyleSelect();

+

+				case "formatselect":

+					return this._createBlockFormats();

+

+				case "fontselect":

+					return this._createFontSelect();

+

+				case "fontsizeselect":

+					return this._createFontSizeSelect();

+

+				case "forecolor":

+					return this._createForeColorMenu();

+

+				case "backcolor":

+					return this._createBackColorMenu();

+			}

+

+			if ((cd = this.controls[n]))

+				return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});

+		},

+

+		execCommand : function(cmd, ui, val) {

+			var f = this['_' + cmd];

+

+			if (f) {

+				f.call(this, ui, val);

+				return true;

+			}

+

+			return false;

+		},

+

+		_importClasses : function(e) {

+			var ed = this.editor, ctrl = ed.controlManager.get('styleselect');

+

+			if (ctrl.getLength() == 0) {

+				each(ed.dom.getClasses(), function(o, idx) {

+					var name = 'style_' + idx;

+

+					ed.formatter.register(name, {

+						inline : 'span',

+						attributes : {'class' : o['class']},

+						selector : '*'

+					});

+

+					ctrl.add(o['class'], name);

+				});

+			}

+		},

+

+		_createStyleSelect : function(n) {

+			var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl;

+

+			// Setup style select box

+			ctrl = ctrlMan.createListBox('styleselect', {

+				title : 'advanced.style_select',

+				onselect : function(name) {

+					var matches, formatNames = [];

+

+					each(ctrl.items, function(item) {

+						formatNames.push(item.value);

+					});

+

+					ed.focus();

+					ed.undoManager.add();

+

+					// Toggle off the current format

+					matches = ed.formatter.matchAll(formatNames);

+					if (!name || matches[0] == name) {

+						if (matches[0]) 

+							ed.formatter.remove(matches[0]);

+					} else

+						ed.formatter.apply(name);

+

+					ed.undoManager.add();

+					ed.nodeChanged();

+

+					return false; // No auto select

+				}

+			});

+

+			// Handle specified format

+			ed.onInit.add(function() {

+				var counter = 0, formats = ed.getParam('style_formats');

+

+				if (formats) {

+					each(formats, function(fmt) {

+						var name, keys = 0;

+

+						each(fmt, function() {keys++;});

+

+						if (keys > 1) {

+							name = fmt.name = fmt.name || 'style_' + (counter++);

+							ed.formatter.register(name, fmt);

+							ctrl.add(fmt.title, name);

+						} else

+							ctrl.add(fmt.title);

+					});

+				} else {

+					each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) {

+						var name;

+

+						if (val) {

+							name = 'style_' + (counter++);

+

+							ed.formatter.register(name, {

+								inline : 'span',

+								classes : val,

+								selector : '*'

+							});

+

+							ctrl.add(t.editor.translate(key), name);

+						}

+					});

+				}

+			});

+

+			// Auto import classes if the ctrl box is empty

+			if (ctrl.getLength() == 0) {

+				ctrl.onPostRender.add(function(ed, n) {

+					if (!ctrl.NativeListBox) {

+						Event.add(n.id + '_text', 'focus', t._importClasses, t);

+						Event.add(n.id + '_text', 'mousedown', t._importClasses, t);

+						Event.add(n.id + '_open', 'focus', t._importClasses, t);

+						Event.add(n.id + '_open', 'mousedown', t._importClasses, t);

+					} else

+						Event.add(n.id, 'focus', t._importClasses, t);

+				});

+			}

+

+			return ctrl;

+		},

+

+		_createFontSelect : function() {

+			var c, t = this, ed = t.editor;

+

+			c = ed.controlManager.createListBox('fontselect', {

+				title : 'advanced.fontdefault',

+				onselect : function(v) {

+					var cur = c.items[c.selectedIndex];

+

+					if (!v && cur) {

+						ed.execCommand('FontName', false, cur.value);

+						return;

+					}

+

+					ed.execCommand('FontName', false, v);

+

+					// Fake selection, execCommand will fire a nodeChange and update the selection

+					c.select(function(sv) {

+						return v == sv;

+					});

+

+					if (cur && cur.value == v) {

+						c.select(null);

+					}

+

+					return false; // No auto select

+				}

+			});

+

+			if (c) {

+				each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {

+					c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});

+				});

+			}

+

+			return c;

+		},

+

+		_createFontSizeSelect : function() {

+			var t = this, ed = t.editor, c, i = 0, cl = [];

+

+			c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {

+				var cur = c.items[c.selectedIndex];

+

+				if (!v && cur) {

+					cur = cur.value;

+

+					if (cur['class']) {

+						ed.formatter.toggle('fontsize_class', {value : cur['class']});

+						ed.undoManager.add();

+						ed.nodeChanged();

+					} else {

+						ed.execCommand('FontSize', false, cur.fontSize);

+					}

+

+					return;

+				}

+

+				if (v['class']) {

+					ed.focus();

+					ed.undoManager.add();

+					ed.formatter.toggle('fontsize_class', {value : v['class']});

+					ed.undoManager.add();

+					ed.nodeChanged();

+				} else

+					ed.execCommand('FontSize', false, v.fontSize);

+

+				// Fake selection, execCommand will fire a nodeChange and update the selection

+				c.select(function(sv) {

+					return v == sv;

+				});

+

+				if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] && cur.value['class'] == v['class'])) {

+					c.select(null);

+				}

+

+				return false; // No auto select

+			}});

+

+			if (c) {

+				each(t.settings.theme_advanced_font_sizes, function(v, k) {

+					var fz = v.fontSize;

+

+					if (fz >= 1 && fz <= 7)

+						fz = t.sizes[parseInt(fz) - 1] + 'pt';

+

+					c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))});

+				});

+			}

+

+			return c;

+		},

+

+		_createBlockFormats : function() {

+			var c, fmts = {

+				p : 'advanced.paragraph',

+				address : 'advanced.address',

+				pre : 'advanced.pre',

+				h1 : 'advanced.h1',

+				h2 : 'advanced.h2',

+				h3 : 'advanced.h3',

+				h4 : 'advanced.h4',

+				h5 : 'advanced.h5',

+				h6 : 'advanced.h6',

+				div : 'advanced.div',

+				blockquote : 'advanced.blockquote',

+				code : 'advanced.code',

+				dt : 'advanced.dt',

+				dd : 'advanced.dd',

+				samp : 'advanced.samp'

+			}, t = this;

+

+			c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) {

+				t.editor.execCommand('FormatBlock', false, v);

+				return false;

+			}});

+

+			if (c) {

+				each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {

+					c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});

+				});

+			}

+

+			return c;

+		},

+

+		_createForeColorMenu : function() {

+			var c, t = this, s = t.settings, o = {}, v;

+

+			if (s.theme_advanced_more_colors) {

+				o.more_colors_func = function() {

+					t._mceColorPicker(0, {

+						color : c.value,

+						func : function(co) {

+							c.setColor(co);

+						}

+					});

+				};

+			}

+

+			if (v = s.theme_advanced_text_colors)

+				o.colors = v;

+

+			if (s.theme_advanced_default_foreground_color)

+				o.default_color = s.theme_advanced_default_foreground_color;

+

+			o.title = 'advanced.forecolor_desc';

+			o.cmd = 'ForeColor';

+			o.scope = this;

+

+			c = t.editor.controlManager.createColorSplitButton('forecolor', o);

+

+			return c;

+		},

+

+		_createBackColorMenu : function() {

+			var c, t = this, s = t.settings, o = {}, v;

+

+			if (s.theme_advanced_more_colors) {

+				o.more_colors_func = function() {

+					t._mceColorPicker(0, {

+						color : c.value,

+						func : function(co) {

+							c.setColor(co);

+						}

+					});

+				};

+			}

+

+			if (v = s.theme_advanced_background_colors)

+				o.colors = v;

+

+			if (s.theme_advanced_default_background_color)

+				o.default_color = s.theme_advanced_default_background_color;

+

+			o.title = 'advanced.backcolor_desc';

+			o.cmd = 'HiliteColor';

+			o.scope = this;

+

+			c = t.editor.controlManager.createColorSplitButton('backcolor', o);

+

+			return c;

+		},

+

+		renderUI : function(o) {

+			var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;

+

+			if (ed.settings) {

+				ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut');

+			}

+

+			// TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for.

+			// Maybe actually inherit it from the original textara?

+			n = p = DOM.create('span', {role : 'application', 'aria-labelledby' : ed.id + '_voice', id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});

+			DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label);

+

+			if (!DOM.boxModel)

+				n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});

+

+			n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});

+			n = tb = DOM.add(n, 'tbody');

+

+			switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {

+				case "rowlayout":

+					ic = t._rowLayout(s, tb, o);

+					break;

+

+				case "customlayout":

+					ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);

+					break;

+

+				default:

+					ic = t._simpleLayout(s, tb, o, p);

+			}

+

+			n = o.targetNode;

+

+			// Add classes to first and last TRs

+			nl = sc.rows;

+			DOM.addClass(nl[0], 'mceFirst');

+			DOM.addClass(nl[nl.length - 1], 'mceLast');

+

+			// Add classes to first and last TDs

+			each(DOM.select('tr', tb), function(n) {

+				DOM.addClass(n.firstChild, 'mceFirst');

+				DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');

+			});

+

+			if (DOM.get(s.theme_advanced_toolbar_container))

+				DOM.get(s.theme_advanced_toolbar_container).appendChild(p);

+			else

+				DOM.insertAfter(p, n);

+

+			Event.add(ed.id + '_path_row', 'click', function(e) {

+				e = e.target;

+

+				if (e.nodeName == 'A') {

+					t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));

+

+					return Event.cancel(e);

+				}

+			});

+/*

+			if (DOM.get(ed.id + '_path_row')) {

+				Event.add(ed.id + '_tbl', 'mouseover', function(e) {

+					var re;

+	

+					e = e.target;

+

+					if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {

+						re = DOM.get(ed.id + '_path_row');

+						t.lastPath = re.innerHTML;

+						DOM.setHTML(re, e.parentNode.title);

+					}

+				});

+

+				Event.add(ed.id + '_tbl', 'mouseout', function(e) {

+					if (t.lastPath) {

+						DOM.setHTML(ed.id + '_path_row', t.lastPath);

+						t.lastPath = 0;

+					}

+				});

+			}

+*/

+

+			if (!ed.getParam('accessibility_focus'))

+				Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});

+

+			if (s.theme_advanced_toolbar_location == 'external')

+				o.deltaHeight = 0;

+

+			t.deltaHeight = o.deltaHeight;

+			o.targetNode = null;

+

+			ed.onKeyDown.add(function(ed, evt) {

+				var DOM_VK_F10 = 121, DOM_VK_F11 = 122;

+

+				if (evt.altKey) {

+		 			if (evt.keyCode === DOM_VK_F10) {

+						// Make sure focus is given to toolbar in Safari.

+						// We can't do this in IE as it prevents giving focus to toolbar when editor is in a frame

+						if (tinymce.isWebKit) {

+							window.focus();

+						}

+						t.toolbarGroup.focus();

+						return Event.cancel(evt);

+					} else if (evt.keyCode === DOM_VK_F11) {

+						DOM.get(ed.id + '_path_row').focus();

+						return Event.cancel(evt);

+					}

+				}

+			});

+

+			// alt+0 is the UK recommended shortcut for accessing the list of access controls.

+			ed.addShortcut('alt+0', '', 'mceShortcuts', t);

+

+			return {

+				iframeContainer : ic,

+				editorContainer : ed.id + '_parent',

+				sizeContainer : sc,

+				deltaHeight : o.deltaHeight

+			};

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Advanced theme',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			}

+		},

+

+		resizeBy : function(dw, dh) {

+			var e = DOM.get(this.editor.id + '_ifr');

+

+			this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);

+		},

+

+		resizeTo : function(w, h, store) {

+			var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr');

+

+			// Boundery fix box

+			w = Math.max(s.theme_advanced_resizing_min_width || 100, w);

+			h = Math.max(s.theme_advanced_resizing_min_height || 100, h);

+			w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);

+			h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);

+

+			// Resize iframe and container

+			DOM.setStyle(e, 'height', '');

+			DOM.setStyle(ifr, 'height', h);

+

+			if (s.theme_advanced_resize_horizontal) {

+				DOM.setStyle(e, 'width', '');

+				DOM.setStyle(ifr, 'width', w);

+

+				// Make sure that the size is never smaller than the over all ui

+				if (w < e.clientWidth) {

+					w = e.clientWidth;

+					DOM.setStyle(ifr, 'width', e.clientWidth);

+				}

+			}

+

+			// Store away the size

+			if (store && s.theme_advanced_resizing_use_cookie) {

+				Cookie.setHash("TinyMCE_" + ed.id + "_size", {

+					cw : w,

+					ch : h

+				});

+			}

+		},

+

+		destroy : function() {

+			var id = this.editor.id;

+

+			Event.clear(id + '_resize');

+			Event.clear(id + '_path_row');

+			Event.clear(id + '_external_close');

+		},

+

+		// Internal functions

+

+		_simpleLayout : function(s, tb, o, p) {

+			var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;

+

+			if (s.readonly) {

+				n = DOM.add(tb, 'tr');

+				n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});

+				return ic;

+			}

+

+			// Create toolbar container at top

+			if (lo == 'top')

+				t._addToolbars(tb, o);

+

+			// Create external toolbar

+			if (lo == 'external') {

+				n = c = DOM.create('div', {style : 'position:relative'});

+				n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});

+				DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});

+				n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});

+				etb = DOM.add(n, 'tbody');

+

+				if (p.firstChild.className == 'mceOldBoxModel')

+					p.firstChild.appendChild(c);

+				else

+					p.insertBefore(c, p.firstChild);

+

+				t._addToolbars(etb, o);

+

+				ed.onMouseUp.add(function() {

+					var e = DOM.get(ed.id + '_external');

+					DOM.show(e);

+

+					DOM.hide(lastExtID);

+

+					var f = Event.add(ed.id + '_external_close', 'click', function() {

+						DOM.hide(ed.id + '_external');

+						Event.remove(ed.id + '_external_close', 'click', f);

+					});

+

+					DOM.show(e);

+					DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);

+

+					// Fixes IE rendering bug

+					DOM.hide(e);

+					DOM.show(e);

+					e.style.filter = '';

+

+					lastExtID = ed.id + '_external';

+

+					e = null;

+				});

+			}

+

+			if (sl == 'top')

+				t._addStatusBar(tb, o);

+

+			// Create iframe container

+			if (!s.theme_advanced_toolbar_container) {

+				n = DOM.add(tb, 'tr');

+				n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});

+			}

+

+			// Create toolbar container at bottom

+			if (lo == 'bottom')

+				t._addToolbars(tb, o);

+

+			if (sl == 'bottom')

+				t._addStatusBar(tb, o);

+

+			return ic;

+		},

+

+		_rowLayout : function(s, tb, o) {

+			var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;

+

+			dc = s.theme_advanced_containers_default_class || '';

+			da = s.theme_advanced_containers_default_align || 'center';

+

+			each(explode(s.theme_advanced_containers || ''), function(c, i) {

+				var v = s['theme_advanced_container_' + c] || '';

+

+				switch (c.toLowerCase()) {

+					case 'mceeditor':

+						n = DOM.add(tb, 'tr');

+						n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});

+						break;

+

+					case 'mceelementpath':

+						t._addStatusBar(tb, o);

+						break;

+

+					default:

+						a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase();

+						a = 'mce' + t._ufirst(a);

+

+						n = DOM.add(DOM.add(tb, 'tr'), 'td', {

+							'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da

+						});

+

+						to = cf.createToolbar("toolbar" + i);

+						t._addControls(v, to);

+						DOM.setHTML(n, to.renderHTML());

+						o.deltaHeight -= s.theme_advanced_row_height;

+				}

+			});

+

+			return ic;

+		},

+

+		_addControls : function(v, tb) {

+			var t = this, s = t.settings, di, cf = t.editor.controlManager;

+

+			if (s.theme_advanced_disable && !t._disabled) {

+				di = {};

+

+				each(explode(s.theme_advanced_disable), function(v) {

+					di[v] = 1;

+				});

+

+				t._disabled = di;

+			} else

+				di = t._disabled;

+

+			each(explode(v), function(n) {

+				var c;

+

+				if (di && di[n])

+					return;

+

+				// Compatiblity with 2.x

+				if (n == 'tablecontrols') {

+					each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {

+						n = t.createControl(n, cf);

+

+						if (n)

+							tb.add(n);

+					});

+

+					return;

+				}

+

+				c = t.createControl(n, cf);

+

+				if (c)

+					tb.add(c);

+			});

+		},

+

+		_addToolbars : function(c, o) {

+			var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup;

+

+			toolbarGroup = cf.createToolbarGroup('toolbargroup', {

+				'name': ed.getLang('advanced.toolbar'),

+				'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar')

+			});

+

+			t.toolbarGroup = toolbarGroup;

+

+			a = s.theme_advanced_toolbar_align.toLowerCase();

+			a = 'mce' + t._ufirst(a);

+

+			n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"presentation"});

+

+			// Create toolbar and add the controls

+			for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {

+				tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});

+

+				if (s['theme_advanced_buttons' + i + '_add'])

+					v += ',' + s['theme_advanced_buttons' + i + '_add'];

+

+				if (s['theme_advanced_buttons' + i + '_add_before'])

+					v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;

+

+				t._addControls(v, tb);

+				toolbarGroup.add(tb);

+

+				o.deltaHeight -= s.theme_advanced_row_height;

+			}

+			h.push(toolbarGroup.renderHTML());

+			h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));

+			DOM.setHTML(n, h.join(''));

+		},

+

+		_addStatusBar : function(tb, o) {

+			var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;

+

+			n = DOM.add(tb, 'tr');

+			n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); 

+			n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'});

+			if (s.theme_advanced_path) {

+				DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path'));

+				DOM.add(n, 'span', {}, ': ');

+			} else {

+				DOM.add(n, 'span', {}, '&#160;');

+			}

+			

+

+			if (s.theme_advanced_resizing) {

+				DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize', tabIndex:"-1"});

+

+				if (s.theme_advanced_resizing_use_cookie) {

+					ed.onPostRender.add(function() {

+						var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');

+

+						if (!o)

+							return;

+

+						t.resizeTo(o.cw, o.ch);

+					});

+				}

+

+				ed.onPostRender.add(function() {

+					Event.add(ed.id + '_resize', 'click', function(e) {

+						e.preventDefault();

+					});

+

+					Event.add(ed.id + '_resize', 'mousedown', function(e) {

+						var mouseMoveHandler1, mouseMoveHandler2,

+							mouseUpHandler1, mouseUpHandler2,

+							startX, startY, startWidth, startHeight, width, height, ifrElm;

+

+						function resizeOnMove(e) {

+							e.preventDefault();

+

+							width = startWidth + (e.screenX - startX);

+							height = startHeight + (e.screenY - startY);

+

+							t.resizeTo(width, height);

+						};

+

+						function endResize(e) {

+							// Stop listening

+							Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1);

+							Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2);

+							Event.remove(DOM.doc, 'mouseup', mouseUpHandler1);

+							Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2);

+

+							width = startWidth + (e.screenX - startX);

+							height = startHeight + (e.screenY - startY);

+							t.resizeTo(width, height, true);

+						};

+

+						e.preventDefault();

+

+						// Get the current rect size

+						startX = e.screenX;

+						startY = e.screenY;

+						ifrElm = DOM.get(t.editor.id + '_ifr');

+						startWidth = width = ifrElm.clientWidth;

+						startHeight = height = ifrElm.clientHeight;

+

+						// Register envent handlers

+						mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove);

+						mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove);

+						mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize);

+						mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize);

+					});

+				});

+			}

+

+			o.deltaHeight -= 21;

+			n = tb = null;

+		},

+

+		_updateUndoStatus : function(ed) {

+			var cm = ed.controlManager, um = ed.undoManager;

+

+			cm.setDisabled('undo', !um.hasUndo() && !um.typing);

+			cm.setDisabled('redo', !um.hasRedo());

+		},

+

+		_nodeChanged : function(ed, cm, n, co, ob) {

+			var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches;

+

+			tinymce.each(t.stateControls, function(c) {

+				cm.setActive(c, ed.queryCommandState(t.controls[c][1]));

+			});

+

+			function getParent(name) {

+				var i, parents = ob.parents, func = name;

+

+				if (typeof(name) == 'string') {

+					func = function(node) {

+						return node.nodeName == name;

+					};

+				}

+

+				for (i = 0; i < parents.length; i++) {

+					if (func(parents[i]))

+						return parents[i];

+				}

+			};

+

+			cm.setActive('visualaid', ed.hasVisual);

+			t._updateUndoStatus(ed);

+			cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));

+

+			p = getParent('A');

+			if (c = cm.get('link')) {

+				if (!p || !p.name) {

+					c.setDisabled(!p && co);

+					c.setActive(!!p);

+				}

+			}

+

+			if (c = cm.get('unlink')) {

+				c.setDisabled(!p && co);

+				c.setActive(!!p && !p.name);

+			}

+

+			if (c = cm.get('anchor')) {

+				c.setActive(!co && !!p && p.name);

+			}

+

+			p = getParent('IMG');

+			if (c = cm.get('image'))

+				c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1);

+

+			if (c = cm.get('styleselect')) {

+				t._importClasses();

+

+				formatNames = [];

+				each(c.items, function(item) {

+					formatNames.push(item.value);

+				});

+

+				matches = ed.formatter.matchAll(formatNames);

+				c.select(matches[0]);

+			}

+

+			if (c = cm.get('formatselect')) {

+				p = getParent(DOM.isBlock);

+

+				if (p)

+					c.select(p.nodeName.toLowerCase());

+			}

+

+			// Find out current fontSize, fontFamily and fontClass

+			getParent(function(n) {

+				if (n.nodeName === 'SPAN') {

+					if (!cl && n.className)

+						cl = n.className;

+				}

+

+				if (ed.dom.is(n, s.theme_advanced_font_selector)) {

+					if (!fz && n.style.fontSize)

+						fz = n.style.fontSize;

+

+					if (!fn && n.style.fontFamily)

+						fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase();

+					

+					if (!fc && n.style.color)

+						fc = n.style.color;

+

+					if (!bc && n.style.backgroundColor)

+						bc = n.style.backgroundColor;

+				}

+

+				return false;

+			});

+

+			if (c = cm.get('fontselect')) {

+				c.select(function(v) {

+					return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn;

+				});

+			}

+

+			// Select font size

+			if (c = cm.get('fontsizeselect')) {

+				// Use computed style

+				if (s.theme_advanced_runtime_fontsize && !fz && !cl)

+					fz = ed.dom.getStyle(n, 'fontSize', true);

+

+				c.select(function(v) {

+					if (v.fontSize && v.fontSize === fz)

+						return true;

+

+					if (v['class'] && v['class'] === cl)

+						return true;

+				});

+			}

+			

+			if (s.theme_advanced_show_current_color) {

+				function updateColor(controlId, color) {

+					if (c = cm.get(controlId)) {

+						if (!color)

+							color = c.settings.default_color;

+						if (color !== c.value) {

+							c.displayColor(color);

+						}

+					}

+				}

+				updateColor('forecolor', fc);

+				updateColor('backcolor', bc);

+			}

+

+			if (s.theme_advanced_show_current_color) {

+				function updateColor(controlId, color) {

+					if (c = cm.get(controlId)) {

+						if (!color)

+							color = c.settings.default_color;

+						if (color !== c.value) {

+							c.displayColor(color);

+						}

+					}

+				};

+

+				updateColor('forecolor', fc);

+				updateColor('backcolor', bc);

+			}

+

+			if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {

+				p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});

+

+				if (t.statusKeyboardNavigation) {

+					t.statusKeyboardNavigation.destroy();

+					t.statusKeyboardNavigation = null;

+				}

+

+				DOM.setHTML(p, '');

+

+				getParent(function(n) {

+					var na = n.nodeName.toLowerCase(), u, pi, ti = '';

+

+					// Ignore non element and bogus/hidden elements

+					if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))

+						return;

+

+					// Handle prefix

+					if (tinymce.isIE && n.scopeName !== 'HTML')

+						na = n.scopeName + ':' + na;

+

+					// Remove internal prefix

+					na = na.replace(/mce\:/g, '');

+

+					// Handle node name

+					switch (na) {

+						case 'b':

+							na = 'strong';

+							break;

+

+						case 'i':

+							na = 'em';

+							break;

+

+						case 'img':

+							if (v = DOM.getAttrib(n, 'src'))

+								ti += 'src: ' + v + ' ';

+

+							break;

+

+						case 'a':

+							if (v = DOM.getAttrib(n, 'name')) {

+								ti += 'name: ' + v + ' ';

+								na += '#' + v;

+							}

+

+							if (v = DOM.getAttrib(n, 'href'))

+								ti += 'href: ' + v + ' ';

+

+							break;

+

+						case 'font':

+							if (v = DOM.getAttrib(n, 'face'))

+								ti += 'font: ' + v + ' ';

+

+							if (v = DOM.getAttrib(n, 'size'))

+								ti += 'size: ' + v + ' ';

+

+							if (v = DOM.getAttrib(n, 'color'))

+								ti += 'color: ' + v + ' ';

+

+							break;

+

+						case 'span':

+							if (v = DOM.getAttrib(n, 'style'))

+								ti += 'style: ' + v + ' ';

+

+							break;

+					}

+

+					if (v = DOM.getAttrib(n, 'id'))

+						ti += 'id: ' + v + ' ';

+

+					if (v = n.className) {

+						v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '')

+

+						if (v) {

+							ti += 'class: ' + v + ' ';

+

+							if (DOM.isBlock(n) || na == 'img' || na == 'span')

+								na += '.' + v;

+						}

+					}

+

+					na = na.replace(/(html:)/g, '');

+					na = {name : na, node : n, title : ti};

+					t.onResolveName.dispatch(t, na);

+					ti = na.title;

+					na = na.name;

+

+					//u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";

+					pi = DOM.create('a', {'href' : "javascript:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);

+

+					if (p.hasChildNodes()) {

+						p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild);

+						p.insertBefore(pi, p.firstChild);

+					} else

+						p.appendChild(pi);

+				}, ed.getBody());

+

+				if (DOM.select('a', p).length > 0) {

+					t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({

+						root: ed.id + "_path_row",

+						items: DOM.select('a', p),

+						excludeFromTabOrder: true,

+						onCancel: function() {

+							ed.focus();

+						}

+					}, DOM);

+				}

+			}

+		},

+

+		// Commands gets called by execCommand

+

+		_sel : function(v) {

+			this.editor.execCommand('mceSelectNodeDepth', false, v);

+		},

+

+		_mceInsertAnchor : function(ui, v) {

+			var ed = this.editor;

+

+			ed.windowManager.open({

+				url : this.url + '/anchor.htm',

+				width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),

+				height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),

+				inline : true

+			}, {

+				theme_url : this.url

+			});

+		},

+

+		_mceCharMap : function() {

+			var ed = this.editor;

+

+			ed.windowManager.open({

+				url : this.url + '/charmap.htm',

+				width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),

+				height : 265 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),

+				inline : true

+			}, {

+				theme_url : this.url

+			});

+		},

+

+		_mceHelp : function() {

+			var ed = this.editor;

+

+			ed.windowManager.open({

+				url : this.url + '/about.htm',

+				width : 480,

+				height : 380,

+				inline : true

+			}, {

+				theme_url : this.url

+			});

+		},

+

+		_mceShortcuts : function() {

+			var ed = this.editor;

+			ed.windowManager.open({

+				url: this.url + '/shortcuts.htm',

+				width: 480,

+				height: 380,

+				inline: true

+			}, {

+				theme_url: this.url

+			});

+		},

+

+		_mceColorPicker : function(u, v) {

+			var ed = this.editor;

+

+			v = v || {};

+

+			ed.windowManager.open({

+				url : this.url + '/color_picker.htm',

+				width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),

+				height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),

+				close_previous : false,

+				inline : true

+			}, {

+				input_color : v.color,

+				func : v.func,

+				theme_url : this.url

+			});

+		},

+

+		_mceCodeEditor : function(ui, val) {

+			var ed = this.editor;

+

+			ed.windowManager.open({

+				url : this.url + '/source_editor.htm',

+				width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),

+				height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),

+				inline : true,

+				resizable : true,

+				maximizable : true

+			}, {

+				theme_url : this.url

+			});

+		},

+

+		_mceImage : function(ui, val) {

+			var ed = this.editor;

+

+			// Internal image object like a flash placeholder

+			if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)

+				return;

+

+			ed.windowManager.open({

+				url : this.url + '/image.htm',

+				width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),

+				height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),

+				inline : true

+			}, {

+				theme_url : this.url

+			});

+		},

+

+		_mceLink : function(ui, val) {

+			var ed = this.editor;

+

+			ed.windowManager.open({

+				url : this.url + '/link.htm',

+				width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),

+				height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),

+				inline : true

+			}, {

+				theme_url : this.url

+			});

+		},

+

+		_mceNewDocument : function() {

+			var ed = this.editor;

+

+			ed.windowManager.confirm('advanced.newdocument', function(s) {

+				if (s)

+					ed.execCommand('mceSetContent', false, '');

+			});

+		},

+

+		_mceForeColor : function() {

+			var t = this;

+

+			this._mceColorPicker(0, {

+				color: t.fgColor,

+				func : function(co) {

+					t.fgColor = co;

+					t.editor.execCommand('ForeColor', false, co);

+				}

+			});

+		},

+

+		_mceBackColor : function() {

+			var t = this;

+

+			this._mceColorPicker(0, {

+				color: t.bgColor,

+				func : function(co) {

+					t.bgColor = co;

+					t.editor.execCommand('HiliteColor', false, co);

+				}

+			});

+		},

+

+		_ufirst : function(s) {

+			return s.substring(0, 1).toUpperCase() + s.substring(1);

+		}

+	});

+

+	tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);

+}(tinymce));

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/image.htm
@@ -1,1 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advanced_dlg.image_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="js/image.js"></script>

+</head>

+<body id="image" style="display: none">

+<form onsubmit="ImageDialog.update();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<table border="0" cellpadding="4" cellspacing="0">

+				<tr>

+					<td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>

+					<td><table border="0" cellspacing="0" cellpadding="0">

+						<tr>

+							<td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>

+							<td id="srcbrowsercontainer">&nbsp;</td>

+						</tr>

+					</table></td>

+				</tr>

+				<tr>

+					<td><label for="image_list">{#advanced_dlg.image_list}</label></td>

+					<td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>

+				</tr>

+				<tr>

+					<td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>

+					<td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>

+				</tr>

+				<tr>

+					<td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>

+					<td><select id="align" name="align" onchange="ImageDialog.updateStyle();">

+						<option value="">{#not_set}</option>

+						<option value="baseline">{#advanced_dlg.image_align_baseline}</option>

+						<option value="top">{#advanced_dlg.image_align_top}</option>

+						<option value="middle">{#advanced_dlg.image_align_middle}</option>

+						<option value="bottom">{#advanced_dlg.image_align_bottom}</option>

+						<option value="text-top">{#advanced_dlg.image_align_texttop}</option>

+						<option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>

+						<option value="left">{#advanced_dlg.image_align_left}</option>

+						<option value="right">{#advanced_dlg.image_align_right}</option>

+					</select></td>

+				</tr>

+				<tr>

+					<td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>

+					<td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />

+					 x 

+					<input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>

+				</tr>

+				<tr>

+				<td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>

+				<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>

+				</tr>

+				<tr>

+					<td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>

+					<td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>

+				</tr>

+				<tr>

+					<td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>

+					<td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>

+				</tr>

+			</table>

+		</div>

+	</div>

+

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#insert}" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/flash.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/icons.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/iframe.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/quicktime.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/realmedia.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/shockwave.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/trans.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/video.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/js/about.js
@@ -1,1 +1,74 @@
+tinyMCEPopup.requireLangPack();

+

+function init() {

+	var ed, tcont;

+

+	tinyMCEPopup.resizeToInnerSize();

+	ed = tinyMCEPopup.editor;

+

+	// Give FF some time

+	window.setTimeout(insertHelpIFrame, 10);

+

+	tcont = document.getElementById('plugintablecontainer');

+	document.getElementById('plugins_tab').style.display = 'none';

+

+	var html = "";

+	html += '<table id="plugintable">';

+	html += '<thead>';

+	html += '<tr>';

+	html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';

+	html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';

+	html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';

+	html += '</tr>';

+	html += '</thead>';

+	html += '<tbody>';

+

+	tinymce.each(ed.plugins, function(p, n) {

+		var info;

+

+		if (!p.getInfo)

+			return;

+

+		html += '<tr>';

+

+		info = p.getInfo();

+

+		if (info.infourl != null && info.infourl != '')

+			html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';

+		else

+			html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';

+

+		if (info.authorurl != null && info.authorurl != '')

+			html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';

+		else

+			html += '<td width="35%">' + info.author + '</td>';

+

+		html += '<td width="15%">' + info.version + '</td>';

+		html += '</tr>';

+

+		document.getElementById('plugins_tab').style.display = '';

+

+	});

+

+	html += '</tbody>';

+	html += '</table>';

+

+	tcont.innerHTML = html;

+

+	tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;

+	tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;

+}

+

+function insertHelpIFrame() {

+	var html;

+

+	if (tinyMCEPopup.getParam('docs_url')) {

+		html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';

+		document.getElementById('iframecontainer').innerHTML = html;

+		document.getElementById('help_tab').style.display = 'block';

+		document.getElementById('help_tab').setAttribute("aria-hidden", "false");

+	}

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/js/anchor.js
@@ -1,1 +1,44 @@
+tinyMCEPopup.requireLangPack();

+

+var AnchorDialog = {

+	init : function(ed) {

+		var action, elm, f = document.forms[0];

+

+		this.editor = ed;

+		elm = ed.dom.getParent(ed.selection.getNode(), 'A');

+		v = ed.dom.getAttrib(elm, 'name');

+

+		if (v) {

+			this.action = 'update';

+			f.anchorName.value = v;

+		}

+

+		f.insert.value = ed.getLang(elm ? 'update' : 'insert');

+	},

+

+	update : function() {

+		var ed = this.editor, elm, name = document.forms[0].anchorName.value;

+

+		if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) {

+			tinyMCEPopup.alert('advanced_dlg.anchor_invalid');

+			return;

+		}

+

+		tinyMCEPopup.restoreSelection();

+

+		if (this.action != 'update')

+			ed.selection.collapse(1);

+

+		elm = ed.dom.getParent(ed.selection.getNode(), 'A');

+		if (elm) {

+			elm.setAttribute('name', name);

+			elm.name = name;

+		} else

+			ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, ''));

+

+		tinyMCEPopup.close();

+	}

+};

+

+tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/js/charmap.js
@@ -1,1 +1,364 @@
+/**

+ * charmap.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+tinyMCEPopup.requireLangPack();

+

+var charmap = [

+	['&nbsp;',    '&#160;',  true, 'no-break space'],

+	['&amp;',     '&#38;',   true, 'ampersand'],

+	['&quot;',    '&#34;',   true, 'quotation mark'],

+// finance

+	['&cent;',    '&#162;',  true, 'cent sign'],

+	['&euro;',    '&#8364;', true, 'euro sign'],

+	['&pound;',   '&#163;',  true, 'pound sign'],

+	['&yen;',     '&#165;',  true, 'yen sign'],

+// signs

+	['&copy;',    '&#169;',  true, 'copyright sign'],

+	['&reg;',     '&#174;',  true, 'registered sign'],

+	['&trade;',   '&#8482;', true, 'trade mark sign'],

+	['&permil;',  '&#8240;', true, 'per mille sign'],

+	['&micro;',   '&#181;',  true, 'micro sign'],

+	['&middot;',  '&#183;',  true, 'middle dot'],

+	['&bull;',    '&#8226;', true, 'bullet'],

+	['&hellip;',  '&#8230;', true, 'three dot leader'],

+	['&prime;',   '&#8242;', true, 'minutes / feet'],

+	['&Prime;',   '&#8243;', true, 'seconds / inches'],

+	['&sect;',    '&#167;',  true, 'section sign'],

+	['&para;',    '&#182;',  true, 'paragraph sign'],

+	['&szlig;',   '&#223;',  true, 'sharp s / ess-zed'],

+// quotations

+	['&lsaquo;',  '&#8249;', true, 'single left-pointing angle quotation mark'],

+	['&rsaquo;',  '&#8250;', true, 'single right-pointing angle quotation mark'],

+	['&laquo;',   '&#171;',  true, 'left pointing guillemet'],

+	['&raquo;',   '&#187;',  true, 'right pointing guillemet'],

+	['&lsquo;',   '&#8216;', true, 'left single quotation mark'],

+	['&rsquo;',   '&#8217;', true, 'right single quotation mark'],

+	['&ldquo;',   '&#8220;', true, 'left double quotation mark'],

+	['&rdquo;',   '&#8221;', true, 'right double quotation mark'],

+	['&sbquo;',   '&#8218;', true, 'single low-9 quotation mark'],

+	['&bdquo;',   '&#8222;', true, 'double low-9 quotation mark'],

+	['&lt;',      '&#60;',   true, 'less-than sign'],

+	['&gt;',      '&#62;',   true, 'greater-than sign'],

+	['&le;',      '&#8804;', true, 'less-than or equal to'],

+	['&ge;',      '&#8805;', true, 'greater-than or equal to'],

+	['&ndash;',   '&#8211;', true, 'en dash'],

+	['&mdash;',   '&#8212;', true, 'em dash'],

+	['&macr;',    '&#175;',  true, 'macron'],

+	['&oline;',   '&#8254;', true, 'overline'],

+	['&curren;',  '&#164;',  true, 'currency sign'],

+	['&brvbar;',  '&#166;',  true, 'broken bar'],

+	['&uml;',     '&#168;',  true, 'diaeresis'],

+	['&iexcl;',   '&#161;',  true, 'inverted exclamation mark'],

+	['&iquest;',  '&#191;',  true, 'turned question mark'],

+	['&circ;',    '&#710;',  true, 'circumflex accent'],

+	['&tilde;',   '&#732;',  true, 'small tilde'],

+	['&deg;',     '&#176;',  true, 'degree sign'],

+	['&minus;',   '&#8722;', true, 'minus sign'],

+	['&plusmn;',  '&#177;',  true, 'plus-minus sign'],

+	['&divide;',  '&#247;',  true, 'division sign'],

+	['&frasl;',   '&#8260;', true, 'fraction slash'],

+	['&times;',   '&#215;',  true, 'multiplication sign'],

+	['&sup1;',    '&#185;',  true, 'superscript one'],

+	['&sup2;',    '&#178;',  true, 'superscript two'],

+	['&sup3;',    '&#179;',  true, 'superscript three'],

+	['&frac14;',  '&#188;',  true, 'fraction one quarter'],

+	['&frac12;',  '&#189;',  true, 'fraction one half'],

+	['&frac34;',  '&#190;',  true, 'fraction three quarters'],

+// math / logical

+	['&fnof;',    '&#402;',  true, 'function / florin'],

+	['&int;',     '&#8747;', true, 'integral'],

+	['&sum;',     '&#8721;', true, 'n-ary sumation'],

+	['&infin;',   '&#8734;', true, 'infinity'],

+	['&radic;',   '&#8730;', true, 'square root'],

+	['&sim;',     '&#8764;', false,'similar to'],

+	['&cong;',    '&#8773;', false,'approximately equal to'],

+	['&asymp;',   '&#8776;', true, 'almost equal to'],

+	['&ne;',      '&#8800;', true, 'not equal to'],

+	['&equiv;',   '&#8801;', true, 'identical to'],

+	['&isin;',    '&#8712;', false,'element of'],

+	['&notin;',   '&#8713;', false,'not an element of'],

+	['&ni;',      '&#8715;', false,'contains as member'],

+	['&prod;',    '&#8719;', true, 'n-ary product'],

+	['&and;',     '&#8743;', false,'logical and'],

+	['&or;',      '&#8744;', false,'logical or'],

+	['&not;',     '&#172;',  true, 'not sign'],

+	['&cap;',     '&#8745;', true, 'intersection'],

+	['&cup;',     '&#8746;', false,'union'],

+	['&part;',    '&#8706;', true, 'partial differential'],

+	['&forall;',  '&#8704;', false,'for all'],

+	['&exist;',   '&#8707;', false,'there exists'],

+	['&empty;',   '&#8709;', false,'diameter'],

+	['&nabla;',   '&#8711;', false,'backward difference'],

+	['&lowast;',  '&#8727;', false,'asterisk operator'],

+	['&prop;',    '&#8733;', false,'proportional to'],

+	['&ang;',     '&#8736;', false,'angle'],

+// undefined

+	['&acute;',   '&#180;',  true, 'acute accent'],

+	['&cedil;',   '&#184;',  true, 'cedilla'],

+	['&ordf;',    '&#170;',  true, 'feminine ordinal indicator'],

+	['&ordm;',    '&#186;',  true, 'masculine ordinal indicator'],

+	['&dagger;',  '&#8224;', true, 'dagger'],

+	['&Dagger;',  '&#8225;', true, 'double dagger'],

+// alphabetical special chars

+	['&Agrave;',  '&#192;',  true, 'A - grave'],

+	['&Aacute;',  '&#193;',  true, 'A - acute'],

+	['&Acirc;',   '&#194;',  true, 'A - circumflex'],

+	['&Atilde;',  '&#195;',  true, 'A - tilde'],

+	['&Auml;',    '&#196;',  true, 'A - diaeresis'],

+	['&Aring;',   '&#197;',  true, 'A - ring above'],

+	['&AElig;',   '&#198;',  true, 'ligature AE'],

+	['&Ccedil;',  '&#199;',  true, 'C - cedilla'],

+	['&Egrave;',  '&#200;',  true, 'E - grave'],

+	['&Eacute;',  '&#201;',  true, 'E - acute'],

+	['&Ecirc;',   '&#202;',  true, 'E - circumflex'],

+	['&Euml;',    '&#203;',  true, 'E - diaeresis'],

+	['&Igrave;',  '&#204;',  true, 'I - grave'],

+	['&Iacute;',  '&#205;',  true, 'I - acute'],

+	['&Icirc;',   '&#206;',  true, 'I - circumflex'],

+	['&Iuml;',    '&#207;',  true, 'I - diaeresis'],

+	['&ETH;',     '&#208;',  true, 'ETH'],

+	['&Ntilde;',  '&#209;',  true, 'N - tilde'],

+	['&Ograve;',  '&#210;',  true, 'O - grave'],

+	['&Oacute;',  '&#211;',  true, 'O - acute'],

+	['&Ocirc;',   '&#212;',  true, 'O - circumflex'],

+	['&Otilde;',  '&#213;',  true, 'O - tilde'],

+	['&Ouml;',    '&#214;',  true, 'O - diaeresis'],

+	['&Oslash;',  '&#216;',  true, 'O - slash'],

+	['&OElig;',   '&#338;',  true, 'ligature OE'],

+	['&Scaron;',  '&#352;',  true, 'S - caron'],

+	['&Ugrave;',  '&#217;',  true, 'U - grave'],

+	['&Uacute;',  '&#218;',  true, 'U - acute'],

+	['&Ucirc;',   '&#219;',  true, 'U - circumflex'],

+	['&Uuml;',    '&#220;',  true, 'U - diaeresis'],

+	['&Yacute;',  '&#221;',  true, 'Y - acute'],

+	['&Yuml;',    '&#376;',  true, 'Y - diaeresis'],

+	['&THORN;',   '&#222;',  true, 'THORN'],

+	['&agrave;',  '&#224;',  true, 'a - grave'],

+	['&aacute;',  '&#225;',  true, 'a - acute'],

+	['&acirc;',   '&#226;',  true, 'a - circumflex'],

+	['&atilde;',  '&#227;',  true, 'a - tilde'],

+	['&auml;',    '&#228;',  true, 'a - diaeresis'],

+	['&aring;',   '&#229;',  true, 'a - ring above'],

+	['&aelig;',   '&#230;',  true, 'ligature ae'],

+	['&ccedil;',  '&#231;',  true, 'c - cedilla'],

+	['&egrave;',  '&#232;',  true, 'e - grave'],

+	['&eacute;',  '&#233;',  true, 'e - acute'],

+	['&ecirc;',   '&#234;',  true, 'e - circumflex'],

+	['&euml;',    '&#235;',  true, 'e - diaeresis'],

+	['&igrave;',  '&#236;',  true, 'i - grave'],

+	['&iacute;',  '&#237;',  true, 'i - acute'],

+	['&icirc;',   '&#238;',  true, 'i - circumflex'],

+	['&iuml;',    '&#239;',  true, 'i - diaeresis'],

+	['&eth;',     '&#240;',  true, 'eth'],

+	['&ntilde;',  '&#241;',  true, 'n - tilde'],

+	['&ograve;',  '&#242;',  true, 'o - grave'],

+	['&oacute;',  '&#243;',  true, 'o - acute'],

+	['&ocirc;',   '&#244;',  true, 'o - circumflex'],

+	['&otilde;',  '&#245;',  true, 'o - tilde'],

+	['&ouml;',    '&#246;',  true, 'o - diaeresis'],

+	['&oslash;',  '&#248;',  true, 'o slash'],

+	['&oelig;',   '&#339;',  true, 'ligature oe'],

+	['&scaron;',  '&#353;',  true, 's - caron'],

+	['&ugrave;',  '&#249;',  true, 'u - grave'],

+	['&uacute;',  '&#250;',  true, 'u - acute'],

+	['&ucirc;',   '&#251;',  true, 'u - circumflex'],

+	['&uuml;',    '&#252;',  true, 'u - diaeresis'],

+	['&yacute;',  '&#253;',  true, 'y - acute'],

+	['&thorn;',   '&#254;',  true, 'thorn'],

+	['&yuml;',    '&#255;',  true, 'y - diaeresis'],

+	['&Alpha;',   '&#913;',  true, 'Alpha'],

+	['&Beta;',    '&#914;',  true, 'Beta'],

+	['&Gamma;',   '&#915;',  true, 'Gamma'],

+	['&Delta;',   '&#916;',  true, 'Delta'],

+	['&Epsilon;', '&#917;',  true, 'Epsilon'],

+	['&Zeta;',    '&#918;',  true, 'Zeta'],

+	['&Eta;',     '&#919;',  true, 'Eta'],

+	['&Theta;',   '&#920;',  true, 'Theta'],

+	['&Iota;',    '&#921;',  true, 'Iota'],

+	['&Kappa;',   '&#922;',  true, 'Kappa'],

+	['&Lambda;',  '&#923;',  true, 'Lambda'],

+	['&Mu;',      '&#924;',  true, 'Mu'],

+	['&Nu;',      '&#925;',  true, 'Nu'],

+	['&Xi;',      '&#926;',  true, 'Xi'],

+	['&Omicron;', '&#927;',  true, 'Omicron'],

+	['&Pi;',      '&#928;',  true, 'Pi'],

+	['&Rho;',     '&#929;',  true, 'Rho'],

+	['&Sigma;',   '&#931;',  true, 'Sigma'],

+	['&Tau;',     '&#932;',  true, 'Tau'],

+	['&Upsilon;', '&#933;',  true, 'Upsilon'],

+	['&Phi;',     '&#934;',  true, 'Phi'],

+	['&Chi;',     '&#935;',  true, 'Chi'],

+	['&Psi;',     '&#936;',  true, 'Psi'],

+	['&Omega;',   '&#937;',  true, 'Omega'],

+	['&alpha;',   '&#945;',  true, 'alpha'],

+	['&beta;',    '&#946;',  true, 'beta'],

+	['&gamma;',   '&#947;',  true, 'gamma'],

+	['&delta;',   '&#948;',  true, 'delta'],

+	['&epsilon;', '&#949;',  true, 'epsilon'],

+	['&zeta;',    '&#950;',  true, 'zeta'],

+	['&eta;',     '&#951;',  true, 'eta'],

+	['&theta;',   '&#952;',  true, 'theta'],

+	['&iota;',    '&#953;',  true, 'iota'],

+	['&kappa;',   '&#954;',  true, 'kappa'],

+	['&lambda;',  '&#955;',  true, 'lambda'],

+	['&mu;',      '&#956;',  true, 'mu'],

+	['&nu;',      '&#957;',  true, 'nu'],

+	['&xi;',      '&#958;',  true, 'xi'],

+	['&omicron;', '&#959;',  true, 'omicron'],

+	['&pi;',      '&#960;',  true, 'pi'],

+	['&rho;',     '&#961;',  true, 'rho'],

+	['&sigmaf;',  '&#962;',  true, 'final sigma'],

+	['&sigma;',   '&#963;',  true, 'sigma'],

+	['&tau;',     '&#964;',  true, 'tau'],

+	['&upsilon;', '&#965;',  true, 'upsilon'],

+	['&phi;',     '&#966;',  true, 'phi'],

+	['&chi;',     '&#967;',  true, 'chi'],

+	['&psi;',     '&#968;',  true, 'psi'],

+	['&omega;',   '&#969;',  true, 'omega'],

+// symbols

+	['&alefsym;', '&#8501;', false,'alef symbol'],

+	['&piv;',     '&#982;',  false,'pi symbol'],

+	['&real;',    '&#8476;', false,'real part symbol'],

+	['&thetasym;','&#977;',  false,'theta symbol'],

+	['&upsih;',   '&#978;',  false,'upsilon - hook symbol'],

+	['&weierp;',  '&#8472;', false,'Weierstrass p'],

+	['&image;',   '&#8465;', false,'imaginary part'],

+// arrows

+	['&larr;',    '&#8592;', true, 'leftwards arrow'],

+	['&uarr;',    '&#8593;', true, 'upwards arrow'],

+	['&rarr;',    '&#8594;', true, 'rightwards arrow'],

+	['&darr;',    '&#8595;', true, 'downwards arrow'],

+	['&harr;',    '&#8596;', true, 'left right arrow'],

+	['&crarr;',   '&#8629;', false,'carriage return'],

+	['&lArr;',    '&#8656;', false,'leftwards double arrow'],

+	['&uArr;',    '&#8657;', false,'upwards double arrow'],

+	['&rArr;',    '&#8658;', false,'rightwards double arrow'],

+	['&dArr;',    '&#8659;', false,'downwards double arrow'],

+	['&hArr;',    '&#8660;', false,'left right double arrow'],

+	['&there4;',  '&#8756;', false,'therefore'],

+	['&sub;',     '&#8834;', false,'subset of'],

+	['&sup;',     '&#8835;', false,'superset of'],

+	['&nsub;',    '&#8836;', false,'not a subset of'],

+	['&sube;',    '&#8838;', false,'subset of or equal to'],

+	['&supe;',    '&#8839;', false,'superset of or equal to'],

+	['&oplus;',   '&#8853;', false,'circled plus'],

+	['&otimes;',  '&#8855;', false,'circled times'],

+	['&perp;',    '&#8869;', false,'perpendicular'],

+	['&sdot;',    '&#8901;', false,'dot operator'],

+	['&lceil;',   '&#8968;', false,'left ceiling'],

+	['&rceil;',   '&#8969;', false,'right ceiling'],

+	['&lfloor;',  '&#8970;', false,'left floor'],

+	['&rfloor;',  '&#8971;', false,'right floor'],

+	['&lang;',    '&#9001;', false,'left-pointing angle bracket'],

+	['&rang;',    '&#9002;', false,'right-pointing angle bracket'],

+	['&loz;',     '&#9674;', true, 'lozenge'],

+	['&spades;',  '&#9824;', true, 'black spade suit'],

+	['&clubs;',   '&#9827;', true, 'black club suit'],

+	['&hearts;',  '&#9829;', true, 'black heart suit'],

+	['&diams;',   '&#9830;', true, 'black diamond suit'],

+	['&ensp;',    '&#8194;', false,'en space'],

+	['&emsp;',    '&#8195;', false,'em space'],

+	['&thinsp;',  '&#8201;', false,'thin space'],

+	['&zwnj;',    '&#8204;', false,'zero width non-joiner'],

+	['&zwj;',     '&#8205;', false,'zero width joiner'],

+	['&lrm;',     '&#8206;', false,'left-to-right mark'],

+	['&rlm;',     '&#8207;', false,'right-to-left mark'],

+	['&shy;',     '&#173;',  false,'soft hyphen']

+];

+

+tinyMCEPopup.onInit.add(function() {

+	tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());

+	addKeyboardNavigation();

+});

+

+function addKeyboardNavigation(){

+	var tableElm, cells, settings;

+

+	cells = tinyMCEPopup.dom.select("a.charmaplink", "charmapgroup");

+

+	settings ={

+		root: "charmapgroup",

+		items: cells

+	};

+	cells[0].tabindex=0;

+	tinyMCEPopup.dom.addClass(cells[0], "mceFocus");

+	if (tinymce.isGecko) {

+		cells[0].focus();		

+	} else {

+		setTimeout(function(){

+			cells[0].focus();

+		}, 100);

+	}

+	tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);

+}

+

+function renderCharMapHTML() {

+	var charsPerRow = 20, tdWidth=20, tdHeight=20, i;

+	var html = '<div id="charmapgroup" aria-labelledby="charmap_label" tabindex="0" role="listbox">'+

+	'<table role="presentation" border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + 

+	'"><tr height="' + tdHeight + '">';

+	var cols=-1;

+

+	for (i=0; i<charmap.length; i++) {

+		var previewCharFn;

+

+		if (charmap[i][2]==true) {

+			cols++;

+			previewCharFn = 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');';

+			html += ''

+				+ '<td class="charmap">'

+				+ '<a class="charmaplink" role="button" onmouseover="'+previewCharFn+'" onfocus="'+previewCharFn+'" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + ' '+ tinyMCEPopup.editor.translate("advanced_dlg.charmap_usage")+'">'

+				+ charmap[i][1]

+				+ '</a></td>';

+			if ((cols+1) % charsPerRow == 0)

+				html += '</tr><tr height="' + tdHeight + '">';

+		}

+	 }

+

+	if (cols % charsPerRow > 0) {

+		var padd = charsPerRow - (cols % charsPerRow);

+		for (var i=0; i<padd-1; i++)

+			html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';

+	}

+

+	html += '</tr></table></div>';

+	html = html.replace(/<tr height="20"><\/tr>/g, '');

+

+	return html;

+}

+

+function insertChar(chr) {

+	tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');

+

+	// Refocus in window

+	if (tinyMCEPopup.isWindow)

+		window.focus();

+

+	tinyMCEPopup.editor.focus();

+	tinyMCEPopup.close();

+}

+

+function previewChar(codeA, codeB, codeN) {

+	var elmA = document.getElementById('codeA');

+	var elmB = document.getElementById('codeB');

+	var elmV = document.getElementById('codeV');

+	var elmN = document.getElementById('codeN');

+

+	if (codeA=='#160;') {

+		elmV.innerHTML = '__';

+	} else {

+		elmV.innerHTML = '&' + codeA;

+	}

+

+	elmB.innerHTML = '&amp;' + codeA;

+	elmA.innerHTML = '&amp;' + codeB;

+	elmN.innerHTML = codeN;

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/js/color_picker.js
@@ -1,1 +1,330 @@
+tinyMCEPopup.requireLangPack();

+

+var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;

+

+var colors = [

+	"#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",

+	"#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",

+	"#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",

+	"#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",

+	"#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",

+	"#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",

+	"#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",

+	"#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",

+	"#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",

+	"#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",

+	"#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",

+	"#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",

+	"#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",

+	"#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",

+	"#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",

+	"#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",

+	"#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",

+	"#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",

+	"#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",

+	"#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",

+	"#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",

+	"#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",

+	"#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",

+	"#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",

+	"#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",

+	"#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",

+	"#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"

+];

+

+var named = {

+	'#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',

+	'#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown',

+	'#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue',

+	'#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod',

+	'#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green',

+	'#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue',

+	'#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue',

+	'#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green',

+	'#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey',

+	'#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory',

+	'#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue',

+	'#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green',

+	'#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey',

+	'#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',

+	'#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue',

+	'#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin',

+	'#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid',

+	'#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff',

+	'#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue',

+	'#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver',

+	'#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green',

+	'#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',

+	'#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green'

+};

+

+var namedLookup = {};

+

+function init() {

+	var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value;

+

+	tinyMCEPopup.resizeToInnerSize();

+

+	generatePicker();

+	generateWebColors();

+	generateNamedColors();

+

+	if (inputColor) {

+		changeFinalColor(inputColor);

+

+		col = convertHexToRGB(inputColor);

+

+		if (col)

+			updateLight(col.r, col.g, col.b);

+	}

+	

+	for (key in named) {

+		value = named[key];

+		namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase();

+	}

+}

+

+function toHexColor(color) {

+	var matches, red, green, blue, toInt = parseInt;

+

+	function hex(value) {

+		value = parseInt(value).toString(16);

+

+		return value.length > 1 ? value : '0' + value; // Padd with leading zero

+	};

+

+	color = color.replace(/[\s#]+/g, '').toLowerCase();

+	color = namedLookup[color] || color;

+	matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)|([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})|([a-f0-9])([a-f0-9])([a-f0-9])$/.exec(color);

+

+	if (matches) {

+		if (matches[1]) {

+			red = toInt(matches[1]);

+			green = toInt(matches[2]);

+			blue = toInt(matches[3]);

+		} else if (matches[4]) {

+			red = toInt(matches[4], 16);

+			green = toInt(matches[5], 16);

+			blue = toInt(matches[6], 16);

+		} else if (matches[7]) {

+			red = toInt(matches[7] + matches[7], 16);

+			green = toInt(matches[8] + matches[8], 16);

+			blue = toInt(matches[9] + matches[9], 16);

+		}

+

+		return '#' + hex(red) + hex(green) + hex(blue);

+	}

+

+	return '';

+}

+

+function insertAction() {

+	var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');

+

+	tinyMCEPopup.restoreSelection();

+

+	if (f)

+		f(toHexColor(color));

+

+	tinyMCEPopup.close();

+}

+

+function showColor(color, name) {

+	if (name)

+		document.getElementById("colorname").innerHTML = name;

+

+	document.getElementById("preview").style.backgroundColor = color;

+	document.getElementById("color").value = color.toUpperCase();

+}

+

+function convertRGBToHex(col) {

+	var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");

+

+	if (!col)

+		return col;

+

+	var rgb = col.replace(re, "$1,$2,$3").split(',');

+	if (rgb.length == 3) {

+		r = parseInt(rgb[0]).toString(16);

+		g = parseInt(rgb[1]).toString(16);

+		b = parseInt(rgb[2]).toString(16);

+

+		r = r.length == 1 ? '0' + r : r;

+		g = g.length == 1 ? '0' + g : g;

+		b = b.length == 1 ? '0' + b : b;

+

+		return "#" + r + g + b;

+	}

+

+	return col;

+}

+

+function convertHexToRGB(col) {

+	if (col.indexOf('#') != -1) {

+		col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');

+

+		r = parseInt(col.substring(0, 2), 16);

+		g = parseInt(col.substring(2, 4), 16);

+		b = parseInt(col.substring(4, 6), 16);

+

+		return {r : r, g : g, b : b};

+	}

+

+	return null;

+}

+

+function generatePicker() {

+	var el = document.getElementById('light'), h = '', i;

+

+	for (i = 0; i < detail; i++){

+		h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'

+		+ ' onclick="changeFinalColor(this.style.backgroundColor)"'

+		+ ' onmousedown="isMouseDown = true; return false;"'

+		+ ' onmouseup="isMouseDown = false;"'

+		+ ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'

+		+ ' onmouseover="isMouseOver = true;"'

+		+ ' onmouseout="isMouseOver = false;"'

+		+ '></div>';

+	}

+

+	el.innerHTML = h;

+}

+

+function generateWebColors() {

+	var el = document.getElementById('webcolors'), h = '', i;

+

+	if (el.className == 'generated')

+		return;

+

+	// TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby.

+	h += '<div role="listbox" aria-labelledby="webcolors_title" tabindex="0"><table role="presentation" border="0" cellspacing="1" cellpadding="0">'

+		+ '<tr>';

+

+	for (i=0; i<colors.length; i++) {

+		h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'

+			+ '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="web_colors_' + i + '" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">';

+		if (tinyMCEPopup.editor.forcedHighContrastMode) {

+			h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';

+		}

+		h += '<span class="mceVoiceLabel" style="display:none;" id="web_colors_' + i + '">' + colors[i].toUpperCase() + '</span>';

+		h += '</a></td>';

+		if ((i+1) % 18 == 0)

+			h += '</tr><tr>';

+	}

+

+	h += '</table></div>';

+

+	el.innerHTML = h;

+	el.className = 'generated';

+

+	paintCanvas(el);

+	enableKeyboardNavigation(el.firstChild);

+}

+

+function paintCanvas(el) {

+	tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) {

+		var context;

+		if (canvas.getContext && (context = canvas.getContext("2d"))) {

+			context.fillStyle = canvas.getAttribute('data-color');

+			context.fillRect(0, 0, 10, 10);

+		}

+	});

+}

+function generateNamedColors() {

+	var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;

+

+	if (el.className == 'generated')

+		return;

+

+	for (n in named) {

+		v = named[n];

+		h += '<a href="javascript:insertAction();" role="option" tabindex="-1" aria-labelledby="named_colors_' + i + '" onfocus="showColor(\'' + n + '\',\'' + v + '\');" onmouseover="showColor(\'' + n + '\',\'' + v + '\');" style="background-color: ' + n + '">';

+		if (tinyMCEPopup.editor.forcedHighContrastMode) {

+			h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';

+		}

+		h += '<span class="mceVoiceLabel" style="display:none;" id="named_colors_' + i + '">' + v + '</span>';

+		h += '</a>';

+		i++;

+	}

+

+	el.innerHTML = h;

+	el.className = 'generated';

+

+	paintCanvas(el);

+	enableKeyboardNavigation(el);

+}

+

+function enableKeyboardNavigation(el) {

+	tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {

+		root: el,

+		items: tinyMCEPopup.dom.select('a', el)

+	}, tinyMCEPopup.dom);

+}

+

+function dechex(n) {

+	return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);

+}

+

+function computeColor(e) {

+	var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB, pos = tinyMCEPopup.dom.getPos(e.target);

+

+	x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0);

+	y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.y : 0);

+

+	partWidth = document.getElementById('colors').width / 6;

+	partDetail = detail / 2;

+	imHeight = document.getElementById('colors').height;

+

+	r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;

+	g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255	+ (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);

+	b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);

+

+	coef = (imHeight - y) / imHeight;

+	r = 128 + (r - 128) * coef;

+	g = 128 + (g - 128) * coef;

+	b = 128 + (b - 128) * coef;

+

+	changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));

+	updateLight(r, g, b);

+}

+

+function updateLight(r, g, b) {

+	var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;

+

+	for (i=0; i<detail; i++) {

+		if ((i>=0) && (i<partDetail)) {

+			finalCoef = i / partDetail;

+			finalR = dechex(255 - (255 - r) * finalCoef);

+			finalG = dechex(255 - (255 - g) * finalCoef);

+			finalB = dechex(255 - (255 - b) * finalCoef);

+		} else {

+			finalCoef = 2 - i / partDetail;

+			finalR = dechex(r * finalCoef);

+			finalG = dechex(g * finalCoef);

+			finalB = dechex(b * finalCoef);

+		}

+

+		color = finalR + finalG + finalB;

+

+		setCol('gs' + i, '#'+color);

+	}

+}

+

+function changeFinalColor(color) {

+	if (color.indexOf('#') == -1)

+		color = convertRGBToHex(color);

+

+	setCol('preview', color);

+	document.getElementById('color').value = color;

+}

+

+function setCol(e, c) {

+	try {

+		document.getElementById(e).style.backgroundColor = c;

+	} catch (ex) {

+		// Ignore IE warning

+	}

+}

+

+tinyMCEPopup.onInit.add(init);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/js/image.js
@@ -1,1 +1,252 @@
+var ImageDialog = {

+	preInit : function() {

+		var url;

+

+		tinyMCEPopup.requireLangPack();

+

+		if (url = tinyMCEPopup.getParam("external_image_list_url"))

+			document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

+	},

+

+	init : function() {

+		var f = document.forms[0], ed = tinyMCEPopup.editor;

+

+		// Setup browse button

+		document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');

+		if (isVisible('srcbrowser'))

+			document.getElementById('src').style.width = '180px';

+

+		e = ed.selection.getNode();

+

+		this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'));

+

+		if (e.nodeName == 'IMG') {

+			f.src.value = ed.dom.getAttrib(e, 'src');

+			f.alt.value = ed.dom.getAttrib(e, 'alt');

+			f.border.value = this.getAttrib(e, 'border');

+			f.vspace.value = this.getAttrib(e, 'vspace');

+			f.hspace.value = this.getAttrib(e, 'hspace');

+			f.width.value = ed.dom.getAttrib(e, 'width');

+			f.height.value = ed.dom.getAttrib(e, 'height');

+			f.insert.value = ed.getLang('update');

+			this.styleVal = ed.dom.getAttrib(e, 'style');

+			selectByValue(f, 'image_list', f.src.value);

+			selectByValue(f, 'align', this.getAttrib(e, 'align'));

+			this.updateStyle();

+		}

+	},

+

+	fillFileList : function(id, l) {

+		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

+

+		l = typeof(l) === 'function' ? l() : window[l];

+

+		if (l && l.length > 0) {

+			lst.options[lst.options.length] = new Option('', '');

+

+			tinymce.each(l, function(o) {

+				lst.options[lst.options.length] = new Option(o[0], o[1]);

+			});

+		} else

+			dom.remove(dom.getParent(id, 'tr'));

+	},

+

+	update : function() {

+		var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;

+

+		tinyMCEPopup.restoreSelection();

+

+		if (f.src.value === '') {

+			if (ed.selection.getNode().nodeName == 'IMG') {

+				ed.dom.remove(ed.selection.getNode());

+				ed.execCommand('mceRepaint');

+			}

+

+			tinyMCEPopup.close();

+			return;

+		}

+

+		if (!ed.settings.inline_styles) {

+			args = tinymce.extend(args, {

+				vspace : nl.vspace.value,

+				hspace : nl.hspace.value,

+				border : nl.border.value,

+				align : getSelectValue(f, 'align')

+			});

+		} else

+			args.style = this.styleVal;

+

+		tinymce.extend(args, {

+			src : f.src.value.replace(/ /g, '%20'),

+			alt : f.alt.value,

+			width : f.width.value,

+			height : f.height.value

+		});

+

+		el = ed.selection.getNode();

+

+		if (el && el.nodeName == 'IMG') {

+			ed.dom.setAttribs(el, args);

+			tinyMCEPopup.editor.execCommand('mceRepaint');

+			tinyMCEPopup.editor.focus();

+		} else {

+			tinymce.each(args, function(value, name) {

+				if (value === "") {

+					delete args[name];

+				}

+			});

+

+			ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});

+			ed.undoManager.add();

+		}

+

+		tinyMCEPopup.close();

+	},

+

+	updateStyle : function() {

+		var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];

+

+		if (tinyMCEPopup.editor.settings.inline_styles) {

+			st = tinyMCEPopup.dom.parseStyle(this.styleVal);

+

+			// Handle align

+			v = getSelectValue(f, 'align');

+			if (v) {

+				if (v == 'left' || v == 'right') {

+					st['float'] = v;

+					delete st['vertical-align'];

+				} else {

+					st['vertical-align'] = v;

+					delete st['float'];

+				}

+			} else {

+				delete st['float'];

+				delete st['vertical-align'];

+			}

+

+			// Handle border

+			v = f.border.value;

+			if (v || v == '0') {

+				if (v == '0')

+					st['border'] = '0';

+				else

+					st['border'] = v + 'px solid black';

+			} else

+				delete st['border'];

+

+			// Handle hspace

+			v = f.hspace.value;

+			if (v) {

+				delete st['margin'];

+				st['margin-left'] = v + 'px';

+				st['margin-right'] = v + 'px';

+			} else {

+				delete st['margin-left'];

+				delete st['margin-right'];

+			}

+

+			// Handle vspace

+			v = f.vspace.value;

+			if (v) {

+				delete st['margin'];

+				st['margin-top'] = v + 'px';

+				st['margin-bottom'] = v + 'px';

+			} else {

+				delete st['margin-top'];

+				delete st['margin-bottom'];

+			}

+

+			// Merge

+			st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');

+			this.styleVal = dom.serializeStyle(st, 'img');

+		}

+	},

+

+	getAttrib : function(e, at) {

+		var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;

+

+		if (ed.settings.inline_styles) {

+			switch (at) {

+				case 'align':

+					if (v = dom.getStyle(e, 'float'))

+						return v;

+

+					if (v = dom.getStyle(e, 'vertical-align'))

+						return v;

+

+					break;

+

+				case 'hspace':

+					v = dom.getStyle(e, 'margin-left')

+					v2 = dom.getStyle(e, 'margin-right');

+					if (v && v == v2)

+						return parseInt(v.replace(/[^0-9]/g, ''));

+

+					break;

+

+				case 'vspace':

+					v = dom.getStyle(e, 'margin-top')

+					v2 = dom.getStyle(e, 'margin-bottom');

+					if (v && v == v2)

+						return parseInt(v.replace(/[^0-9]/g, ''));

+

+					break;

+

+				case 'border':

+					v = 0;

+

+					tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {

+						sv = dom.getStyle(e, 'border-' + sv + '-width');

+

+						// False or not the same as prev

+						if (!sv || (sv != v && v !== 0)) {

+							v = 0;

+							return false;

+						}

+

+						if (sv)

+							v = sv;

+					});

+

+					if (v)

+						return parseInt(v.replace(/[^0-9]/g, ''));

+

+					break;

+			}

+		}

+

+		if (v = dom.getAttrib(e, at))

+			return v;

+

+		return '';

+	},

+

+	resetImageData : function() {

+		var f = document.forms[0];

+

+		f.width.value = f.height.value = "";	

+	},

+

+	updateImageData : function() {

+		var f = document.forms[0], t = ImageDialog;

+

+		if (f.width.value == "")

+			f.width.value = t.preloadImg.width;

+

+		if (f.height.value == "")

+			f.height.value = t.preloadImg.height;

+	},

+

+	getImageData : function() {

+		var f = document.forms[0];

+

+		this.preloadImg = new Image();

+		this.preloadImg.onload = this.updateImageData;

+		this.preloadImg.onerror = this.resetImageData;

+		this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);

+	}

+};

+

+ImageDialog.preInit();

+tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/js/link.js
@@ -1,1 +1,154 @@
+tinyMCEPopup.requireLangPack();

+

+var LinkDialog = {

+	preInit : function() {

+		var url;

+

+		if (url = tinyMCEPopup.getParam("external_link_list_url"))

+			document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

+	},

+

+	init : function() {

+		var f = document.forms[0], ed = tinyMCEPopup.editor;

+

+		// Setup browse button

+		document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');

+		if (isVisible('hrefbrowser'))

+			document.getElementById('href').style.width = '180px';

+

+		this.fillClassList('class_list');

+		this.fillFileList('link_list', 'tinyMCELinkList');

+		this.fillTargetList('target_list');

+

+		if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {

+			f.href.value = ed.dom.getAttrib(e, 'href');

+			f.linktitle.value = ed.dom.getAttrib(e, 'title');

+			f.insert.value = ed.getLang('update');

+			selectByValue(f, 'link_list', f.href.value);

+			selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));

+			selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));

+		}

+	},

+

+	update : function() {

+		var f = document.forms[0], ed = tinyMCEPopup.editor, e, b, href = f.href.value.replace(/ /g, '%20');

+

+		tinyMCEPopup.restoreSelection();

+		e = ed.dom.getParent(ed.selection.getNode(), 'A');

+

+		// Remove element if there is no href

+		if (!f.href.value) {

+			if (e) {

+				b = ed.selection.getBookmark();

+				ed.dom.remove(e, 1);

+				ed.selection.moveToBookmark(b);

+				tinyMCEPopup.execCommand("mceEndUndoLevel");

+				tinyMCEPopup.close();

+				return;

+			}

+		}

+

+		// Create new anchor elements

+		if (e == null) {

+			ed.getDoc().execCommand("unlink", false, null);

+			tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});

+

+			tinymce.each(ed.dom.select("a"), function(n) {

+				if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {

+					e = n;

+

+					ed.dom.setAttribs(e, {

+						href : href,

+						title : f.linktitle.value,

+						target : f.target_list ? getSelectValue(f, "target_list") : null,

+						'class' : f.class_list ? getSelectValue(f, "class_list") : null

+					});

+				}

+			});

+		} else {

+			ed.dom.setAttribs(e, {

+				href : href,

+				title : f.linktitle.value,

+				target : f.target_list ? getSelectValue(f, "target_list") : null,

+				'class' : f.class_list ? getSelectValue(f, "class_list") : null

+			});

+		}

+

+		// Don't move caret if selection was image

+		if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {

+			ed.focus();

+			ed.selection.select(e);

+			ed.selection.collapse(0);

+			tinyMCEPopup.storeSelection();

+		}

+

+		tinyMCEPopup.execCommand("mceEndUndoLevel");

+		tinyMCEPopup.close();

+	},

+

+	checkPrefix : function(n) {

+		if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))

+			n.value = 'mailto:' + n.value;

+

+		if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))

+			n.value = 'http://' + n.value;

+	},

+

+	fillFileList : function(id, l) {

+		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

+

+		l = window[l];

+

+		if (l && l.length > 0) {

+			lst.options[lst.options.length] = new Option('', '');

+

+			tinymce.each(l, function(o) {

+				lst.options[lst.options.length] = new Option(o[0], o[1]);

+			});

+		} else

+			dom.remove(dom.getParent(id, 'tr'));

+	},

+

+	fillClassList : function(id) {

+		var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;

+

+		if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {

+			cl = [];

+

+			tinymce.each(v.split(';'), function(v) {

+				var p = v.split('=');

+

+				cl.push({'title' : p[0], 'class' : p[1]});

+			});

+		} else

+			cl = tinyMCEPopup.editor.dom.getClasses();

+

+		if (cl.length > 0) {

+			lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');

+

+			tinymce.each(cl, function(o) {

+				lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);

+			});

+		} else

+			dom.remove(dom.getParent(id, 'tr'));

+	},

+

+	fillTargetList : function(id) {

+		var dom = tinyMCEPopup.dom, lst = dom.get(id), v;

+

+		lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');

+		lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');

+		lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');

+

+		if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {

+			tinymce.each(v.split(','), function(v) {

+				v = v.split('=');

+				lst.options[lst.options.length] = new Option(v[0], v[1]);

+			});

+		}

+	}

+};

+

+LinkDialog.preInit();

+tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/js/source_editor.js
@@ -1,1 +1,57 @@
+tinyMCEPopup.requireLangPack();

+tinyMCEPopup.onInit.add(onLoadInit);

+

+function saveContent() {

+	tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});

+	tinyMCEPopup.close();

+}

+

+function onLoadInit() {

+	tinyMCEPopup.resizeToInnerSize();

+

+	// Remove Gecko spellchecking

+	if (tinymce.isGecko)

+		document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");

+

+	document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});

+

+	if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {

+		setWrap('soft');

+		document.getElementById('wraped').checked = true;

+	}

+

+	resizeInputs();

+}

+

+function setWrap(val) {

+	var v, n, s = document.getElementById('htmlSource');

+

+	s.wrap = val;

+

+	if (!tinymce.isIE) {

+		v = s.value;

+		n = s.cloneNode(false);

+		n.setAttribute("wrap", val);

+		s.parentNode.replaceChild(n, s);

+		n.value = v;

+	}

+}

+

+function toggleWordWrap(elm) {

+	if (elm.checked)

+		setWrap('soft');

+	else

+		setWrap('off');

+}

+

+function resizeInputs() {

+	var vp = tinyMCEPopup.dom.getViewPort(window), el;

+

+	el = document.getElementById('htmlSource');

+

+	if (el) {

+		el.style.width = (vp.w - 20) + 'px';

+		el.style.height = (vp.h - 65) + 'px';

+	}

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js
@@ -1,1 +1,2 @@
+tinyMCE.addI18n('en.advanced_dlg', {"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character", "charmap_usage":"Use left and right arrows to navigate.","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","":""});
 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/link.htm
@@ -1,1 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advanced_dlg.link_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="../../utils/mctabs.js"></script>

+	<script type="text/javascript" src="../../utils/form_utils.js"></script>

+	<script type="text/javascript" src="../../utils/validate.js"></script>

+	<script type="text/javascript" src="js/link.js"></script>

+</head>

+<body id="link" style="display: none">

+<form onsubmit="LinkDialog.update();return false;" action="#">

+	<div class="tabs">

+		<ul>

+			<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>

+		</ul>

+	</div>

+

+	<div class="panel_wrapper">

+		<div id="general_panel" class="panel current">

+			<table border="0" cellpadding="4" cellspacing="0">

+				<tr>

+					<td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>

+					<td><table border="0" cellspacing="0" cellpadding="0"> 

+						<tr> 

+							<td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> 

+							<td id="hrefbrowsercontainer">&nbsp;</td>

+						</tr> 

+					</table></td>

+				</tr>

+				<tr>

+					<td><label for="link_list">{#advanced_dlg.link_list}</label></td>

+					<td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>

+				</tr>

+				<tr>

+					<td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>

+					<td><select id="target_list" name="target_list"></select></td>

+				</tr>

+				<tr>

+					<td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>

+					<td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>

+				</tr>

+				<tr>

+					<td><label for="class_list">{#class_name}</label></td>

+					<td><select id="class_list" name="class_list"></select></td>

+				</tr>

+			</table>

+		</div>

+	</div>

+

+	<div class="mceActionPanel">

+		<input type="submit" id="insert" name="insert" value="{#insert}" />

+		<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />

+	</div>

+</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/shortcuts.htm
@@ -1,1 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

+<html xmlns="http://www.w3.org/1999/xhtml">

+	<head>

+		<title>{#advanced_dlg.accessibility_help}</title>

+		<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+		<script type="text/javascript">tinyMCEPopup.requireLangPack();</script>

+	</head>

+	<body id="content">

+		<h1>{#advanced_dlg.accessibility_usage_title}</h1>

+		<h2>Toolbars</h2>

+		<p>Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys.

+		Press enter to activate a button and return focus to the editor.

+		Press escape to return focus to the editor without performing any actions.</p>

+		

+		<h2>Status Bar</h2>

+		<p>To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path.

+		Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.</p>

+		

+		<h2>Context Menu</h2>

+		<p>Press shift-F10 to activate the context menu. Use the up and down arrow keys to move between menu items. To open sub-menus press the right arrow key.

+		To close submenus press the left arrow key.  Press escape to close the context menu.</p>

+		

+		<h1>Keyboard Shortcuts</h1>

+		<table>

+			<thead>

+				<tr>

+					<th>Keystroke</th>

+					<th>Function</th>

+				</tr>

+			</thead>

+			<tbody>

+				<tr>

+					<td>Control-B</td><td>Bold</td>

+				</tr>

+				<tr>

+					<td>Control-I</td><td>Italic</td>

+				</tr>

+				<tr>

+					<td>Control-Z</td><td>Undo</td>

+				</tr>

+				<tr>

+					<td>Control-Y</td><td>Redo</td>

+				</tr>

+			</tbody>

+		</table>

+	</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/content.css
@@ -1,1 +1,51 @@
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}

+body {background:#FFF;}

+body.mceForceColors {background:#FFF; color:#000;}

+body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;}

+h1 {font-size: 2em}

+h2 {font-size: 1.5em}

+h3 {font-size: 1.17em}

+h4 {font-size: 1em}

+h5 {font-size: .83em}

+h6 {font-size: .75em}

+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}

+a.mceItemAnchor {display:inline-block; -webkit-user-select:all; -webkit-user-modify:read-only; -moz-user-select:all; -moz-user-modify:read-only; width:11px !important; height:11px !important; background:url(img/items.gif) no-repeat center center}

+span.mceItemNbsp {background: #DDD}

+td.mceSelected, th.mceSelected {background-color:#3399ff !important}

+img {border:0;}

+table, img, hr, .mceItemAnchor {cursor:default}

+table td, table th {cursor:text}

+ins {border-bottom:1px solid green; text-decoration: none; color:green}

+del {color:red; text-decoration:line-through}

+cite {border-bottom:1px dashed blue}

+acronym {border-bottom:1px dotted #CCC; cursor:help}

+abbr {border-bottom:1px dashed #CCC; cursor:help}

+

+/* IE */

+* html body {

+scrollbar-3dlight-color:#F0F0EE;

+scrollbar-arrow-color:#676662;

+scrollbar-base-color:#F0F0EE;

+scrollbar-darkshadow-color:#DDD;

+scrollbar-face-color:#E0E0DD;

+scrollbar-highlight-color:#F0F0EE;

+scrollbar-shadow-color:#F0F0EE;

+scrollbar-track-color:#F5F5F5;

+}

+

+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}

+font[face=mceinline] {font-family:inherit !important}

+*[contentEditable]:focus {outline:0}

+

+.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}

+.mceItemShockWave {background-image:url(../../img/shockwave.gif)}

+.mceItemFlash {background-image:url(../../img/flash.gif)}

+.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}

+.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}

+.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}

+.mceItemVideo {background-image:url(../../img/video.gif)}

+.mceItemAudio {background-image:url(../../img/video.gif)}

+.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)}

+.mceItemIframe {background-image:url(../../img/iframe.gif)}

+.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css
@@ -1,1 +1,118 @@
+/* Generic */

+body {

+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;

+scrollbar-3dlight-color:#F0F0EE;

+scrollbar-arrow-color:#676662;

+scrollbar-base-color:#F0F0EE;

+scrollbar-darkshadow-color:#DDDDDD;

+scrollbar-face-color:#E0E0DD;

+scrollbar-highlight-color:#F0F0EE;

+scrollbar-shadow-color:#F0F0EE;

+scrollbar-track-color:#F5F5F5;

+background:#F0F0EE;

+padding:0;

+margin:8px 8px 0 8px;

+}

+

+html {background:#F0F0EE;}

+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

+textarea {resize:none;outline:none;}

+a:link, a:visited {color:black;}

+a:hover {color:#2B6FB6;}

+.nowrap {white-space: nowrap}

+

+/* Forms */

+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}

+legend {color:#2B6FB6; font-weight:bold;}

+label.msg {display:none;}

+label.invalid {color:#EE0000; display:inline;}

+input.invalid {border:1px solid #EE0000;}

+input {background:#FFF; border:1px solid #CCC;}

+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

+input, select, textarea {border:1px solid #808080;}

+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}

+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}

+.input_noborder {border:0;}

+

+/* Buttons */

+#insert, #cancel, input.button, .updateButton {

+border:0; margin:0; padding:0;

+font-weight:bold;

+width:94px; height:26px;

+background:url(img/buttons.png) 0 -26px;

+cursor:pointer;

+padding-bottom:2px;

+float:left;

+}

+

+#insert {background:url(img/buttons.png) 0 -52px}

+#cancel {background:url(img/buttons.png) 0 0; float:right}

+

+/* Browse */

+a.pickcolor, a.browse {text-decoration:none}

+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}

+.mceOldBoxModel a.browse span {width:22px; height:20px;}

+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}

+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}

+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}

+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

+a.pickcolor:hover span {background-color:#B2BBD0;}

+a.pickcolor:hover span.disabled {}

+

+/* Charmap */

+table.charmap {border:1px solid #AAA; text-align:center}

+td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}

+#charmap a {display:block; color:#000; text-decoration:none; border:0}

+#charmap a:hover {background:#CCC;color:#2B6FB6}

+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}

+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}

+

+/* Source */

+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}

+.mceActionPanel {margin-top:5px;}

+

+/* Tabs classes */

+.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}

+.tabs ul {margin:0; padding:0; list-style:none;}

+.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}

+.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}

+.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}

+.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}

+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}

+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}

+

+/* Panels */

+.panel_wrapper div.panel {display:none;}

+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}

+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}

+

+/* Columns */

+.column {float:left;}

+.properties {width:100%;}

+.properties .column1 {}

+.properties .column2 {text-align:left;}

+

+/* Titles */

+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}

+h3 {font-size:14px;}

+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}

+

+/* Dialog specific */

+#link .panel_wrapper, #link div.current {height:125px;}

+#image .panel_wrapper, #image div.current {height:200px;}

+#plugintable thead {font-weight:bold; background:#DDD;}

+#plugintable, #about #plugintable td {border:1px solid #919B9C;}

+#plugintable {width:96%; margin-top:10px;}

+#pluginscontainer {height:290px; overflow:auto;}

+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}

+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}

+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}

+#colorpicker #light div {overflow:hidden;}

+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}

+#colorpicker .panel_wrapper div.current {height:175px;}

+#colorpicker #namedcolors {width:150px;}

+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}

+#colorpicker #colornamecontainer {margin-top:5px;}

+#colorpicker #picker_panel fieldset {margin:auto;width:325px;}

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/default/ui.css
@@ -1,1 +1,215 @@
+/* Reset */

+.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}

+.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}

+.defaultSkin table td {vertical-align:middle}

+

+/* Containers */

+.defaultSkin table {direction:ltr;background:transparent}

+.defaultSkin iframe {display:block;}

+.defaultSkin .mceToolbar {height:26px}

+.defaultSkin .mceLeft {text-align:left}

+.defaultSkin .mceRight {text-align:right}

+

+/* External */

+.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}

+.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}

+.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}

+

+/* Layout */

+.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}

+.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}

+.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}

+.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}

+.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top}

+.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}

+.defaultSkin .mceStatusbar {background:#F0F0EE; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}

+.defaultSkin .mceStatusbar div {float:left; margin:2px}

+.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}

+.defaultSkin .mceStatusbar a:hover {text-decoration:underline}

+.defaultSkin table.mceToolbar {margin-left:3px}

+.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}

+.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

+.defaultSkin td.mceCenter {text-align:center;}

+.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}

+.defaultSkin td.mceRight table {margin:0 0 0 auto;}

+

+/* Button */

+.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px}

+.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}

+.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}

+.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+.defaultSkin .mceButtonLabeled {width:auto}

+.defaultSkin .mceButtonLabeled span.mceIcon {float:left}

+.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}

+.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888}

+

+/* Separator */

+.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}

+

+/* ListBox */

+.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}

+.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}

+.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}

+.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}

+.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}

+.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}

+.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}

+.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}

+.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}

+.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}

+

+/* SplitButton */

+.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}

+.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}

+.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}

+.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);}

+.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}

+.defaultSkin .mceSplitButton span.mceOpen {display:none}

+.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}

+.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;}

+.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}

+.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}

+

+/* ColorSplitButton */

+.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}

+.defaultSkin .mceColorSplitMenu td {padding:2px}

+.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}

+.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}

+.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}

+.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}

+.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}

+.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}

+.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}

+

+/* Menu */

+.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}

+.defaultSkin .mceNoIcons span.mceIcon {width:0;}

+.defaultSkin .mceNoIcons a .mceText {padding-left:10px}

+.defaultSkin .mceMenu table {background:#FFF}

+.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}

+.defaultSkin .mceMenu td {height:20px}

+.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}

+.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}

+.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}

+.defaultSkin .mceMenu pre.mceText {font-family:Monospace}

+.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}

+.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}

+.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}

+.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}

+.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}

+.defaultSkin .mceMenuItemDisabled .mceText {color:#888}

+.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}

+.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}

+.defaultSkin .mceMenu span.mceMenuLine {display:none}

+.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}

+.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal}

+

+/* Progress,Resize */

+.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}

+.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}

+

+/* Formats */

+.defaultSkin .mce_formatPreview a {font-size:10px}

+.defaultSkin .mce_p span.mceText {}

+.defaultSkin .mce_address span.mceText {font-style:italic}

+.defaultSkin .mce_pre span.mceText {font-family:monospace}

+.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}

+.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}

+.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}

+.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}

+.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}

+.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}

+

+/* Theme */

+.defaultSkin span.mce_bold {background-position:0 0}

+.defaultSkin span.mce_italic {background-position:-60px 0}

+.defaultSkin span.mce_underline {background-position:-140px 0}

+.defaultSkin span.mce_strikethrough {background-position:-120px 0}

+.defaultSkin span.mce_undo {background-position:-160px 0}

+.defaultSkin span.mce_redo {background-position:-100px 0}

+.defaultSkin span.mce_cleanup {background-position:-40px 0}

+.defaultSkin span.mce_bullist {background-position:-20px 0}

+.defaultSkin span.mce_numlist {background-position:-80px 0}

+.defaultSkin span.mce_justifyleft {background-position:-460px 0}

+.defaultSkin span.mce_justifyright {background-position:-480px 0}

+.defaultSkin span.mce_justifycenter {background-position:-420px 0}

+.defaultSkin span.mce_justifyfull {background-position:-440px 0}

+.defaultSkin span.mce_anchor {background-position:-200px 0}

+.defaultSkin span.mce_indent {background-position:-400px 0}

+.defaultSkin span.mce_outdent {background-position:-540px 0}

+.defaultSkin span.mce_link {background-position:-500px 0}

+.defaultSkin span.mce_unlink {background-position:-640px 0}

+.defaultSkin span.mce_sub {background-position:-600px 0}

+.defaultSkin span.mce_sup {background-position:-620px 0}

+.defaultSkin span.mce_removeformat {background-position:-580px 0}

+.defaultSkin span.mce_newdocument {background-position:-520px 0}

+.defaultSkin span.mce_image {background-position:-380px 0}

+.defaultSkin span.mce_help {background-position:-340px 0}

+.defaultSkin span.mce_code {background-position:-260px 0}

+.defaultSkin span.mce_hr {background-position:-360px 0}

+.defaultSkin span.mce_visualaid {background-position:-660px 0}

+.defaultSkin span.mce_charmap {background-position:-240px 0}

+.defaultSkin span.mce_paste {background-position:-560px 0}

+.defaultSkin span.mce_copy {background-position:-700px 0}

+.defaultSkin span.mce_cut {background-position:-680px 0}

+.defaultSkin span.mce_blockquote {background-position:-220px 0}

+.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}

+.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}

+.defaultSkin span.mce_forecolorpicker {background-position:-720px 0}

+.defaultSkin span.mce_backcolorpicker {background-position:-760px 0}

+

+/* Plugins */

+.defaultSkin span.mce_advhr {background-position:-0px -20px}

+.defaultSkin span.mce_ltr {background-position:-20px -20px}

+.defaultSkin span.mce_rtl {background-position:-40px -20px}

+.defaultSkin span.mce_emotions {background-position:-60px -20px}

+.defaultSkin span.mce_fullpage {background-position:-80px -20px}

+.defaultSkin span.mce_fullscreen {background-position:-100px -20px}

+.defaultSkin span.mce_iespell {background-position:-120px -20px}

+.defaultSkin span.mce_insertdate {background-position:-140px -20px}

+.defaultSkin span.mce_inserttime {background-position:-160px -20px}

+.defaultSkin span.mce_absolute {background-position:-180px -20px}

+.defaultSkin span.mce_backward {background-position:-200px -20px}

+.defaultSkin span.mce_forward {background-position:-220px -20px}

+.defaultSkin span.mce_insert_layer {background-position:-240px -20px}

+.defaultSkin span.mce_insertlayer {background-position:-260px -20px}

+.defaultSkin span.mce_movebackward {background-position:-280px -20px}

+.defaultSkin span.mce_moveforward {background-position:-300px -20px}

+.defaultSkin span.mce_media {background-position:-320px -20px}

+.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}

+.defaultSkin span.mce_pastetext {background-position:-360px -20px}

+.defaultSkin span.mce_pasteword {background-position:-380px -20px}

+.defaultSkin span.mce_selectall {background-position:-400px -20px}

+.defaultSkin span.mce_preview {background-position:-420px -20px}

+.defaultSkin span.mce_print {background-position:-440px -20px}

+.defaultSkin span.mce_cancel {background-position:-460px -20px}

+.defaultSkin span.mce_save {background-position:-480px -20px}

+.defaultSkin span.mce_replace {background-position:-500px -20px}

+.defaultSkin span.mce_search {background-position:-520px -20px}

+.defaultSkin span.mce_styleprops {background-position:-560px -20px}

+.defaultSkin span.mce_table {background-position:-580px -20px}

+.defaultSkin span.mce_cell_props {background-position:-600px -20px}

+.defaultSkin span.mce_delete_table {background-position:-620px -20px}

+.defaultSkin span.mce_delete_col {background-position:-640px -20px}

+.defaultSkin span.mce_delete_row {background-position:-660px -20px}

+.defaultSkin span.mce_col_after {background-position:-680px -20px}

+.defaultSkin span.mce_col_before {background-position:-700px -20px}

+.defaultSkin span.mce_row_after {background-position:-720px -20px}

+.defaultSkin span.mce_row_before {background-position:-740px -20px}

+.defaultSkin span.mce_merge_cells {background-position:-760px -20px}

+.defaultSkin span.mce_table_props {background-position:-980px -20px}

+.defaultSkin span.mce_row_props {background-position:-780px -20px}

+.defaultSkin span.mce_split_cells {background-position:-800px -20px}

+.defaultSkin span.mce_template {background-position:-820px -20px}

+.defaultSkin span.mce_visualchars {background-position:-840px -20px}

+.defaultSkin span.mce_abbr {background-position:-860px -20px}

+.defaultSkin span.mce_acronym {background-position:-880px -20px}

+.defaultSkin span.mce_attribs {background-position:-900px -20px}

+.defaultSkin span.mce_cite {background-position:-920px -20px}

+.defaultSkin span.mce_del {background-position:-940px -20px}

+.defaultSkin span.mce_ins {background-position:-960px -20px}

+.defaultSkin span.mce_pagebreak {background-position:0 -40px}

+.defaultSkin span.mce_restoredraft {background-position:-20px -40px}

+.defaultSkin span.mce_spellchecker {background-position:-540px -20px}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css
@@ -1,1 +1,25 @@
+body, td, pre { margin:8px;}

+body.mceForceColors {background:#FFF; color:#000;}

+h1 {font-size: 2em}

+h2 {font-size: 1.5em}

+h3 {font-size: 1.17em}

+h4 {font-size: 1em}

+h5 {font-size: .83em}

+h6 {font-size: .75em}

+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}

+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(../default/img/items.gif) no-repeat 0 0;}

+span.mceItemNbsp {background: #DDD}

+td.mceSelected, th.mceSelected {background-color:#3399ff !important}

+img {border:0;}

+table, img, hr, .mceItemAnchor {cursor:default}

+table td, table th {cursor:text}

+ins {border-bottom:1px solid green; text-decoration: none; color:green}

+del {color:red; text-decoration:line-through}

+cite {border-bottom:1px dashed blue}

+acronym {border-bottom:1px dotted #CCC; cursor:help}

+abbr {border-bottom:1px dashed #CCC; cursor:help}

+

+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}

+font[face=mceinline] {font-family:inherit !important}

+*[contentEditable]:focus {outline:0}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
@@ -1,1 +1,106 @@
+/* Generic */

+body {

+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;

+background:#F0F0EE;
+color: black;

+padding:0;

+margin:8px 8px 0 8px;

+}

+

+html {background:#F0F0EE; color:#000;}

+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

+textarea {resize:none;outline:none;}

+a:link, a:visited {color:black;background-color:transparent;}

+a:hover {color:#2B6FB6;background-color:transparent;}

+.nowrap {white-space: nowrap}

+

+/* Forms */

+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}

+legend {color:#2B6FB6; font-weight:bold;}

+label.msg {display:none;}

+label.invalid {color:#EE0000; display:inline;background-color:transparent;}

+input.invalid {border:1px solid #EE0000;background-color:transparent;}

+input {background:#FFF; border:1px solid #CCC;color:black;}

+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

+input, select, textarea {border:1px solid #808080;}

+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}

+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}

+.input_noborder {border:0;}

+

+/* Buttons */

+#insert, #cancel, input.button, .updateButton {

+font-weight:bold;

+width:94px; height:23px;

+cursor:pointer;

+padding-bottom:2px;

+float:left;

+}

+

+#cancel {float:right}

+

+/* Browse */

+a.pickcolor, a.browse {text-decoration:none}

+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}

+.mceOldBoxModel a.browse span {width:22px; height:20px;}

+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}

+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}

+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}

+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

+a.pickcolor:hover span {background-color:#B2BBD0;}

+a.pickcolor:hover span.disabled {}

+

+/* Charmap */

+table.charmap {border:1px solid #AAA; text-align:center}

+td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}

+#charmap a {display:block; color:#000; text-decoration:none; border:0}

+#charmap a:hover {background:#CCC;color:#2B6FB6}

+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}

+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}

+

+/* Source */

+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}

+.mceActionPanel {margin-top:5px;}

+

+/* Tabs classes */

+.tabs {width:100%; height:18px; line-height:normal;}

+.tabs ul {margin:0; padding:0; list-style:none;}

+.tabs li {float:left; border: 1px solid black; border-bottom:0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block; cursor:pointer;}

+.tabs li.current {font-weight: bold; margin-right:2px;}

+.tabs span {float:left; display:block; padding:0px 10px 0 0;}

+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}

+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}

+

+/* Panels */

+.panel_wrapper div.panel {display:none;}

+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}

+.panel_wrapper {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;}

+

+/* Columns */

+.column {float:left;}

+.properties {width:100%;}

+.properties .column1 {}

+.properties .column2 {text-align:left;}

+

+/* Titles */

+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}

+h3 {font-size:14px;}

+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}

+

+/* Dialog specific */

+#link .panel_wrapper, #link div.current {height:125px;}

+#image .panel_wrapper, #image div.current {height:200px;}

+#plugintable thead {font-weight:bold; background:#DDD;}

+#plugintable, #about #plugintable td {border:1px solid #919B9C;}

+#plugintable {width:96%; margin-top:10px;}

+#pluginscontainer {height:290px; overflow:auto;}

+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}

+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}

+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}

+#colorpicker #light div {overflow:hidden;}

+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}

+#colorpicker .panel_wrapper div.current {height:175px;}

+#colorpicker #namedcolors {width:150px;}

+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}

+#colorpicker #colornamecontainer {margin-top:5px;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
@@ -1,1 +1,103 @@
+/* Reset */

+.highcontrastSkin table, .highcontrastSkin tbody, .highcontrastSkin a, .highcontrastSkin img, .highcontrastSkin tr, .highcontrastSkin div, .highcontrastSkin td, .highcontrastSkin iframe, .highcontrastSkin span, .highcontrastSkin *, .highcontrastSkin .mceText {border:0; margin:0; padding:0; vertical-align:baseline; border-collapse:separate;}

+.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;}

+.highcontrastSkin table td {vertical-align:middle}

+

+.highcontrastSkin .mceIconOnly {display: block !important;}

+

+/* External */

+.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;}

+.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}

+.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;}

+

+/* Layout */

+.highcontrastSkin table.mceLayout {border: 1px solid;}

+.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid}

+.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline}

+.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;}

+.highcontrastSkin .mceStatusbar div {float:left}

+.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0}

+

+.highcontrastSkin .mceToolbar td { display: inline-block; float: left;}

+.highcontrastSkin .mceToolbar tr { display: block;}

+.highcontrastSkin .mceToolbar table { display: block; }

+

+/* Button */

+

+.highcontrastSkin .mceButton { display:block; margin: 2px; padding: 5px 10px;border: 1px solid; border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; -ms-border-radius: 3px; height: 2em;}

+.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em}

+.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}

+.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;}

+

+/* Separator */

+.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;}

+

+/* ListBox */

+.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;}

+.highcontrastSkin .mceListBox .mceText {padding: 5px 6px;  line-height: 2em; width: 15ex; overflow: hidden;}

+.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}

+.highcontrastSkin .mceListBox a.mceText { padding: 5px 10px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;}

+.highcontrastSkin .mceListBox a.mceOpen { padding: 5px 4px; display: block; height: 2em; line-height: 2em; border: 1px solid; border-left: 0; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;}

+.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;}

+.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;}

+

+.highcontrastSkin .mceListBoxMenu {overflow-y:auto}

+

+/* SplitButton */

+.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+

+.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;}

+.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;}

+.highcontrastSkin .mceSplitButton tr { display: table-row; }

+.highcontrastSkin table.mceSplitButton  { display: table; }

+.highcontrastSkin .mceSplitButton a.mceAction { padding: 5px 10px; display: block; height: 2em; line-height: 2em; overflow: hidden; border: 1px solid; border-right: 0; border-radius: 3px 0px 0px 3px; -moz-border-radius: 3px 0px 0px 3px; -webkit-border-radius: 3px 0px 0px 3px; -ms-border-radius: 3px 0px 0px 3px;}

+.highcontrastSkin .mceSplitButton a.mceOpen { padding: 5px 4px;  display: block; height: 2em; line-height: 2em; border: 1px solid; border-radius: 0px 3px 3px 0px; -moz-border-radius: 0px 3px 3px 0px; -webkit-border-radius: 0px 3px 3px 0px; -ms-border-radius: 0px 3px 3px 0px;}

+.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; } 

+.highcontrastSkin .mceSplitButton:focus a.mceAction, .highcontrastSkin .mceSplitButton:active a.mceAction { border-width: 5px; border-right-width: 1px; padding: 1px 10px 1px 6px;-webkit-focus-ring-color:none;outline:none;}

+.highcontrastSkin .mceSplitButton:focus a.mceOpen, .highcontrastSkin .mceSplitButton:active a.mceOpen { border-width: 5px; border-left-width: 1px; padding: 1px 0px 1px 4px;-webkit-focus-ring-color:none;outline:none;}

+

+/* Menu */

+.highcontrastSkin .mceNoIcons span.mceIcon {width:0;}

+.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; }

+.highcontrastSkin .mceMenu table {background:white; color: black}

+.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px}

+.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black}

+.highcontrastSkin .mceMenu td {height:2em}

+.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;}

+.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;}

+.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace}

+.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;}

+.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px}

+.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid}

+.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px}

+.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";}

+.highcontrastSkin .mceMenu span.mceMenuLine {display:none}

+.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"}

+.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal}

+

+/* ColorSplitButton */

+.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000}

+.highcontrastSkin .mceColorSplitMenu td {padding:2px}

+.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;}

+.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}

+.highcontrastSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}

+.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2}

+.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;}

+.highcontrastSkin .mceColorPreview {display:none;}

+.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden}

+

+/* Progress,Resize */

+.highcontrastSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}

+.highcontrastSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}

+

+/* Formats */

+.highcontrastSkin .mce_p span.mceText {}

+.highcontrastSkin .mce_address span.mceText {font-style:italic}

+.highcontrastSkin .mce_pre span.mceText {font-family:monospace}

+.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}

+.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}

+.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}

+.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}

+.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}

+.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css
@@ -1,1 +1,49 @@
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}

+body {background:#FFF;}

+body.mceForceColors {background:#FFF; color:#000;}

+h1 {font-size: 2em}

+h2 {font-size: 1.5em}

+h3 {font-size: 1.17em}

+h4 {font-size: 1em}

+h5 {font-size: .83em}

+h6 {font-size: .75em}

+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}

+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(../default/img/items.gif) no-repeat 0 0;}

+span.mceItemNbsp {background: #DDD}

+td.mceSelected, th.mceSelected {background-color:#3399ff !important}

+img {border:0;}

+table, img, hr, .mceItemAnchor {cursor:default}

+table td, table th {cursor:text}

+ins {border-bottom:1px solid green; text-decoration: none; color:green}

+del {color:red; text-decoration:line-through}

+cite {border-bottom:1px dashed blue}

+acronym {border-bottom:1px dotted #CCC; cursor:help}

+abbr {border-bottom:1px dashed #CCC; cursor:help}

+

+/* IE */

+* html body {

+scrollbar-3dlight-color:#F0F0EE;

+scrollbar-arrow-color:#676662;

+scrollbar-base-color:#F0F0EE;

+scrollbar-darkshadow-color:#DDD;

+scrollbar-face-color:#E0E0DD;

+scrollbar-highlight-color:#F0F0EE;

+scrollbar-shadow-color:#F0F0EE;

+scrollbar-track-color:#F5F5F5;

+}

+

+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}

+font[face=mceinline] {font-family:inherit !important}

+*[contentEditable]:focus {outline:0}

+

+.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}

+.mceItemShockWave {background-image:url(../../img/shockwave.gif)}

+.mceItemFlash {background-image:url(../../img/flash.gif)}

+.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}

+.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}

+.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}

+.mceItemVideo {background-image:url(../../img/video.gif)}

+.mceItemAudio {background-image:url(../../img/video.gif)}

+.mceItemIframe {background-image:url(../../img/iframe.gif)}

+.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
@@ -1,1 +1,118 @@
+/* Generic */

+body {

+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;

+scrollbar-3dlight-color:#F0F0EE;

+scrollbar-arrow-color:#676662;

+scrollbar-base-color:#F0F0EE;

+scrollbar-darkshadow-color:#DDDDDD;

+scrollbar-face-color:#E0E0DD;

+scrollbar-highlight-color:#F0F0EE;

+scrollbar-shadow-color:#F0F0EE;

+scrollbar-track-color:#F5F5F5;

+background:#F0F0EE;

+padding:0;

+margin:8px 8px 0 8px;

+}

+

+html {background:#F0F0EE;}

+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

+textarea {resize:none;outline:none;}

+a:link, a:visited {color:black;}

+a:hover {color:#2B6FB6;}

+.nowrap {white-space: nowrap}

+

+/* Forms */

+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}

+legend {color:#2B6FB6; font-weight:bold;}

+label.msg {display:none;}

+label.invalid {color:#EE0000; display:inline;}

+input.invalid {border:1px solid #EE0000;}

+input {background:#FFF; border:1px solid #CCC;}

+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

+input, select, textarea {border:1px solid #808080;}

+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}

+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}

+.input_noborder {border:0;}

+

+/* Buttons */

+#insert, #cancel, input.button, .updateButton {

+border:0; margin:0; padding:0;

+font-weight:bold;

+width:94px; height:26px;

+background:url(../default/img/buttons.png) 0 -26px;

+cursor:pointer;

+padding-bottom:2px;

+float:left;

+}

+

+#insert {background:url(../default/img/buttons.png) 0 -52px}

+#cancel {background:url(../default/img/buttons.png) 0 0; float:right}

+

+/* Browse */

+a.pickcolor, a.browse {text-decoration:none}

+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}

+.mceOldBoxModel a.browse span {width:22px; height:20px;}

+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}

+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}

+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}

+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}

+a.pickcolor:hover span {background-color:#B2BBD0;}

+a.pickcolor:hover span.disabled {}

+

+/* Charmap */

+table.charmap {border:1px solid #AAA; text-align:center}

+td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}

+#charmap a {display:block; color:#000; text-decoration:none; border:0}

+#charmap a:hover {background:#CCC;color:#2B6FB6}

+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}

+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}

+

+/* Source */

+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}

+.mceActionPanel {margin-top:5px;}

+

+/* Tabs classes */

+.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}

+.tabs ul {margin:0; padding:0; list-style:none;}

+.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}

+.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}

+.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}

+.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}

+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}

+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}

+

+/* Panels */

+.panel_wrapper div.panel {display:none;}

+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}

+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}

+

+/* Columns */

+.column {float:left;}

+.properties {width:100%;}

+.properties .column1 {}

+.properties .column2 {text-align:left;}

+

+/* Titles */

+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}

+h3 {font-size:14px;}

+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}

+

+/* Dialog specific */

+#link .panel_wrapper, #link div.current {height:125px;}

+#image .panel_wrapper, #image div.current {height:200px;}

+#plugintable thead {font-weight:bold; background:#DDD;}

+#plugintable, #about #plugintable td {border:1px solid #919B9C;}

+#plugintable {width:96%; margin-top:10px;}

+#pluginscontainer {height:290px; overflow:auto;}

+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}

+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}

+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}

+#colorpicker #light div {overflow:hidden;}

+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}

+#colorpicker .panel_wrapper div.current {height:175px;}

+#colorpicker #namedcolors {width:150px;}

+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}

+#colorpicker #colornamecontainer {margin-top:5px;}

+#colorpicker #picker_panel fieldset {margin:auto;width:325px;}

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png differ
 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
@@ -1,1 +1,218 @@
+/* Reset */

+.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}

+.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}

+.o2k7Skin table td {vertical-align:middle}

+

+/* Containers */

+.o2k7Skin table {background:transparent}

+.o2k7Skin iframe {display:block;}

+.o2k7Skin .mceToolbar {height:26px}

+

+/* External */

+.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}

+.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}

+.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}

+

+/* Layout */

+.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}

+.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}

+.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}

+.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}

+.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}

+.o2k7Skin td.mceToolbar{background:#E5EFFD}

+.o2k7Skin .mceStatusbar {background:#E5EFFD; display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}

+.o2k7Skin .mceStatusbar div {float:left; padding:2px}

+.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}

+.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}

+.o2k7Skin table.mceToolbar {margin-left:3px}

+.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}

+.o2k7Skin .mceToolbar td.mceFirst span {margin:0}

+.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}

+.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}

+.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}

+.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

+.o2k7Skin td.mceCenter {text-align:center;}

+.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}

+.o2k7Skin td.mceRight table {margin:0 0 0 auto;}

+

+/* Button */

+.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}

+.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}

+.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}

+.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}

+.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}

+.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+.o2k7Skin .mceButtonLabeled {width:auto}

+.o2k7Skin .mceButtonLabeled span.mceIcon {float:left}

+.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}

+.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888}

+

+/* Separator */

+.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}

+

+/* ListBox */

+.o2k7Skin .mceListBox  {padding-left: 3px}

+.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}

+.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}

+.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}

+.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}

+.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}

+.o2k7Skin .mceListBoxDisabled .mceText {color:gray}

+.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden; margin-left:3px}

+.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}

+.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}

+

+/* SplitButton */

+.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px; direction:ltr}

+.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}

+.o2k7Skin .mceSplitButton a.mceAction {width:22px}

+.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)}

+.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}

+.o2k7Skin .mceSplitButton span.mceOpen {display:none}

+.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}

+.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px}

+.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}

+

+/* ColorSplitButton */

+.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}

+.o2k7Skin .mceColorSplitMenu td {padding:2px}

+.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}

+.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}

+.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}

+.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}

+.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}

+.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden}

+.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden}

+

+/* Menu */

+.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}

+.o2k7Skin .mceNoIcons span.mceIcon {width:0;}

+.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}

+.o2k7Skin .mceMenu table {background:#FFF}

+.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}

+.o2k7Skin .mceMenu td {height:20px}

+.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}

+.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}

+.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}

+.o2k7Skin .mceMenu pre.mceText {font-family:Monospace}

+.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}

+.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}

+.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}

+.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}

+.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}

+.o2k7Skin .mceMenuItemDisabled .mceText {color:#888}

+.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}

+.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}

+.o2k7Skin .mceMenu span.mceMenuLine {display:none}

+.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}

+.o2k7Skin .mceMenuItem td, .o2k7Skin .mceMenuItem th {line-height: normal}

+

+/* Progress,Resize */

+.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}

+.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}

+

+/* Formats */

+.o2k7Skin .mce_formatPreview a {font-size:10px}

+.o2k7Skin .mce_p span.mceText {}

+.o2k7Skin .mce_address span.mceText {font-style:italic}

+.o2k7Skin .mce_pre span.mceText {font-family:monospace}

+.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}

+.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}

+.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}

+.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}

+.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}

+.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}

+

+/* Theme */

+.o2k7Skin span.mce_bold {background-position:0 0}

+.o2k7Skin span.mce_italic {background-position:-60px 0}

+.o2k7Skin span.mce_underline {background-position:-140px 0}

+.o2k7Skin span.mce_strikethrough {background-position:-120px 0}

+.o2k7Skin span.mce_undo {background-position:-160px 0}

+.o2k7Skin span.mce_redo {background-position:-100px 0}

+.o2k7Skin span.mce_cleanup {background-position:-40px 0}

+.o2k7Skin span.mce_bullist {background-position:-20px 0}

+.o2k7Skin span.mce_numlist {background-position:-80px 0}

+.o2k7Skin span.mce_justifyleft {background-position:-460px 0}

+.o2k7Skin span.mce_justifyright {background-position:-480px 0}

+.o2k7Skin span.mce_justifycenter {background-position:-420px 0}

+.o2k7Skin span.mce_justifyfull {background-position:-440px 0}

+.o2k7Skin span.mce_anchor {background-position:-200px 0}

+.o2k7Skin span.mce_indent {background-position:-400px 0}

+.o2k7Skin span.mce_outdent {background-position:-540px 0}

+.o2k7Skin span.mce_link {background-position:-500px 0}

+.o2k7Skin span.mce_unlink {background-position:-640px 0}

+.o2k7Skin span.mce_sub {background-position:-600px 0}

+.o2k7Skin span.mce_sup {background-position:-620px 0}

+.o2k7Skin span.mce_removeformat {background-position:-580px 0}

+.o2k7Skin span.mce_newdocument {background-position:-520px 0}

+.o2k7Skin span.mce_image {background-position:-380px 0}

+.o2k7Skin span.mce_help {background-position:-340px 0}

+.o2k7Skin span.mce_code {background-position:-260px 0}

+.o2k7Skin span.mce_hr {background-position:-360px 0}

+.o2k7Skin span.mce_visualaid {background-position:-660px 0}

+.o2k7Skin span.mce_charmap {background-position:-240px 0}

+.o2k7Skin span.mce_paste {background-position:-560px 0}

+.o2k7Skin span.mce_copy {background-position:-700px 0}

+.o2k7Skin span.mce_cut {background-position:-680px 0}

+.o2k7Skin span.mce_blockquote {background-position:-220px 0}

+.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}

+.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}

+.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0}

+.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0}

+

+/* Plugins */

+.o2k7Skin span.mce_advhr {background-position:-0px -20px}

+.o2k7Skin span.mce_ltr {background-position:-20px -20px}

+.o2k7Skin span.mce_rtl {background-position:-40px -20px}

+.o2k7Skin span.mce_emotions {background-position:-60px -20px}

+.o2k7Skin span.mce_fullpage {background-position:-80px -20px}

+.o2k7Skin span.mce_fullscreen {background-position:-100px -20px}

+.o2k7Skin span.mce_iespell {background-position:-120px -20px}

+.o2k7Skin span.mce_insertdate {background-position:-140px -20px}

+.o2k7Skin span.mce_inserttime {background-position:-160px -20px}

+.o2k7Skin span.mce_absolute {background-position:-180px -20px}

+.o2k7Skin span.mce_backward {background-position:-200px -20px}

+.o2k7Skin span.mce_forward {background-position:-220px -20px}

+.o2k7Skin span.mce_insert_layer {background-position:-240px -20px}

+.o2k7Skin span.mce_insertlayer {background-position:-260px -20px}

+.o2k7Skin span.mce_movebackward {background-position:-280px -20px}

+.o2k7Skin span.mce_moveforward {background-position:-300px -20px}

+.o2k7Skin span.mce_media {background-position:-320px -20px}

+.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}

+.o2k7Skin span.mce_pastetext {background-position:-360px -20px}

+.o2k7Skin span.mce_pasteword {background-position:-380px -20px}

+.o2k7Skin span.mce_selectall {background-position:-400px -20px}

+.o2k7Skin span.mce_preview {background-position:-420px -20px}

+.o2k7Skin span.mce_print {background-position:-440px -20px}

+.o2k7Skin span.mce_cancel {background-position:-460px -20px}

+.o2k7Skin span.mce_save {background-position:-480px -20px}

+.o2k7Skin span.mce_replace {background-position:-500px -20px}

+.o2k7Skin span.mce_search {background-position:-520px -20px}

+.o2k7Skin span.mce_styleprops {background-position:-560px -20px}

+.o2k7Skin span.mce_table {background-position:-580px -20px}

+.o2k7Skin span.mce_cell_props {background-position:-600px -20px}

+.o2k7Skin span.mce_delete_table {background-position:-620px -20px}

+.o2k7Skin span.mce_delete_col {background-position:-640px -20px}

+.o2k7Skin span.mce_delete_row {background-position:-660px -20px}

+.o2k7Skin span.mce_col_after {background-position:-680px -20px}

+.o2k7Skin span.mce_col_before {background-position:-700px -20px}

+.o2k7Skin span.mce_row_after {background-position:-720px -20px}

+.o2k7Skin span.mce_row_before {background-position:-740px -20px}

+.o2k7Skin span.mce_merge_cells {background-position:-760px -20px}

+.o2k7Skin span.mce_table_props {background-position:-980px -20px}

+.o2k7Skin span.mce_row_props {background-position:-780px -20px}

+.o2k7Skin span.mce_split_cells {background-position:-800px -20px}

+.o2k7Skin span.mce_template {background-position:-820px -20px}

+.o2k7Skin span.mce_visualchars {background-position:-840px -20px}

+.o2k7Skin span.mce_abbr {background-position:-860px -20px}

+.o2k7Skin span.mce_acronym {background-position:-880px -20px}

+.o2k7Skin span.mce_attribs {background-position:-900px -20px}

+.o2k7Skin span.mce_cite {background-position:-920px -20px}

+.o2k7Skin span.mce_del {background-position:-940px -20px}

+.o2k7Skin span.mce_ins {background-position:-960px -20px}

+.o2k7Skin span.mce_pagebreak {background-position:0 -40px}

+.o2k7Skin span.mce_restoredraft {background-position:-20px -40px}

+.o2k7Skin span.mce_spellchecker {background-position:-540px -20px}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
@@ -1,1 +1,8 @@
-
+/* Black */

+.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)}

+.o2k7SkinBlack td.mceToolbar, .o2k7SkinBlack td.mceStatusbar, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}

+.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}

+.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}

+.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;}

+.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}

+.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1}

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
@@ -1,1 +1,6 @@
+/* Silver */

+.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)}

+.o2k7SkinSilver td.mceToolbar, .o2k7SkinSilver td.mceStatusbar, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}

+.o2k7SkinSilver .mceListBox .mceText {background:#FFF}

+.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/advanced/source_editor.htm
@@ -1,1 +1,26 @@
+<html xmlns="http://www.w3.org/1999/xhtml">

+<head>

+	<title>{#advanced_dlg.code_title}</title>

+	<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

+	<script type="text/javascript" src="js/source_editor.js"></script>

+</head>

+<body onresize="resizeInputs();" style="display:none; overflow:hidden;">

+	<form name="source" onsubmit="saveContent();return false;" action="#">

+		<div style="float: left" class="title"><label for="htmlSource">{#advanced_dlg.code_title}</label></div>

+

+		<div id="wrapline" style="float: right">

+			<input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>

+		</div>

+

+		<br style="clear: both" />

+

+		<textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>

+

+		<div class="mceActionPanel">

+			<input type="submit" role="button" name="insert" value="{#update}" id="insert" />

+			<input type="button" role="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />

+		</div>

+	</form>

+</body>

+</html>

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/simple/editor_template.js
@@ -1,1 +1,1 @@
-
+(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.contentCSS.push(d+"/skins/"+f.skin+"/content.css");c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})})});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/simple/editor_template_src.js
@@ -1,1 +1,84 @@
-
+/**

+ * editor_template_src.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+(function() {

+	var DOM = tinymce.DOM;

+

+	// Tell it to load theme specific language pack(s)

+	tinymce.ThemeManager.requireLangPack('simple');

+

+	tinymce.create('tinymce.themes.SimpleTheme', {

+		init : function(ed, url) {

+			var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;

+

+			t.editor = ed;

+			ed.contentCSS.push(url + "/skins/" + s.skin + "/content.css");

+

+			ed.onInit.add(function() {

+				ed.onNodeChange.add(function(ed, cm) {

+					tinymce.each(states, function(c) {

+						cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));

+					});

+				});

+			});

+

+			DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");

+		},

+

+		renderUI : function(o) {

+			var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;

+

+			n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);

+			n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});

+			n = tb = DOM.add(n, 'tbody');

+

+			// Create iframe container

+			n = DOM.add(tb, 'tr');

+			n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});

+

+			// Create toolbar container

+			n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});

+

+			// Create toolbar

+			tb = t.toolbar = cf.createToolbar("tools1");

+			tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));

+			tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));

+			tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));

+			tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));

+			tb.add(cf.createSeparator());

+			tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));

+			tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));

+			tb.add(cf.createSeparator());

+			tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));

+			tb.add(cf.createSeparator());

+			tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));

+			tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));

+			tb.renderTo(n);

+

+			return {

+				iframeContainer : ic,

+				editorContainer : ed.id + '_container',

+				sizeContainer : sc,

+				deltaHeight : -20

+			};

+		},

+

+		getInfo : function() {

+			return {

+				longname : 'Simple theme',

+				author : 'Moxiecode Systems AB',

+				authorurl : 'http://tinymce.moxiecode.com',

+				version : tinymce.majorVersion + "." + tinymce.minorVersion

+			}

+		}

+	});

+

+	tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme);

+})();

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/simple/img/icons.gif differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/simple/langs/en.js
@@ -1,1 +1,1 @@
-
+tinyMCE.addI18n('en.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/content.css
@@ -1,1 +1,26 @@
+body, td, pre {

+	font-family: Verdana, Arial, Helvetica, sans-serif;

+	font-size: 10px;

+}

+

+body {

+	background-color: #FFFFFF;

+}

+

+.mceVisualAid {

+	border: 1px dashed #BBBBBB;

+}

+

+/* MSIE specific */

+

+* html body {

+	scrollbar-3dlight-color: #F0F0EE;

+	scrollbar-arrow-color: #676662;

+	scrollbar-base-color: #F0F0EE;

+	scrollbar-darkshadow-color: #DDDDDD;

+	scrollbar-face-color: #E0E0DD;

+	scrollbar-highlight-color: #F0F0EE;

+	scrollbar-shadow-color: #F0F0EE;

+	scrollbar-track-color: #F5F5F5;	

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/simple/skins/default/ui.css
@@ -1,1 +1,33 @@
+/* Reset */

+.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}

+

+/* Containers */

+.defaultSimpleSkin {position:relative}

+.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}

+.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}

+.defaultSimpleSkin .mceToolbar {height:24px;}

+

+/* Layout */

+.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}

+.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

+

+/* Button */

+.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}

+.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}

+.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}

+.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+

+/* Separator */

+.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}

+

+/* Theme */

+.defaultSimpleSkin span.mce_bold {background-position:0 0}

+.defaultSimpleSkin span.mce_italic {background-position:-60px 0}

+.defaultSimpleSkin span.mce_underline {background-position:-140px 0}

+.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}

+.defaultSimpleSkin span.mce_undo {background-position:-160px 0}

+.defaultSimpleSkin span.mce_redo {background-position:-100px 0}

+.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}

+.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}

+.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css
@@ -1,1 +1,18 @@
+body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}

+

+body {background: #FFF;}

+.mceVisualAid {border: 1px dashed #BBB;}

+

+/* IE */

+

+* html body {

+scrollbar-3dlight-color: #F0F0EE;

+scrollbar-arrow-color: #676662;

+scrollbar-base-color: #F0F0EE;

+scrollbar-darkshadow-color: #DDDDDD;

+scrollbar-face-color: #E0E0DD;

+scrollbar-highlight-color: #F0F0EE;

+scrollbar-shadow-color: #F0F0EE;

+scrollbar-track-color: #F5F5F5;	

+}

 

 Binary files /dev/null and b/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png differ
--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css
@@ -1,1 +1,36 @@
+/* Reset */

+.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}

+

+/* Containers */

+.o2k7SimpleSkin {position:relative}

+.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}

+.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}

+.o2k7SimpleSkin .mceToolbar {height:26px;}

+

+/* Layout */

+.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }

+.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}

+.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}

+.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}

+

+/* Button */

+.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}

+.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}

+.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}

+.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}

+.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}

+

+/* Separator */

+.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}

+

+/* Theme */

+.o2k7SimpleSkin span.mce_bold {background-position:0 0}

+.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}

+.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}

+.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}

+.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}

+.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}

+.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}

+.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}

+.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/tiny_mce.js
@@ -1,1 +1,1 @@
-
+(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"4.8",releaseDate:"2012-02-02",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=d.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName);s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;if(d.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m<f.length;m++){if(r=f[m].href){if(/^https?:\/\/[^\/]+$/.test(r)){r+="/"}k=r?r.match(/.*\//)[0]:""}}function h(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){s.suffix="_src"}if((j=i.src.indexOf("?"))!=-1){s.query=i.src.substring(j+1)}s.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(k&&s.baseURL.indexOf("://")==-1&&s.baseURL.indexOf("/")!==0){s.baseURL=k+s.baseURL}return s.baseURL}return null}f=q.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}l=q.getElementsByTagName("head")[0];if(l){f=l.getElementsByTagName("script");for(m=0;m<f.length;m++){if(h(f[m])){return}}}return},is:function(g,f){if(!f){return g!==e}if(f=="array"&&(g.hasOwnProperty&&g instanceof Array)){return true}return typeof(g)==f},makeMap:function(f,j,h){var g;f=f||[];j=j||",";if(typeof(f)=="string"){f=f.split(j)}h=h||{};g=f.length;while(g--){h[f[g]]={}}return h},each:function(i,f,h){var j,g;if(!i){return 0}h=h||i;if(i.length!==e){for(j=0,g=i.length;j<g;j++){if(f.call(h,i[j],j,i)===false){return 0}}}else{for(j in i){if(i.hasOwnProperty(j)){if(f.call(h,i[j],j,i)===false){return 0}}}}return 1},map:function(g,h){var i=[];b.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];b.each(g,function(f){if(!h||h(f)){i.push(f)}});return i},inArray:function(g,h){var j,f;if(g){for(j=0,f=g.length;j<f;j++){if(g[j]===h){return j}}}return -1},extend:function(k,j){var h,g,f=arguments;for(h=1,g=f.length;h<g;h++){j=f[h];b.each(j,function(i,l){if(i!==e){k[l]=i}})}return k},trim:function(f){return(f?""+f:"").replace(a,"")},create:function(o,f,j){var n=this,g,i,k,l,h,m=0;o=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);k=o[3].match(/(^|\.)(\w+)$/i)[2];i=n.createNS(o[3].replace(/\.\w+$/,""),j);if(i[k]){return}if(o[2]=="static"){i[k]=f;if(this.onCreate){this.onCreate(o[2],o[3],i[k])}return}if(!f[k]){f[k]=function(){};m=1}i[k]=f[k];n.extend(i[k].prototype,f);if(o[5]){g=n.resolve(o[5]).prototype;l=o[5].match(/\.(\w+)$/i)[1];h=i[k];if(m){i[k]=function(){return g[l].apply(this,arguments)}}else{i[k]=function(){this.parent=g[l];return h.apply(this,arguments)}}i[k].prototype[k]=i[k];n.each(g,function(p,q){i[k].prototype[q]=g[q]});n.each(f,function(p,q){if(g[q]){i[k].prototype[q]=function(){this.parent=g[q];return p.apply(this,arguments)}}else{if(q!=k){i[k].prototype[q]=p}}})}n.each(f["static"],function(p,q){i[k][q]=p});if(this.onCreate){this.onCreate(o[2],o[3],i[k].prototype)}},walk:function(i,h,j,g){g=g||this;if(i){if(j){i=i[j]}b.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}b.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0;g<j.length;g++){f=j[g];if(!h[f]){h[f]={}}h=h[f]}return h},resolve:function(j,h){var g,f;h=h||d;j=j.split(".");for(g=0,f=j.length;g<f;g++){h=h[j[g]];if(!h){break}}return h},addUnload:function(j,i){var h=this;j={func:j,scope:i||this};if(!h.unloads){function g(){var f=h.unloads,l,m;if(f){for(m in f){l=f[m];if(l&&l.func){l.func.call(l.scope,1)}}if(d.detachEvent){d.detachEvent("onbeforeunload",k);d.detachEvent("onunload",g)}else{if(d.removeEventListener){d.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(d.CollectGarbage){CollectGarbage()}}}function k(){var l=document;if(l.readyState=="interactive"){function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l){l.attachEvent("onstop",f)}d.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}if(d.attachEvent){d.attachEvent("onunload",g);d.attachEvent("onbeforeunload",k)}else{if(d.addEventListener){d.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;b.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){return f?b.map(f.split(g||","),b.trim):f},_addVer:function(g){var f;if(!this.query){return g}f=(g.indexOf("?")==-1?"?":"&")+this.query;if(g.indexOf("#")==-1){return g+f}return g.replace("#",f+"#")},_replace:function(h,f,g){if(c){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===e){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};b._init();d.tinymce=d.tinyMCE=b})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d.length>0?d:[g.scope]);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();(function(){function serialize(o,quote){var i,v,t;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&o instanceof Array){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(i in o){if(o.hasOwnProperty(i)){v+=typeof o[i]!="function"?(v.length>1?","+quote:quote)+i+quote+":"+serialize(o[i],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={DELETE:46,BACKSPACE:8,ENTER:13,TAB:9,SPACEBAR:32,UP:38,DOWN:40,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey}}})(tinymce);(function(l){var j=l.VK,k=j.BACKSPACE,h=j.DELETE;function c(n){var p=n.dom,o=n.selection;n.onKeyDown.add(function(r,v){var q,x,t,u,s;s=v.keyCode==h;if((s||v.keyCode==k)&&!j.modifierPressed(v)){v.preventDefault();q=o.getRng();x=p.getParent(q.startContainer,p.isBlock);if(s){x=p.getNext(x,p.isBlock)}if(x){t=x.firstChild;while(t&&t.nodeType==3&&t.nodeValue.length==0){t=t.nextSibling}if(t&&t.nodeName==="SPAN"){u=t.cloneNode(false)}}r.getDoc().execCommand(s?"ForwardDelete":"Delete",false,null);x=p.getParent(q.startContainer,p.isBlock);l.each(p.select("span.Apple-style-span,font.Apple-style-span",x),function(y){var z=o.getBookmark();if(u){p.replace(u.cloneNode(false),y,true)}else{p.remove(y,true)}o.moveToBookmark(z)})}})}function d(n){n.onKeyUp.add(function(o,q){var p=q.keyCode;if(p==h||p==k){if(o.dom.isEmpty(o.getBody())){o.setContent("",{format:"raw"});o.nodeChanged();return}}})}function b(n){n.dom.bind(n.getDoc(),"focusin",function(){n.selection.setRng(n.selection.getRng())})}function e(n){n.onKeyDown.add(function(o,r){if(r.keyCode===k){if(o.selection.isCollapsed()&&o.selection.getRng(true).startOffset===0){var q=o.selection.getNode();var p=q.previousSibling;if(p&&p.nodeName&&p.nodeName.toLowerCase()==="hr"){o.dom.remove(p);l.dom.Event.cancel(r)}}}})}function g(n){if(!Range.prototype.getClientRects){n.onMouseDown.add(function(p,q){if(q.target.nodeName==="HTML"){var o=p.getBody();o.blur();setTimeout(function(){o.focus()},0)}})}}function f(n){n.onClick.add(function(o,p){p=p.target;if(/^(IMG|HR)$/.test(p.nodeName)){o.selection.getSel().setBaseAndExtent(p,0,p,1)}if(p.nodeName=="A"&&o.dom.hasClass(p,"mceItemAnchor")){o.selection.select(p)}o.nodeChanged()})}function i(n){n.onKeyDown.add(function(o,p){function q(r){var s=r.selection.getNode();var t="h1,h2,h3,h4,h5,h6";return r.dom.is(s,t)||r.dom.getParent(s,t)!==null}if(p.keyCode===j.ENTER&&!j.modifierPressed(p)&&q(o)){setTimeout(function(){var r=o.selection.getNode();if(o.dom.is(r,"p")){o.dom.setAttrib(r,"style",null);o.execCommand("mceCleanup")}},0)}})}function m(n){var p,o;n.dom.bind(n.getDoc(),"selectionchange",function(){if(o){clearTimeout(o);o=0}o=window.setTimeout(function(){var q=n.selection.getRng();if(!p||!l.dom.RangeUtils.compareRanges(q,p)){n.nodeChanged();p=q}},50)})}function a(n){document.body.setAttribute("role","application")}l.create("tinymce.util.Quirks",{Quirks:function(n){if(l.isWebKit){c(n);d(n);b(n);f(n);if(l.isIDevice){m(n)}}if(l.isIE){e(n);d(n);a(n);i(n)}if(l.isGecko){e(n);g(n)}}})})(tinymce);(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':"&quot;","'":"&#39;","<":"&lt;",">":"&gt;","&":"&amp;"};d={"&lt;":"<","&gt;":">","&amp;":"&","&quot;":'"',"&apos;":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n<m.length;n+=2){o=String.fromCharCode(parseInt(m[n],p));if(!g[o]){l="&"+m[n+1]+";";q[o]=l;q[l]=o}}return q}}a=e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);j.html=j.html||{};j.html.Entities={encodeRaw:function(m,l){return m.replace(l?k:b,function(n){return g[n]||n})},encodeAllRaw:function(l){return(""+l).replace(f,function(m){return g[m]||m})},encodeNumeric:function(m,l){return m.replace(l?k:b,function(n){if(n.length>1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g<j.length;g++){a[j[g]]="\uFEFF"+g;a["\uFEFF"+g]=j[g]}function c(n,q,p,i){function o(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(r){var y={},p,n,v,q,u=d.url_converter,x=d.url_converter_scope||this;function o(C,F){var E,B,A,D;E=y[C+"-top"+F];if(!E){return}B=y[C+"-right"+F];if(E!=B){return}A=y[C+"-bottom"+F];if(B!=A){return}D=y[C+"-left"+F];if(A!=D){return}y[C+F]=D;delete y[C+"-top"+F];delete y[C+"-right"+F];delete y[C+"-bottom"+F];delete y[C+"-left"+F]}function t(B){var C=y[B],A;if(!C||C.indexOf(" ")<0){return}C=C.split(" ");A=C.length;while(A--){if(C[A]!==C[0]){return false}}y[B]=C[0];return true}function z(C,B,A,D){if(!t(B)){return}if(!t(A)){return}if(!t(D)){return}y[C]=y[B]+" "+y[A]+" "+y[D];delete y[B];delete y[A];delete y[D]}function s(A){q=true;return a[A]}function i(B,A){if(q){B=B.replace(/\uFEFF[0-9]/g,function(C){return a[C]})}if(!A){B=B.replace(/\\([\'\";:])/g,"$1")}return B}if(r){r=r.replace(/\\[\"\';:\uFEFF]/g,s).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(A){return A.replace(/[;:]/g,s)});while(p=b.exec(r)){n=p[1].replace(l,"").toLowerCase();v=p[2].replace(l,"");if(n&&v.length>0){if(n==="font-weight"&&v==="700"){v="bold"}else{if(n==="color"||n==="background-color"){v=v.toLowerCase()}}v=v.replace(k,c);v=v.replace(h,function(B,A,E,D,F,C){F=F||C;if(F){F=i(F);return"'"+F.replace(/\'/g,"\\'")+"'"}A=i(A||E||D);if(u){A=u.call(x,A,"style")}return"url('"+A.replace(/\'/g,"\\'")+"')"});y[n]=q?i(v,true):v}b.lastIndex=p.index+p[0].length}o("border","");o("border","-width");o("border","-color");o("border","-style");o("padding","");o("margin","");z("border","border-width","border-style","border-color");if(y.border==="medium none"){delete y.border}}return y},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u<s;u++){t=x[u];v=p[t];if(v!==e&&v.length>0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(m){var h={},j,l,g,f,c={},b,e,d=m.makeMap,k=m.each;function i(o,n){return o.split(n||",")}function a(r,q){var o,p={};function n(s){return s.replace(/[A-Z]+/g,function(t){return n(r[t])})}for(o in r){if(r.hasOwnProperty(o)){r[o]=n(r[o])}}n(q).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(v,t,s,u){s=i(s,"|");p[t]={attributes:d(s),attributesOrder:s,children:d(u,"|",{"#comment":{}})}});return p}l="h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,noscript,menu,isindex,samp,header,footer,article,section,hgroup";l=d(l,",",d(l.toUpperCase()));h=a({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]");j=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,autoplay,loop,controls");g=d("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source");f=m.extend(d("td,th,iframe,video,audio,object"),g);b=d("pre,script,style,textarea");e=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");m.html.Schema=function(r){var A=this,n={},o={},y=[],q,p;r=r||{};if(r.verify_html===false){r.valid_elements="*[*]"}if(r.valid_styles){q={};k(r.valid_styles,function(C,B){q[B]=m.explode(C)})}p=r.whitespace_elements?d(r.whitespace_elements):b;function z(B){return new RegExp("^"+B.replace(/([?+*])/g,".$1")+"$")}function t(I){var H,D,W,S,X,C,F,R,U,N,V,Z,L,G,T,B,P,E,Y,aa,M,Q,K=/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,O=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,J=/[*?+]/;if(I){I=i(I);if(n["@"]){P=n["@"].attributes;E=n["@"].attributesOrder}for(H=0,D=I.length;H<D;H++){C=K.exec(I[H]);if(C){T=C[1];N=C[2];B=C[3];U=C[4];L={};G=[];F={attributes:L,attributesOrder:G};if(T==="#"){F.paddEmpty=true}if(T==="-"){F.removeEmpty=true}if(P){for(aa in P){L[aa]=P[aa]}G.push.apply(G,E)}if(U){U=i(U,"|");for(W=0,S=U.length;W<S;W++){C=O.exec(U[W]);if(C){R={};Z=C[1];V=C[2].replace(/::/g,":");T=C[3];Q=C[4];if(Z==="!"){F.attributesRequired=F.attributesRequired||[];F.attributesRequired.push(V);R.required=true}if(Z==="-"){delete L[V];G.splice(m.inArray(G,V),1);continue}if(T){if(T==="="){F.attributesDefault=F.attributesDefault||[];F.attributesDefault.push({name:V,value:Q});R.defaultValue=Q}if(T===":"){F.attributesForced=F.attributesForced||[];F.attributesForced.push({name:V,value:Q});R.forcedValue=Q}if(T==="<"){R.validValues=d(Q,"?")}}if(J.test(V)){F.attributePatterns=F.attributePatterns||[];R.pattern=z(V);F.attributePatterns.push(R)}else{if(!L[V]){G.push(V)}L[V]=R}}}}if(!P&&N=="@"){P=L;E=G}if(B){F.outputName=N;n[B]=F}if(J.test(N)){F.pattern=z(N);y.push(F)}else{n[N]=F}}}}}function v(B){n={};y=[];t(B);k(h,function(D,C){o[C]=D.children})}function s(C){var B=/^(~)?(.+)$/;if(C){k(i(C),function(G){var E=B.exec(G),F=E[1]==="~",H=F?"span":"div",D=E[2];o[D]=o[H];c[D]=H;if(!F){l[D]={}}k(o,function(I,J){if(I[H]){I[D]=I[H]}})})}}function u(C){var B=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(C){k(i(C),function(G){var F=B.exec(G),D,E;if(F){E=F[1];if(E){D=o[F[2]]}else{D=o[F[2]]={"#comment":{}}}D=o[F[2]];k(i(F[3],"|"),function(H){if(E==="-"){delete D[H]}else{D[H]={}}})}})}}function x(B){var D=n[B],C;if(D){return D}C=y.length;while(C--){D=y[C];if(D.pattern.test(B)){return D}}}if(!r.valid_elements){k(h,function(C,B){n[B]={attributes:C.attributes,attributesOrder:C.attributesOrder};o[B]=C.children});k(i("strong/b,em/i"),function(B){B=i(B,"/");n[B[1]].outputName=B[0]});n.img.attributesDefault=[{name:"alt",value:""}];k(i("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr"),function(B){n[B].removeEmpty=true});k(i("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(B){n[B].paddEmpty=true})}else{v(r.valid_elements)}s(r.custom_elements);u(r.valid_children);t(r.extended_valid_elements);u("+ol[ul|ol],+ul[ul|ol]");if(!x("span")){t("span[!data-mce-type|*]")}if(r.invalid_elements){m.each(m.explode(r.invalid_elements),function(B){if(n[B]){delete n[B]}})}A.children=o;A.styles=q;A.getBoolAttrs=function(){return j};A.getBlockElements=function(){return l};A.getShortEndedElements=function(){return g};A.getSelfClosingElements=function(){return e};A.getNonEmptyElements=function(){return f};A.getWhiteSpaceElements=function(){return p};A.isValidChild=function(B,D){var C=o[B];return !!(C&&C[D])};A.getElementRule=x;A.getCustomElements=function(){return c};A.addValidElements=t;A.setValidElements=v;A.addCustomElements=s;A.addValidChildren=u};m.html.Schema.boolAttrMap=j;m.html.Schema.blockElementsMap=l})(tinymce);(function(a){a.html.SaxParser=function(c,e){var b=this,d=function(){};c=c||{};b.schema=e=e||new a.html.Schema();if(c.fix_self_closing!==false){c.fix_self_closing=true}a.each("comment cdata text start end pi doctype".split(" "),function(f){if(f){b[f]=c[f]||d}});b.parse=function(D){var n=this,g,F=0,H,A,z=[],M,P,B,q,y,r,L,G,N,u,m,k,s,Q,o,O,E,R,K,f,I,l,C,J,h,v=0,j=a.html.Entities.decode,x,p;function t(S){var U,T;U=z.length;while(U--){if(z[U].name===S){break}}if(U>=0){for(T=z.length-1;T>=U;T--){S=z[T];if(S.valid){n.end(S.name)}}z.length=U}}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/)>))","g");C=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;J={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};L=e.getShortEndedElements();I=e.getSelfClosingElements();G=e.getBoolAttrs();u=c.validate;r=c.remove_internals;x=c.fix_self_closing;p=a.isIE;o=/^:/;while(g=l.exec(D)){if(F<g.index){n.text(j(D.substr(F,g.index-F)))}if(H=g[6]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}t(H)}else{if(H=g[7]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}N=H in L;if(x&&I[H]&&z.length>0&&z[z.length-1].name===H){t(H)}if(!u||(m=e.getElementRule(H))){k=true;if(u){O=m.attributes;E=m.attributePatterns}if(Q=g[8]){y=Q.indexOf("data-mce-type")!==-1;if(y&&r){k=false}M=[];M.map={};Q.replace(C,function(T,S,X,W,V){var Y,U;S=S.toLowerCase();X=S in G?S:j(X||W||V||"");if(u&&!y&&S.indexOf("data-")!==0){Y=O[S];if(!Y&&E){U=E.length;while(U--){Y=E[U];if(Y.pattern.test(S)){break}}if(U===-1){Y=null}}if(!Y){return}if(Y.validValues&&!(X in Y.validValues)){return}}M.map[S]=X;M.push({name:S,value:X})})}else{M=[];M.map={}}if(u&&!y){R=m.attributesRequired;K=m.attributesDefault;f=m.attributesForced;if(f){P=f.length;while(P--){s=f[P];q=s.name;h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}if(K){P=K.length;while(P--){s=K[P];q=s.name;if(!(q in M.map)){h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}}if(R){P=R.length;while(P--){if(R[P] in M.map){break}}if(P===-1){k=false}}if(M.map["data-mce-bogus"]){k=false}}if(k){n.start(H,M,N)}}else{k=false}if(A=J[H]){A.lastIndex=F=g.index+g[0].length;if(g=A.exec(D)){if(k){B=D.substr(F,g.index-F)}F=g.index+g[0].length}else{B=D.substr(F);F=D.length}if(k&&B.length>0){n.text(B,true)}if(k){n.end(H)}l.lastIndex=F;continue}if(!N){if(!Q||Q.indexOf("/")!=Q.length-1){z.push({name:H,valid:k})}else{if(k){n.end(H)}}}}else{if(H=g[1]){n.comment(H)}else{if(H=g[2]){n.cdata(H)}else{if(H=g[3]){n.doctype(H)}else{if(H=g[4]){n.pi(H,g[5])}}}}}}F=g.index+g[0].length}if(F<D.length){n.text(j(D.substr(F)))}for(P=z.length-1;P>=0;P--){H=z[P];if(H.valid){n.end(H.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h<f;h++){j=m[h];if(j.name!=="id"){k[k.length]={name:j.name,value:j.value};k.map[j.name]=j.value}}n.attributes=k}n.value=g.value;n.shortEnded=g.shortEnded;return n},wrap:function(g){var f=this;f.parent.insert(g,f);g.append(f);return f},unwrap:function(){var f=this,h,g;for(h=f.firstChild;h;){g=h.next;f.insert(h,f,true);h=g}f.remove()},remove:function(){var f=this,h=f.parent,g=f.next,i=f.prev;if(h){if(h.firstChild===f){h.firstChild=g;if(g){g.prev=null}}else{i.next=g}if(h.lastChild===f){h.lastChild=i;if(i){i.next=null}}else{g.prev=i}f.parent=f.next=f.prev=null}return f},append:function(h){var f=this,g;if(h.parent){h.remove()}g=f.lastChild;if(g){g.next=h;h.prev=g;f.lastChild=h}else{f.lastChild=f.firstChild=h}h.parent=f;return h},insert:function(h,f,i){var g;if(h.parent){h.remove()}g=f.parent||this;if(i){if(f===g.firstChild){g.firstChild=h}else{f.prev.next=h}h.prev=f.prev;h.next=f;f.prev=h}else{if(f===g.lastChild){g.lastChild=h}else{f.next.prev=h}h.next=f.next;h.prev=f;f.next=h}h.parent=g;return h},getAll:function(g){var f=this,h,i=[];for(h=f.firstChild;h;h=a(h,f)){if(h.name===g){i.push(h)}}return i},empty:function(){var g=this,f,h,j;if(g.firstChild){f=[];for(j=g.firstChild;j;j=a(j,g)){f.push(j)}h=f.length;while(h--){j=f[h];j.parent=j.firstChild=j.lastChild=j.next=j.prev=null}}g.firstChild=g.lastChild=null;return g},isEmpty:function(k){var f=this,j=f.firstChild,h,g;if(j){do{if(j.type===1){if(j.attributes.map["data-mce-bogus"]){continue}if(k[j.name]){return false}h=j.attributes.length;while(h--){g=j.attributes[h].name;if(g==="name"||g.indexOf("data-")===0){return false}}}if((j.type===3&&!c.test(j.value))){return false}}while(j=a(j,f))}return true},walk:function(f){return a(this,null,f)}});d.extend(b,{create:function(g,f){var i,h;i=new b(g,e[g]||1);if(f){for(h in f){i.attr(h,f[h])}}return i}});d.html.Node=b})(tinymce);(function(b){var a=b.html.Node;b.html.DomParser=function(g,h){var f=this,e={},d=[],i={},c={};g=g||{};g.validate="validate" in g?g.validate:true;g.root_name=g.root_name||"body";f.schema=h=h||new b.html.Schema();function j(m){var o,p,x,v,z,n,q,l,t,u,k,s,y,r;s=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();for(o=0;o<m.length;o++){p=m[o];if(!p.parent){continue}v=[p];for(x=p.parent;x&&!h.isValidChild(x.name,p.name)&&!s[x.name];x=x.parent){v.push(x)}if(x&&v.length>1){v.reverse();z=n=f.filterNode(v[0].clone());for(t=0;t<v.length-1;t++){if(h.isValidChild(n.name,v[t].name)){q=f.filterNode(v[t].clone());n.append(q)}else{q=n}for(l=v[t].firstChild;l&&l!=v[t+1];){r=l.next;q.append(l);l=r}n=q}if(!z.isEmpty(k)){x.insert(z,v[0],true);x.insert(p,z)}else{x.insert(p,v[0],true)}x=v[0];if(x.isEmpty(k)||x.firstChild===x.lastChild&&x.firstChild.name==="br"){x.empty().remove()}}else{if(p.parent){if(p.name==="li"){y=p.prev;if(y&&(y.name==="ul"||y.name==="ul")){y.append(p);continue}y=p.next;if(y&&(y.name==="ul"||y.name==="ul")){y.insert(p,y.firstChild,true);continue}p.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(p.parent.name,"div")&&h.isValidChild("div",p.name)){p.wrap(f.filterNode(new a("div",1)))}else{if(p.name==="style"||p.name==="script"){p.empty().remove()}else{p.unwrap()}}}}}}f.filterNode=function(m){var l,k,n;if(k in e){n=i[k];if(n){n.push(m)}else{i[k]=[m]}}l=d.length;while(l--){k=d[l].name;if(k in m.attributes.map){n=c[k];if(n){n.push(m)}else{c[k]=[m]}}}return m};f.addNodeFilter=function(k,l){b.each(b.explode(k),function(m){var n=e[m];if(!n){e[m]=n=[]}n.push(l)})};f.addAttributeFilter=function(k,l){b.each(b.explode(k),function(m){var n;for(n=0;n<d.length;n++){if(d[n].name===m){d[n].callbacks.push(l);return}}d.push({name:m,callbacks:[l]})})};f.parse=function(v,m){var n,H,A,z,C,B,x,r,E,K,y,o,D,J=[],t,k,s,p,u,q;m=m||{};i={};c={};o=b.extend(b.makeMap("script,style,head,html,body,title,meta,param"),h.getBlockElements());u=h.getNonEmptyElements();p=h.children;y=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();D=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;function F(){var L=H.firstChild,l,M;while(L){l=L.next;if(L.type==3||(L.type==1&&L.name!=="p"&&!o[L.name]&&!L.attr("data-mce-type"))){if(!M){M=I(q,1);H.insert(M,L);M.append(L)}else{M.append(L)}}else{M=null}L=l}}function I(l,L){var M=new a(l,L),N;if(l in e){N=i[l];if(N){N.push(M)}else{i[l]=[M]}}return M}function G(M){var N,l,L;for(N=M.prev;N&&N.type===3;){l=N.value.replace(t,"");if(l.length>0){N.value=l;N=N.prev}else{L=N.prev;N.remove();N=L}}}n=new b.html.SaxParser({validate:y,fix_self_closing:!y,cdata:function(l){A.append(I("#cdata",4)).value=l},text:function(M,l){var L;if(!s[A.name]){M=M.replace(k," ");if(A.lastChild&&o[A.lastChild.name]){M=M.replace(D,"")}}if(M.length!==0){L=I("#text",3);L.raw=!!l;A.append(L).value=M}},comment:function(l){A.append(I("#comment",8)).value=l},pi:function(l,L){A.append(I(l,7)).value=L;G(A)},doctype:function(L){var l;l=A.append(I("#doctype",10));l.value=L;G(A)},start:function(l,T,M){var R,O,N,L,P,U,S,Q;N=y?h.getElementRule(l):{};if(N){R=I(N.outputName||l,1);R.attributes=T;R.shortEnded=M;A.append(R);Q=p[A.name];if(Q&&p[R.name]&&!Q[R.name]){J.push(R)}O=d.length;while(O--){P=d[O].name;if(P in T.map){E=c[P];if(E){E.push(R)}else{c[P]=[R]}}}if(o[l]){G(R)}if(!M){A=R}}},end:function(l){var P,M,O,L,N;M=y?h.getElementRule(l):{};if(M){if(o[l]){if(!s[A.name]){for(P=A.firstChild;P&&P.type===3;){O=P.value.replace(D,"");if(O.length>0){P.value=O;P=P.next}else{L=P.next;P.remove();P=L}}for(P=A.lastChild;P&&P.type===3;){O=P.value.replace(t,"");if(O.length>0){P.value=O;P=P.prev}else{L=P.prev;P.remove();P=L}}}P=A.prev;if(P&&P.type===3){O=P.value.replace(D,"");if(O.length>0){P.value=O}else{P.remove()}}}if(M.removeEmpty||M.paddEmpty){if(A.isEmpty(u)){if(M.paddEmpty){A.empty().append(new a("#text","3")).value="\u00a0"}else{if(!A.attributes.map.name){N=A.parent;A.empty().remove();A=N;return}}}}A=A.parent}}},h);H=A=new a(m.context||g.root_name,11);n.parse(v);if(y&&J.length){if(!m.context){j(J)}else{m.invalid=true}}if(q&&H.name=="body"){F()}if(!m.invalid){for(K in i){E=e[K];z=i[K];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(C=0,B=E.length;C<B;C++){E[C](z,K,m)}}for(C=0,B=d.length;C<B;C++){E=d[C];if(E.name in c){z=c[E.name];x=z.length;while(x--){if(!z[x].parent){z.splice(x,1)}}for(x=0,r=E.callbacks.length;x<r;x++){E.callbacks[x](z,E.name,m)}}}}return H};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,u=h.getBlockElements(),k=h.getNonEmptyElements(),s,p,t;u.body=1;for(r=0;r<q;r++){o=n[r];s=o.parent;if(u[o.parent.name]&&o===s.lastChild){p=o.prev;while(p){t=p.name;if(t!=="span"||p.attr("data-mce-type")!=="bookmark"){if(t!=="br"){break}if(t==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(s.isEmpty(k)){elementRule=h.getElementRule(s.name);if(elementRule){if(elementRule.removeEmpty){s.remove()}else{if(elementRule.paddEmpty){s.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}}})}}})(tinymce);tinymce.html.Writer=function(e){var c=[],a,b,d,f,g;e=e||{};a=e.indent;b=tinymce.makeMap(e.indent_before||"");d=tinymce.makeMap(e.indent_after||"");f=tinymce.html.Entities.getEncodeFunc(e.entity_encoding||"raw",e.entities);g=e.element_format=="html";return{start:function(m,k,p){var n,j,h,o;if(a&&b[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n<j;n++){h=k[n];c.push(" ",h.name,'="',f(h.value,true),'"')}}if(!p||g){c[c.length]=">"}else{c[c.length]=" />"}if(p&&a&&d[m]&&c.length>0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("</",h,">");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("<![CDATA[",h,"]]>")},comment:function(h){c.push("<!--",h,"-->")},pi:function(h,i){if(i){c.push("<?",h," ",i,"?>")}else{c.push("<?",h,"?>")}if(a){c.push("\n")}},doctype:function(h){c.push("<!DOCTYPE",h,">",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n<m;n++){r=q.attributesOrder[n];if(r in s.map){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}for(n=0,m=s.length;n<m;n++){r=s[n].name;if(!(r in u.map)){p=s.map[r];u.map[r]=p;u.push({name:r,value:p})}}s=u}e.start(k.name,s,o);if(!o){if((k=k.firstChild)){do{f(k)}while(k=k.next)}e.end(j)}}else{t(k)}}if(h.type==1&&!c.inner){f(h)}else{g[11](h)}return e.getContent()}}})(tinymce);(function(h){var f=h.each,e=h.is,d=h.isWebKit,b=h.isIE,c=h.html.Entities,a=/^([a-z0-9],?)+$/i,g=h.html.Schema.blockElementsMap,i=/^[ \t\r\n]*$/;h.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(o,m){var l=this,j,k;l.doc=o;l.win=window;l.files={};l.cssFlicker=false;l.counter=0;l.stdMode=!h.isIE||o.documentMode>=8;l.boxModel=!h.isIE||o.compatMode=="CSS1Compat"||l.stdMode;l.hasOuterHTML="outerHTML" in o.createElement("a");l.settings=m=h.extend({keep_values:false,hex_colors:1},m);l.schema=m.schema;l.styles=new h.html.Styles({url_converter:m.url_converter,url_converter_scope:m.url_converter_scope},m.schema);if(h.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(n){l.cssFlicker=true}}if(b&&m.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(p){o.createElement(p)});for(k in m.schema.getCustomElements()){o.createElement(k)}}h.addUnload(l.destroy,l)},getRoot:function(){var j=this,k=j.settings;return(k&&j.get(k.root_element))||j.doc.body},getViewPort:function(k){var l,j;k=!k?this.win:k;l=k.document;j=this.boxModel?l.documentElement:l.body;return{x:k.pageXOffset||j.scrollLeft,y:k.pageYOffset||j.scrollTop,w:k.innerWidth||j.clientWidth,h:k.innerHeight||j.clientHeight}},getRect:function(m){var l,j=this,k;m=j.get(m);l=j.getPos(m);k=j.getSize(m);return{x:l.x,y:l.y,w:k.w,h:k.h}},getSize:function(m){var k=this,j,l;m=k.get(m);j=k.getStyle(m,"width");l=k.getStyle(m,"height");if(j.indexOf("px")===-1){j=0}if(l.indexOf("px")===-1){l=0}return{w:parseInt(j)||m.offsetWidth||m.clientWidth,h:parseInt(l)||m.offsetHeight||m.clientHeight}},getParent:function(l,k,j){return this.getParents(l,k,j,false)},getParents:function(u,p,l,s){var k=this,j,m=k.settings,q=[];u=k.get(u);s=s===undefined;if(m.strict_root){l=l||k.getRoot()}if(e(p,"string")){j=p;if(p==="*"){p=function(o){return o.nodeType==1}}else{p=function(o){return k.is(o,j)}}}while(u){if(u==l||!u.nodeType||u.nodeType===9){break}if(!p||p(u)){if(s){q.push(u)}else{return u}}u=u.parentNode}return s?q:null},get:function(j){var k;if(j&&this.doc&&typeof(j)=="string"){k=j;j=this.doc.getElementById(j);if(j&&j.id!==k){return this.doc.getElementsByName(k)[1]}}return j},getNext:function(k,j){return this._findSib(k,j,"nextSibling")},getPrev:function(k,j){return this._findSib(k,j,"previousSibling")},select:function(l,k){var j=this;return h.dom.Sizzle(l,j.get(k)||j.get(j.settings.root_element)||j.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(a.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return h.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(m,q,j,l,o){var k=this;return this.run(m,function(s){var r,n;r=e(q,"string")?k.doc.createElement(q):q;k.setAttribs(r,j);if(l){if(l.nodeType){r.appendChild(l)}else{k.setHTML(r,l)}}return !o?s.appendChild(r):r})},create:function(l,j,k){return this.add(this.doc.createElement(l),l,j,k,1)},createHTML:function(r,j,p){var q="",m=this,l;q+="<"+r;for(l in j){if(j.hasOwnProperty(l)){q+=" "+l+'="'+m.encode(j[l])+'"'}}if(typeof(p)!="undefined"){return q+">"+p+"</"+r+">"}return q+" />"},remove:function(j,k){return this.run(j,function(m){var n,l=m.parentNode;if(!l){return null}if(k){while(n=m.firstChild){if(!h.isIE||n.nodeType!==3||n.nodeValue){l.insertBefore(n,m)}else{m.removeChild(n)}}}return l.removeChild(m)})},setStyle:function(m,j,k){var l=this;return l.run(m,function(p){var o,n;o=p.style;j=j.replace(/-(\D)/g,function(r,q){return q.toUpperCase()});if(l.pixelStyles.test(j)&&(h.is(k,"number")||/^[\-0-9\.]+$/.test(k))){k+="px"}switch(j){case"opacity":if(b){o.filter=k===""?"":"alpha(opacity="+(k*100)+")";if(!m.currentStyle||!m.currentStyle.hasLayout){o.display="inline-block"}}o[j]=o["-moz-opacity"]=o["-khtml-opacity"]=k||"";break;case"float":b?o.styleFloat=k:o.cssFloat=k;break;default:o[j]=k||""}if(l.settings.update_styles){l.setAttrib(p,"data-mce-style")}})},getStyle:function(m,j,l){m=this.get(m);if(!m){return}if(this.doc.defaultView&&l){j=j.replace(/[A-Z]/g,function(n){return"-"+n});try{return this.doc.defaultView.getComputedStyle(m,null).getPropertyValue(j)}catch(k){return null}}j=j.replace(/-(\D)/g,function(o,n){return n.toUpperCase()});if(j=="float"){j=b?"styleFloat":"cssFloat"}if(m.currentStyle&&l){return m.currentStyle[j]}return m.style?m.style[j]:undefined},setStyles:function(m,n){var k=this,l=k.settings,j;j=l.update_styles;l.update_styles=0;f(n,function(o,p){k.setStyle(m,p,o)});l.update_styles=j;if(l.update_styles){k.setAttrib(m,l.cssText)}},removeAllAttribs:function(j){return this.run(j,function(m){var l,k=m.attributes;for(l=k.length-1;l>=0;l--){m.removeAttributeNode(k.item(l))}})},setAttrib:function(l,m,j){var k=this;if(!l||!m){return}if(k.settings.strict){m=m.toLowerCase()}return this.run(l,function(q){var p=k.settings;var n=q.getAttribute(m);if(j!==null){switch(m){case"style":if(!e(j,"string")){f(j,function(r,s){k.setStyle(q,s,r)});return}if(p.keep_values){if(j&&!k._isRes(j)){q.setAttribute("data-mce-style",j,2)}else{q.removeAttribute("data-mce-style",2)}}q.style.cssText=j;break;case"class":q.className=j||"";break;case"src":case"href":if(p.keep_values){if(p.url_converter){j=p.url_converter.call(p.url_converter_scope||k,j,m,q)}k.setAttrib(q,"data-mce-"+m,j,2)}break;case"shape":q.setAttribute("data-mce-style",j);break}}if(e(j)&&j!==null&&j.length!==0){q.setAttribute(m,""+j,2)}else{q.removeAttribute(m,2)}if(tinyMCE.activeEditor&&n!=j){var o=tinyMCE.activeEditor;o.onSetAttrib.dispatch(o,q,m,j)}})},setAttribs:function(k,l){var j=this;return this.run(k,function(m){f(l,function(o,p){j.setAttrib(m,p,o)})})},getAttrib:function(o,p,l){var j,k=this,m;o=k.get(o);if(!o||o.nodeType!==1){return l===m?false:l}if(!e(l)){l=""}if(/^(src|href|style|coords|shape)$/.test(p)){j=o.getAttribute("data-mce-"+p);if(j){return j}}if(b&&k.props[p]){j=o[k.props[p]];j=j&&j.nodeValue?j.nodeValue:j}if(!j){j=o.getAttribute(p,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(p)){if(o[k.props[p]]===true&&j===""){return p}return j?p:""}if(o.nodeName==="FORM"&&o.getAttributeNode(p)){return o.getAttributeNode(p).nodeValue}if(p==="style"){j=j||o.style.cssText;if(j){j=k.serializeStyle(k.parseStyle(j),o.nodeName);if(k.settings.keep_values&&!k._isRes(j)){o.setAttribute("data-mce-style",j)}}}if(d&&p==="class"&&j){j=j.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(p){case"rowspan":case"colspan":if(j===1){j=""}break;case"size":if(j==="+0"||j===20||j===0){j=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(j===0){j=""}break;case"hspace":if(j===-1){j=""}break;case"maxlength":case"tabindex":if(j===32768||j===2147483647||j==="32768"){j=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(j===65535){return p}return l;case"shape":j=j.toLowerCase();break;default:if(p.indexOf("on")===0&&j){j=h._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+j)}}}return(j!==m&&j!==null&&j!=="")?""+j:l},getPos:function(s,m){var k=this,j=0,q=0,o,p=k.doc,l;s=k.get(s);m=m||p.body;if(s){if(s.getBoundingClientRect){s=s.getBoundingClientRect();o=k.boxModel?p.documentElement:p.body;j=s.left+(p.documentElement.scrollLeft||p.body.scrollLeft)-o.clientTop;q=s.top+(p.documentElement.scrollTop||p.body.scrollTop)-o.clientLeft;return{x:j,y:q}}l=s;while(l&&l!=m&&l.nodeType){j+=l.offsetLeft||0;q+=l.offsetTop||0;l=l.offsetParent}l=s.parentNode;while(l&&l!=m&&l.nodeType){j-=l.scrollLeft||0;q-=l.scrollTop||0;l=l.parentNode}}return{x:j,y:q}},parseStyle:function(j){return this.styles.parse(j)},serializeStyle:function(k,j){return this.styles.serialize(k,j)},loadCSS:function(j){var l=this,m=l.doc,k;if(!j){j=""}k=l.select("head")[0];f(j.split(","),function(n){var o;if(l.files[n]){return}l.files[n]=true;o=l.create("link",{rel:"stylesheet",href:h._addVer(n)});if(b&&m.documentMode&&m.recalc){o.onload=function(){if(m.recalc){m.recalc()}o.onload=null}}k.appendChild(o)})},addClass:function(j,k){return this.run(j,function(l){var m;if(!k){return 0}if(this.hasClass(l,k)){return l.className}m=this.removeClass(l,k);return l.className=(m!=""?(m+" "):"")+k})},removeClass:function(l,m){var j=this,k;return j.run(l,function(o){var n;if(j.hasClass(o,m)){if(!k){k=new RegExp("(^|\\s+)"+m+"(\\s+|$)","g")}n=o.className.replace(k," ");n=h.trim(n!=" "?n:"");o.className=n;if(!n){o.removeAttribute("class");o.removeAttribute("className")}return n}return o.className})},hasClass:function(k,j){k=this.get(k);if(!k||!j){return false}return(" "+k.className+" ").indexOf(" "+j+" ")!==-1},show:function(j){return this.setStyle(j,"display","block")},hide:function(j){return this.setStyle(j,"display","none")},isHidden:function(j){j=this.get(j);return !j||j.style.display=="none"||this.getStyle(j,"display")=="none"},uniqueId:function(j){return(!j?"mce_":j)+(this.counter++)},setHTML:function(l,k){var j=this;return j.run(l,function(n){if(b){while(n.firstChild){n.removeChild(n.firstChild)}try{n.innerHTML="<br />"+k;n.removeChild(n.firstChild)}catch(m){n=j.create("div");n.innerHTML="<br />"+k;f(n.childNodes,function(p,o){if(o){n.appendChild(p)}})}}else{n.innerHTML=k}return k})},getOuterHTML:function(l){var k,j=this;l=j.get(l);if(!l){return null}if(l.nodeType===1&&j.hasOuterHTML){return l.outerHTML}k=(l.ownerDocument||j.doc).createElement("body");k.appendChild(l.cloneNode(true));return k.innerHTML},setOuterHTML:function(m,k,n){var j=this;function l(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){j.insertAfter(s.cloneNode(true),p);s=s.previousSibling}j.remove(p)}return this.run(m,function(p){p=j.get(p);if(p.nodeType==1){n=n||p.ownerDocument||j.doc;if(b){try{if(b&&p.nodeType==1){p.outerHTML=k}else{l(p,k,n)}}catch(o){l(p,k,n)}}else{l(p,k,n)}}})},decode:c.decode,encode:c.encodeAllRaw,insertAfter:function(j,k){k=this.get(k);return this.run(j,function(m){var l,n;l=k.parentNode;n=k.nextSibling;if(n){l.insertBefore(m,n)}else{l.appendChild(m)}return m})},isBlock:function(k){var j=k.nodeType;if(j){return !!(j===1&&g[k.nodeName])}return !!g[k]},replace:function(p,m,j){var l=this;if(e(m,"array")){p=p.cloneNode(true)}return l.run(m,function(k){if(j){f(h.grep(k.childNodes),function(n){p.appendChild(n)})}return k.parentNode.replaceChild(p,k)})},rename:function(m,j){var l=this,k;if(m.nodeName!=j.toUpperCase()){k=l.create(j);f(l.getAttribs(m),function(n){l.setAttrib(k,n.nodeName,l.getAttrib(m,n.nodeName))});l.replace(k,m,1)}return k||m},findCommonAncestor:function(l,j){var m=l,k;while(m){k=j;while(k&&m!=k){k=k.parentNode}if(m==k){break}m=m.parentNode}if(!m&&l.ownerDocument){return l.ownerDocument.documentElement}return m},toHex:function(j){var l=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(j);function k(m){m=parseInt(m).toString(16);return m.length>1?m:"0"+m}if(l){j="#"+k(l[1])+k(l[2])+k(l[3]);return j}return j},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(r){f(r.imports,function(s){q(s)});f(r.cssRules||r.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){f(s.selectorText.split(","),function(t){t=t.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(t)||!/\.[\w\-]+$/.test(t)){return}l=t;t=h._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",t);if(p&&!(t=p(t,l))){return}if(!o[t]){j.push({"class":t});o[t]=1}})}break;case 3:q(s.styleSheet);break}})}try{f(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(m,l,k){var j=this,n;if(j.doc&&typeof(m)==="string"){m=j.get(m)}if(!m){return false}k=k||this;if(!m.nodeType&&(m.length||m.length===0)){n=[];f(m,function(p,o){if(p){if(typeof(p)=="string"){p=j.doc.getElementById(p)}n.push(l.call(k,p,o))}});return n}return l.call(k,m)},getAttribs:function(k){var j;k=this.get(k);if(!k){return[]}if(b){j=[];if(k.nodeName=="OBJECT"){return k.attributes}if(k.nodeName==="OPTION"&&this.getAttrib(k,"selected")){j.push({specified:1,nodeName:"selected"})}k.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(l){j.push({specified:1,nodeName:l})});return j}return k.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p;m=m.firstChild;if(m){j=new h.dom.TreeWalker(m);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){p=m.parentNode;if(l==="br"&&r.isBlock(p)&&p.firstChild===m&&p.lastChild===m){continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if((q===3&&!i.test(m.nodeValue))){return false}}while(m=j.next())}return true},destroy:function(k){var j=this;if(j.events){j.events.destroy()}j.win=j.doc=j.root=j.events=null;if(!k){h.removeUnload(j.destroy)}},createRng:function(){var j=this.doc;return j.createRange?j.createRange():new h.dom.Range(this)},nodeIndex:function(n,o){var j=0,l,m,k;if(n){for(l=n.nodeType,n=n.previousSibling,m=n;n;n=n.previousSibling){k=n.nodeType;if(o&&k==3){if(k==l||!n.nodeValue.length){continue}}j++;l=k}}return j},split:function(n,m,q){var s=this,j=s.createRng(),o,l,p;function k(x){var u,t=x.childNodes,v=x.nodeType;function y(B){var A=B.previousSibling&&B.previousSibling.nodeName=="SPAN";var z=B.nextSibling&&B.nextSibling.nodeName=="SPAN";return A&&z}if(v==1&&x.getAttribute("data-mce-type")=="bookmark"){return}for(u=t.length-1;u>=0;u--){k(t[u])}if(v!=9){if(v==3&&x.nodeValue.length>0){var r=h.trim(x.nodeValue).length;if(!s.isBlock(x.parentNode)||r>0||r==0&&y(x)){return}}else{if(v==1){t=x.childNodes;if(t.length==1&&t[0]&&t[0].nodeType==1&&t[0].getAttribute("data-mce-type")=="bookmark"){x.parentNode.insertBefore(t[0],x)}if(t.length||/^(br|hr|input|img)$/i.test(x.nodeName)){return}}}s.remove(x)}return x}if(n&&m){j.setStart(n.parentNode,s.nodeIndex(n));j.setEnd(m.parentNode,s.nodeIndex(m));o=j.extractContents();j=s.createRng();j.setStart(m.parentNode,s.nodeIndex(m)+1);j.setEnd(n.parentNode,s.nodeIndex(n)+1);l=j.extractContents();p=n.parentNode;p.insertBefore(k(o),n);if(q){p.replaceChild(q,m)}else{p.insertBefore(m,n)}p.insertBefore(k(l),n);s.remove(n);return q||m}},bind:function(n,j,m,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.add(n,j,m,l||this)},unbind:function(m,j,l){var k=this;if(!k.events){k.events=new h.dom.EventUtils()}return k.events.remove(m,j,l)},_findSib:function(m,j,k){var l=this,n=j;if(m){if(e(n,"string")){n=function(o){return l.is(o,j)}}for(m=m[k];m;m=m[k]){if(n(m)){return m}}}return null},_isRes:function(j){return/^(top|left|bottom|right|width|height)/i.test(j)||/;\s*(top|left|bottom|right|width|height)/i.test(j)}});h.DOM=new h.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(Y,t){var ab=N[h],W=N[U],aa=N[P],V=N[z],Z=t.startContainer,ad=t.startOffset,X=t.endContainer,ac=t.endOffset;if(Y===0){return G(ab,W,Z,ad)}if(Y===1){return G(aa,V,Z,ad)}if(Y===2){return G(aa,V,X,ac)}if(Y===3){return G(ab,W,X,ac)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z<Y){return -1}return 1}aa=V;while(aa&&aa.parentNode!=X){aa=aa.parentNode}if(aa){W=0;t=X.firstChild;while(t!=aa&&W<Z){W++;t=t.nextSibling}if(Z<=W){return -1}return 1}aa=X;while(aa&&aa.parentNode!=V){aa=aa.parentNode}if(aa){W=0;t=V.firstChild;while(t!=aa&&W<Y){W++;t=t.nextSibling}if(W<Y){return -1}return 1}ab=c.findCommonAncestor(X,V);ad=X;while(ad&&ad.parentNode!=ab){ad=ad.parentNode}if(!ad){ad=ab}ac=V;while(ac&&ac.parentNode!=ab){ac=ac.parentNode}if(!ac){ac=ab}if(ad==ac){return 0}t=ab.firstChild;while(t){if(t==ad){return -1}if(t==ac){return 1}t=t.nextSibling}}function B(V,Y,X){var t,W;if(V){N[h]=Y;N[U]=X}else{N[P]=Y;N[z]=X}t=N[P];while(t.parentNode){t=t.parentNode}W=N[h];while(W.parentNode){W=W.parentNode}if(W==t){if(G(N[h],N[U],N[P],N[z])>0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}k.setEndPoint(j?"EndToStart":"EndToEnd",i);if(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)>0){k=i.duplicate();k.collapse(j);o=-1;while(s==k.parentElement()){if(k.move("character",-1)==0){break}o++}}o=o||k.text.replace("\r\n"," ").length}else{k.collapse(true);k.setEndPoint(j?"StartToStart":"StartToEnd",i);o=k.text.replace("\r\n"," ").length}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var u,t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,s,q,r=d.dom.doc,m=r.body;function j(z){var u,y,t,x,v;t=h.create("a");u=z?k:s;y=z?p:q;x=n.duplicate();if(u==r||u==r.documentElement){u=m;y=0}if(u.nodeType==3){u.parentNode.insertBefore(t,u);x.moveToElementText(t);x.moveStart("character",y);h.remove(t);n.setEndPoint(z?"StartToStart":"EndToEnd",x)}else{v=u.childNodes;if(v.length){if(y>=v.length){h.insertAfter(t,v[v.length-1])}else{u.insertBefore(t,v[y])}x.moveToElementText(t)}else{t=r.createTextNode("\uFEFF");u.appendChild(t);x.moveToElementText(t.parentNode);x.collapse(c)}n.setEndPoint(z?"StartToStart":"EndToEnd",x);h.remove(t)}}k=i.startContainer;p=i.startOffset;s=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==s&&k.nodeType==1&&p==q-1){if(p==q-1){try{l=m.createControlRange();l.addElement(k.childNodes[p]);l.select();return}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var p=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,j=0,d=Object.prototype.toString,o=false,i=true;[0,0].sort(function(){i=false;return 0});var b=function(v,e,z,A){z=z||[];e=e||document;var C=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!v||typeof v!=="string"){return z}var x=[],s,E,H,r,u=true,t=b.isXML(e),B=v,D,G,F,y;do{p.exec("");s=p.exec(B);if(s){B=s[3];x.push(s[1]);if(s[2]){r=s[3];break}}}while(s);if(x.length>1&&k.exec(v)){if(x.length===2&&f.relative[x[0]]){E=h(x[0]+x[1],e)}else{E=f.relative[x[0]]?[e]:b(x.shift(),e);while(x.length){v=x.shift();if(f.relative[v]){v+=x.shift()}E=h(v,E)}}}else{if(!A&&x.length>1&&e.nodeType===9&&!t&&f.match.ID.test(x[0])&&!f.match.ID.test(x[x.length-1])){D=b.find(x.shift(),e,t);e=D.expr?b.filter(D.expr,D.set)[0]:D.set[0]}if(e){D=A?{expr:x.pop(),set:a(A)}:b.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&e.parentNode?e.parentNode:e,t);E=D.expr?b.filter(D.expr,D.set):D.set;if(x.length>0){H=a(E)}else{u=false}while(x.length){G=x.pop();F=G;if(!f.relative[G]){G=""}else{F=x.pop()}if(F==null){F=e}f.relative[G](H,F,t)}}else{H=x=[]}}if(!H){H=E}if(!H){b.error(G||v)}if(d.call(H)==="[object Array]"){if(!u){z.push.apply(z,H)}else{if(e&&e.nodeType===1){for(y=0;H[y]!=null;y++){if(H[y]&&(H[y]===true||H[y].nodeType===1&&b.contains(e,H[y]))){z.push(E[y])}}}else{for(y=0;H[y]!=null;y++){if(H[y]&&H[y].nodeType===1){z.push(E[y])}}}}}else{a(H,z)}if(r){b(r,C,z,A);b.uniqueSort(z)}return z};b.uniqueSort=function(r){if(c){o=i;r.sort(c);if(o){for(var e=1;e<r.length;e++){if(r[e]===r[e-1]){r.splice(e--,1)}}}}return r};b.matches=function(e,r){return b(e,null,null,r)};b.find=function(y,e,z){var x;if(!y){return[]}for(var t=0,s=f.order.length;t<s;t++){var v=f.order[t],u;if((u=f.leftMatch[v].exec(y))){var r=u[1];u.splice(1,1);if(r.substr(r.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");x=f.find[v](u,e,z);if(x!=null){y=y.replace(f.match[v],"");break}}}}if(!x){x=e.getElementsByTagName("*")}return{set:x,expr:y}};b.filter=function(C,B,F,u){var s=C,H=[],z=B,x,e,y=B&&B[0]&&b.isXML(B[0]);while(C&&B.length){for(var A in f.filter){if((x=f.leftMatch[A].exec(C))!=null&&x[2]){var r=f.filter[A],G,E,t=x[1];e=false;x.splice(1,1);if(t.substr(t.length-1)==="\\"){continue}if(z===H){H=[]}if(f.preFilter[A]){x=f.preFilter[A](x,z,F,H,u,y);if(!x){e=G=true}else{if(x===true){continue}}}if(x){for(var v=0;(E=z[v])!=null;v++){if(E){G=r(E,x,v,z);var D=u^!!G;if(F&&G!=null){if(D){e=true}else{z[v]=false}}else{if(D){H.push(E);e=true}}}}}if(G!==undefined){if(!F){z=H}C=C.replace(f.match[A],"");if(!e){return[]}break}}}if(C===s){if(e==null){b.error(C)}else{break}}s=C}return z};b.error=function(e){throw"Syntax error, unrecognized expression: "+e};var f=b.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(x,r){var t=typeof r==="string",v=t&&!/\W/.test(r),y=t&&!v;if(v){r=r.toLowerCase()}for(var s=0,e=x.length,u;s<e;s++){if((u=x[s])){while((u=u.previousSibling)&&u.nodeType!==1){}x[s]=y||u&&u.nodeName.toLowerCase()===r?u||false:u===r}}if(y){b.filter(r,x,true)}},">":function(x,r){var u=typeof r==="string",v,s=0,e=x.length;if(u&&!/\W/.test(r)){r=r.toLowerCase();for(;s<e;s++){v=x[s];if(v){var t=v.parentNode;x[s]=t.nodeName.toLowerCase()===r?t:false}}}else{for(;s<e;s++){v=x[s];if(v){x[s]=u?v.parentNode:v.parentNode===r}}if(u){b.filter(r,x,true)}}},"":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("parentNode",r,s,t,u,v)},"~":function(t,r,v){var s=j++,e=q,u;if(typeof r==="string"&&!/\W/.test(r)){r=r.toLowerCase();u=r;e=n}e("previousSibling",r,s,t,u,v)}},find:{ID:function(r,s,t){if(typeof s.getElementById!=="undefined"&&!t){var e=s.getElementById(r[1]);return e?[e]:[]}},NAME:function(s,v){if(typeof v.getElementsByName!=="undefined"){var r=[],u=v.getElementsByName(s[1]);for(var t=0,e=u.length;t<e;t++){if(u[t].getAttribute("name")===s[1]){r.push(u[t])}}return r.length===0?null:r}},TAG:function(e,r){return r.getElementsByTagName(e[1])}},preFilter:{CLASS:function(t,r,s,e,x,y){t=" "+t[1].replace(/\\/g,"")+" ";if(y){return t}for(var u=0,v;(v=r[u])!=null;u++){if(v){if(x^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(t)>=0)){if(!s){e.push(v)}}else{if(s){r[u]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(r,e){return r[1].toLowerCase()},CHILD:function(e){if(e[1]==="nth"){var r=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(r[1]+(r[2]||1))-0;e[3]=r[3]-0}e[0]=j++;return e},ATTR:function(u,r,s,e,v,x){var t=u[1].replace(/\\/g,"");if(!x&&f.attrMap[t]){u[1]=f.attrMap[t]}if(u[2]==="~="){u[4]=" "+u[4]+" "}return u},PSEUDO:function(u,r,s,e,v){if(u[1]==="not"){if((p.exec(u[3])||"").length>1||/^\w/.test(u[3])){u[3]=b(u[3],null,null,r)}else{var t=b.filter(u[3],r,s,true^v);if(!s){e.push.apply(e,t)}return false}}else{if(f.match.POS.test(u[0])||f.match.CHILD.test(u[0])){return true}}return u},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(s,r,e){return !!b(e[3],s).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toLowerCase()==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)}},setFilters:{first:function(r,e){return e===0},last:function(s,r,e,t){return r===t.length-1},even:function(r,e){return e%2===0},odd:function(r,e){return e%2===1},lt:function(s,r,e){return r<e[3]-0},gt:function(s,r,e){return r>e[3]-0},nth:function(s,r,e){return e[3]-0===r},eq:function(s,r,e){return e[3]-0===r}},filter:{PSEUDO:function(s,y,x,z){var e=y[1],r=f.filters[e];if(r){return r(s,x,y,z)}else{if(e==="contains"){return(s.textContent||s.innerText||b.getText([s])||"").indexOf(y[3])>=0}else{if(e==="not"){var t=y[3];for(var v=0,u=t.length;v<u;v++){if(t[v]===s){return false}}return true}else{b.error("Syntax error, unrecognized expression: "+e)}}}},CHILD:function(e,t){var x=t[1],r=e;switch(x){case"only":case"first":while((r=r.previousSibling)){if(r.nodeType===1){return false}}if(x==="first"){return true}r=e;case"last":while((r=r.nextSibling)){if(r.nodeType===1){return false}}return true;case"nth":var s=t[2],A=t[3];if(s===1&&A===0){return true}var v=t[0],z=e.parentNode;if(z&&(z.sizcache!==v||!e.nodeIndex)){var u=0;for(r=z.firstChild;r;r=r.nextSibling){if(r.nodeType===1){r.nodeIndex=++u}}z.sizcache=v}var y=e.nodeIndex-A;if(s===0){return y===0}else{return(y%s===0&&y/s>=0)}}},ID:function(r,e){return r.nodeType===1&&r.getAttribute("id")===e},TAG:function(r,e){return(e==="*"&&r.nodeType===1)||r.nodeName.toLowerCase()===e},CLASS:function(r,e){return(" "+(r.className||r.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(v,t){var s=t[1],e=f.attrHandle[s]?f.attrHandle[s](v):v[s]!=null?v[s]:v.getAttribute(s),x=e+"",u=t[2],r=t[4];return e==null?u==="!=":u==="="?x===r:u==="*="?x.indexOf(r)>=0:u==="~="?(" "+x+" ").indexOf(r)>=0:!r?x&&e!==false:u==="!="?x!==r:u==="^="?x.indexOf(r)===0:u==="$="?x.substr(x.length-r.length)===r:u==="|="?x===r||x.substr(0,r.length+1)===r+"-":false},POS:function(u,r,s,v){var e=r[2],t=f.setFilters[e];if(t){return t(u,s,r,v)}}}};var k=f.match.POS,g=function(r,e){return"\\"+(e-0+1)};for(var m in f.match){f.match[m]=new RegExp(f.match[m].source+(/(?![^\[]*\])(?![^\(]*\))/.source));f.leftMatch[m]=new RegExp(/(^(?:.|\r|\n)*?)/.source+f.match[m].source.replace(/\\(\d+)/g,g))}var a=function(r,e){r=Array.prototype.slice.call(r,0);if(e){e.push.apply(e,r);return e}return r};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(l){a=function(u,t){var r=t||[],s=0;if(d.call(u)==="[object Array]"){Array.prototype.push.apply(r,u)}else{if(typeof u.length==="number"){for(var e=u.length;s<e;s++){r.push(u[s])}}else{for(;u[s];s++){r.push(u[s])}}}return r}}var c;if(document.documentElement.compareDocumentPosition){c=function(r,e){if(!r.compareDocumentPosition||!e.compareDocumentPosition){if(r==e){o=true}return r.compareDocumentPosition?-1:1}var s=r.compareDocumentPosition(e)&4?-1:r===e?0:1;if(s===0){o=true}return s}}else{if("sourceIndex" in document.documentElement){c=function(r,e){if(!r.sourceIndex||!e.sourceIndex){if(r==e){o=true}return r.sourceIndex?-1:1}var s=r.sourceIndex-e.sourceIndex;if(s===0){o=true}return s}}else{if(document.createRange){c=function(t,r){if(!t.ownerDocument||!r.ownerDocument){if(t==r){o=true}return t.ownerDocument?-1:1}var s=t.ownerDocument.createRange(),e=r.ownerDocument.createRange();s.setStart(t,0);s.setEnd(t,0);e.setStart(r,0);e.setEnd(r,0);var u=s.compareBoundaryPoints(Range.START_TO_END,e);if(u===0){o=true}return u}}}}b.getText=function(e){var r="",t;for(var s=0;e[s];s++){t=e[s];if(t.nodeType===3||t.nodeType===4){r+=t.nodeValue}else{if(t.nodeType!==8){r+=b.getText(t.childNodes)}}}return r};(function(){var r=document.createElement("div"),s="script"+(new Date()).getTime();r.innerHTML="<a name='"+s+"'/>";var e=document.documentElement;e.insertBefore(r,e.firstChild);if(document.getElementById(s)){f.find.ID=function(u,v,x){if(typeof v.getElementById!=="undefined"&&!x){var t=v.getElementById(u[1]);return t?t.id===u[1]||typeof t.getAttributeNode!=="undefined"&&t.getAttributeNode("id").nodeValue===u[1]?[t]:undefined:[]}};f.filter.ID=function(v,t){var u=typeof v.getAttributeNode!=="undefined"&&v.getAttributeNode("id");return v.nodeType===1&&u&&u.nodeValue===t}}e.removeChild(r);e=r=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){f.find.TAG=function(r,v){var u=v.getElementsByTagName(r[1]);if(r[1]==="*"){var t=[];for(var s=0;u[s];s++){if(u[s].nodeType===1){t.push(u[s])}}u=t}return u}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){f.attrHandle.href=function(r){return r.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=b,s=document.createElement("div");s.innerHTML="<p class='TEST'></p>";if(s.querySelectorAll&&s.querySelectorAll(".TEST").length===0){return}b=function(x,v,t,u){v=v||document;if(!u&&v.nodeType===9&&!b.isXML(v)){try{return a(v.querySelectorAll(x),t)}catch(y){}}return e(x,v,t,u)};for(var r in e){b[r]=e[r]}s=null})()}(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}f.order.splice(1,0,"CLASS");f.find.CLASS=function(r,s,t){if(typeof s.getElementsByClassName!=="undefined"&&!t){return s.getElementsByClassName(r[1])}};e=null})();function n(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1&&!z){e.sizcache=v;e.sizset=t}if(e.nodeName.toLowerCase()===x){u=e;break}e=e[r]}A[t]=u}}}function q(r,x,v,A,y,z){for(var t=0,s=A.length;t<s;t++){var e=A[t];if(e){e=e[r];var u=false;while(e){if(e.sizcache===v){u=A[e.sizset];break}if(e.nodeType===1){if(!z){e.sizcache=v;e.sizset=t}if(typeof x!=="string"){if(e===x){u=true;break}}else{if(b.filter(x,[e]).length>0){u=e;break}}}e=e[r]}A[t]=u}}}b.contains=document.compareDocumentPosition?function(r,e){return !!(r.compareDocumentPosition(e)&16)}:function(r,e){return r!==e&&(r.contains?r.contains(e):true)};b.isXML=function(e){var r=(e?e.ownerDocument||e:0).documentElement;return r?r.nodeName!=="HTML":false};var h=function(e,y){var t=[],u="",v,s=y.nodeType?[y]:y;while((v=f.match.PSEUDO.exec(e))){u+=v[0];e=e.replace(f.match.PSEUDO,"")}e=f.relative[e]?e+"*":e;for(var x=0,r=s.length;x<r;x++){b(e,s[x],t)}return b.filter(u,t)};window.tinymce.dom.Sizzle=b})();(function(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("tinymce.dom.EventUtils",{EventUtils:function(){this.inits=[];this.events=[]},add:function(m,p,l,j){var g,h=this,i=h.events,k;if(p instanceof Array){k=[];f(p,function(o){k.push(h.add(m,o,l,j))});return k}if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){if(h.disabled){return}n=n||window.event;if(n&&b){if(!n.target){n.target=n.srcElement}d.extend(n,h._stoppers)}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}if(c.isIE&&i.boxModel){this._fixIESelection()}c.addUnload(f.destroy,f)},setCursorLocation:function(h,i){var f=this;var g=f.dom.createRng();g.setStart(h,i);g.setEnd(h,i);f.setRng(g);f.collapse(false)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";g.forced_root_block="";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML="<br>"+(h.item?h.item(0).outerHTML:h.htmlText);l.removeChild(l.firstChild)}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(g,i){var n=this,f=n.getRng(),j,k=n.win.document,m,l;i=i||{format:"html"};i.set=true;g=i.content=g;if(!i.no_events){n.onBeforeSetContent.dispatch(n,i)}g=i.content;if(f.insertNode){g+='<span id="__caret">_</span>';if(f.startContainer==k&&f.endContainer==k){k.body.innerHTML=g}else{f.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=g}else{if(f.createContextualFragment){f.insertNode(f.createContextualFragment(g))}else{m=k.createDocumentFragment();l=k.createElement("div");m.appendChild(l);l.outerHTML=g;f.insertNode(m)}}}j=n.dom.get("__caret");f=k.createRange();f.setStartBefore(j);f.setEndBefore(j);n.setRng(f);n.dom.remove("__caret");try{n.setRng(f)}catch(h){}}else{if(f.item){k.execCommand("Delete",false,null);f=n.getRng()}if(/^\s+/.test(g)){f.pasteHTML('<span id="__mce_tmp">_</span>'+g);n.dom.remove("__mce_tmp")}else{f.pasteHTML(g)}}if(!i.no_events){n.onSetContent.dispatch(n,i)}},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(r,s){var v=this,m=v.dom,g,j,i,n,h,o,p,l="\uFEFF",u;function f(x,y){var t=0;d(m.select(x),function(A,z){if(A==y){t=z}});return t}if(r==2){function k(){var x=v.getRng(true),t=m.getRoot(),y={};function z(C,H){var B=C[H?"startContainer":"endContainer"],G=C[H?"startOffset":"endOffset"],A=[],D,F,E=0;if(B.nodeType==3){if(s){for(D=B.previousSibling;D&&D.nodeType==3;D=D.previousSibling){G+=D.nodeValue.length}}A.push(G)}else{F=B.childNodes;if(G>=F.length&&F.length){E=1;G=Math.max(0,F.length-1)}A.push(v.dom.nodeIndex(F[G],s)+E)}for(;B&&B!=t;B=B.parentNode){A.push(v.dom.nodeIndex(B,s))}return A}y.start=z(x,true);if(!v.isCollapsed()){y.end=z(x)}return y}if(v.tridentSel){return v.tridentSel.getBookmark(r)}return k()}if(r){return{rng:v.getRng()}}g=v.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();u="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();try{g.collapse();g.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_start" style="'+u+'">'+l+"</span>");if(!n){j.collapse(false);g.moveToElementText(j.parentElement());if(g.compareEndPoints("StartToEnd",j)==0){j.move("character",-1)}j.pasteHTML('<span data-mce-type="bookmark" id="'+i+'_end" style="'+u+'">'+l+"</span>")}}catch(q){return null}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=v.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_end",style:u},l))}g.collapse(true);g.insertNode(m.create("span",{"data-mce-type":"bookmark",id:i+"_start",style:u},l))}v.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){y=t[0];for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(t[v]>u.length-1){return}x=u[t[v]]}if(x.nodeType===3){y=Math.min(t[0],x.nodeValue.length)}if(x.nodeType===1){y=Math.min(t[0],x.childNodes.length)}if(z){f.setStart(x,y)}else{f.setEnd(x,y)}}return true}if(r.tridentSel){return r.tridentSel.moveToBookmark(n)}if(g(true)&&g()){r.setRng(f)}}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3&&!c.isOpera){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(l.isBlock(t)&&!t.innerHTML){t.innerHTML=!a?'<br data-mce-bogus="1" />':" "}return t}k("start");k("end");if(j){f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;if(k){f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g)}return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var h=this,g=h.getRng(),i;if(g.item){i=g.item(0);g=h.win.document.body.createTextRange();g.moveToElementText(i)}g.collapse(!!f);h.setRng(g)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(l){var g=this,h,i,k,j=g.win.document;if(l&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():j.createRange())}}catch(f){}if(c.isIE&&i&&i.setStart&&j.selection.createRange().item){k=j.selection.createRange().item(0);i=j.createRange();i.setStartBefore(k);i.setEndAfter(k)}if(!i){i=j.createRange?j.createRange():j.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;try{h.removeAllRanges()}catch(f){}h.addRange(i);g.selectedRange=h.rangeCount>0?h.getRangeAt(0):null}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var h=this,g=h.getRng(),i=h.getSel(),l,k=g.startContainer,f=g.endContainer;if(!g){return h.dom.getRoot()}if(g.setStart){l=g.commonAncestorContainer;if(!g.collapsed){if(g.startContainer==g.endContainer){if(g.endOffset-g.startOffset<2){if(g.startContainer.hasChildNodes()){l=g.startContainer.childNodes[g.startOffset]}}}if(k.nodeType===3&&f.nodeType===3){function j(p,m){var o=p;while(p&&p.nodeType===3&&p.length===0){p=m?p.nextSibling:p.previousSibling}return p||o}if(k.length===g.startOffset){k=j(k.nextSibling,true)}else{k=k.parentNode}if(g.endOffset===0){f=j(f.previousSibling,false)}else{f=f.parentNode}if(k&&k===f){return k}}}if(l&&l.nodeType==3){return l.parentNode}return l}return g.item?g.item(0):g.parentElement()},getSelectedBlocks:function(o,g){var m=this,j=m.dom,l,k,h,i=[];l=j.getParent(o||m.getStart(),j.isBlock);k=j.getParent(g||m.getEnd(),j.isBlock);if(l){i.push(l)}if(l&&k&&l!=k){h=l;var f=new c.dom.TreeWalker(l,j.getRoot());while((h=f.next())&&h!=k){if(j.isBlock(h)){i.push(h)}}}if(k&&l!=k){i.push(k)}return i},normalize:function(){var g=this,f,i;if(c.isIE){return}function h(p){var k,o,n,m=g.dom,j=m.getRoot(),l;k=f[(p?"start":"end")+"Container"];o=f[(p?"start":"end")+"Offset"];if(k.nodeType===9){k=k.body;o=0}if(k===j){if(k.hasChildNodes()){k=k.childNodes[Math.min(!p&&o>0?o-1:o,k.childNodes.length-1)];o=0;if(k.hasChildNodes()){l=k;n=new c.dom.TreeWalker(k,j);do{if(l.nodeType===3){o=p?0:l.nodeValue.length-1;k=l;i=true;break}if(/^(BR|IMG)$/.test(l.nodeName)){o=m.nodeIndex(l);k=l.parentNode;if(l.nodeName=="IMG"&&!p){o++}i=true;break}}while(l=(p?n.next():n.prev()))}}}if(i){f["set"+(p?"Start":"End")](k,o)}}f=g.getRng();h(true);if(!f.collapsed){h()}if(i){g.setRng(f)}},destroy:function(g){var f=this;f.win=null;if(!g){c.removeUnload(f.destroy)}},_fixIESelection:function(){var g=this.dom,m=g.doc,h=m.body,j,n,f;m.documentElement.unselectable=true;function i(o,r){var p=h.createTextRange();try{p.moveToPoint(o,r)}catch(q){p=null}return p}function l(p){var o;if(p.button){o=i(p.x,p.y);if(o){if(o.compareEndPoints("StartToStart",n)>0){o.setEndPoint("StartToStart",n)}else{o.setEndPoint("EndToEnd",n)}o.select()}}else{k()}}function k(){var o=m.selection.createRange();if(n&&!o.item&&o.compareEndPoints("StartToEnd",o)===0){n.select()}g.unbind(m,"mouseup",k);g.unbind(m,"mousemove",l);n=j=0}g.bind(m,["mousedown","contextmenu"],function(o){if(o.target.nodeName==="HTML"){if(j){k()}f=m.documentElement;if(f.scrollHeight>f.clientHeight){return}j=1;n=i(o.x,o.y);if(n){g.bind(m,"mouseup",k);g.bind(m,"mousemove",l);g.win.focus();n.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/\s*mce(Item\w+|Selected)\s*/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// <![CDATA[\n"+j(o)+"\n// ]]>"}}else{if(o.length>0){n.firstChild.value="<!--\n"+j(o)+"\n-->"}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(m.getInner?o.innerHTML:a.trim(i.getOuterHTML(o),m),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF|\u200B/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","previousSibling",e))}};(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(b){var a=b.dom.Event,c=b.each;b.create("tinymce.ui.KeyboardNavigation",{KeyboardNavigation:function(e,f){var p=this,m=e.root,l=e.items,n=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,k=e.excludeFromTabOrder,j,h,o,d,g;f=f||b.DOM;j=function(q){g=q.target.id};h=function(q){f.setAttrib(q.target.id,"tabindex","-1")};d=function(q){var r=f.get(g);f.setAttrib(r,"tabindex","0");r.focus()};p.focus=function(){f.get(g).focus()};p.destroy=function(){c(l,function(q){f.unbind(f.get(q.id),"focus",j);f.unbind(f.get(q.id),"blur",h)});f.unbind(f.get(m),"focus",d);f.unbind(f.get(m),"keydown",o);l=f=m=p.focus=j=h=o=d=null;p.destroy=function(){}};p.moveFocus=function(u,r){var q=-1,t=p.controls,s;if(!g){return}c(l,function(x,v){if(x.id===g){q=v;return false}});q+=u;if(q<0){q=l.length-1}else{if(q>=l.length){q=0}}s=l[q];f.setAttrib(g,"tabindex","-1");f.setAttrib(s.id,"tabindex","0");f.get(s.id).focus();if(e.actOnFocus){e.onAction(s.id)}if(r){a.cancel(r)}};o=function(y){var u=37,t=39,x=38,z=40,q=27,s=14,r=13,v=32;switch(y.keyCode){case u:if(i){p.moveFocus(-1)}break;case t:if(i){p.moveFocus(1)}break;case x:if(n){p.moveFocus(-1)}break;case z:if(n){p.moveFocus(1)}break;case q:if(e.onCancel){e.onCancel();a.cancel(y)}break;case s:case r:case v:if(e.onAction){e.onAction(g);a.cancel(y)}break}};c(l,function(s,q){var r;if(!s.id){s.id=f.uniqueId("_mce_item_")}if(k){f.bind(s.id,"blur",h);r="-1"}else{r=(q===0?"0":"-1")}f.setAttrib(s.id,"tabindex",r);f.bind(f.get(s.id),"focus",j)});if(l[0]){g=l[0].id}f.setAttrib(m,"tabindex","-1");f.bind(f.get(m),"focus",d);f.bind(f.get(m),"keydown",o)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a role="button" id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" aria-labelledby="'+this.id+'_voice" title="'+a.encode(e.title)+'">';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+='<img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" />'+c}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}d+='<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="'+this.id+'_voice">'+e.title+"</span>";d+="</a>";return d},postRender:function(){var c=this,e=c.settings,d;if(b.isIE&&c.editor){b.dom.Event.add(c.id,"mousedown",function(f){d=c.editor.selection.getBookmark()})}b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){if(b.isIE&&c.editor&&d){b.activeEditor.selection.moveToBookmark(d)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(c.id,"keyup",function(f){if(!c.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(i,h,f){var g=this;g.parent(i,h,f);g.items=[];g.onChange=new a(g);g.onPostRender=new a(g);g.onAdd=new a(g);g.onRenderMenu=new d.util.Dispatcher(this);g.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var h=this,i,j,g;if(f!=h.selectedIndex){i=c.get(h.id+"_text");g=c.get(h.id+"_voiceDesc");j=h.items[f];if(j){h.selectedValue=j.value;h.selectedIndex=f;c.setHTML(i,c.encode(j.title));c.setHTML(g,h.settings.title+" - "+j.title);c.removeClass(i,"mceTitle");c.setAttrib(h.id,"aria-valuenow",j.title)}else{c.setHTML(i,c.encode(h.settings.title));c.setHTML(g,c.encode(h.settings.title));c.addClass(i,"mceTitle");h.selectedValue=h.selectedIndex=null;c.setAttrib(h.id,"aria-valuenow",h.settings.title)}i=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<span role="listbox" aria-haspopup="true" aria-labelledby="'+f.id+'_voiceDesc" aria-describedby="'+f.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("span",{id:f.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},f.settings.title);i+=c.createHTML("a",{id:f.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},'<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>')+"</td>";i+="</tr></tbody></table></span>";return i},showMenu:function(){var g=this,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(j){if(j.value===g.selectedValue){f.items[j.id].setSelected(1);g.oldID=j.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){c.removeClass(f.id,f.classPrefix+"Selected");if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(function(){g.hideMenu();g.focus()});f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.role="option";h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id,"keydown",function(h){if(h.keyCode==32){f.showMenu(h);b.cancel(h)}});b.add(f.id,"focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id,"keydown",function(h){if(h.keyCode==40){f.showMenu();b.cancel(h)}});f.keyPressHandler=b.add(f.id,"keypress",function(i){var h;if(i.keyCode==13){h=f.selectedValue;f.selectedValue=null;b.cancel(i);f.settings.onselect(h)}})}f._focused=1});b.add(f.id,"blur",function(){b.remove(f.id,"keydown",f.keyDownHandler);b.remove(f.id,"keypress",f.keyPressHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f;this.setAriaProperty("disabled",f)},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox","aria-labelledby":f.id+"_aria"},g);g+=c.createHTML("span",{id:f.id+"_aria",style:"display: none"},f.settings.title);return g},postRender:function(){var g=this,h,i=true;g.rendered=true;function f(k){var j=g.items[k.target.selectedIndex-1];if(j&&(j=j.value)){g.onChange.dispatch(g,j);if(g.settings.onselect){g.settings.onselect(j)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(k){var j;b.remove(g.id,"change",h);i=false;j=b.add(g.id,"blur",function(){if(i){return}i=true;b.add(g.id,"change",f);b.remove(g.id,"blur",j)});if(d.isWebKit&&(k.keyCode==37||k.keyCode==39)){return b.prevent(k)}if(k.keyCode==13||k.keyCode==32){f(k);return b.cancel(k)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');i+="<td >"+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");new d.ui.KeyboardNavigation({root:p.id+"_menu",items:c.select("a",p.id+"_menu"),onCancel:function(){p.hideMenu();p.focus()}});a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return a.cancel(i)});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('<div id="'+f.id+'" role="group" aria-labelledby="'+f.id+'_voice">');i.push("<span role='application'>");i.push('<span id="'+f.id+'_voice" class="mceVoiceLabel" style="display:none;">'+d.encode(g.name)+"</span>");j(e,function(h){i.push(h.renderHTML())});i.push("</span>");i.push("</div>");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e<l.length;e++){k=l[e];d=l[e-1];g=l[e+1];if(e===0){j="mceToolbarStart";if(k.Button){j+=" mceToolbarStartButton"}else{if(k.SplitButton){j+=" mceToolbarStartSplitButton"}else{if(k.ListBox){j+=" mceToolbarStartListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,"<!-- IE -->"))}}if(c.stdMode){f+='<td style="position: relative">'+k.renderHTML()+"</td>"}else{f+="<td>"+k.renderHTML()+"</td>"}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,"<!-- IE -->"))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,"<!-- IE -->"));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},"<tbody><tr>"+f+"</tr></tbody>")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(n){var o=n.DOM,k=n.dom.Event,f=n.extend,l=n.util.Dispatcher,i=n.each,a=n.isGecko,b=n.isIE,e=n.isWebKit,d=n.is,h=n.ThemeManager,c=n.PluginManager,p=n.inArray,m=n.grep,g=n.explode,j=n.VK;n.create("tinymce.Editor",{Editor:function(u,r){var q=this;q.id=q.editorId=u;q.execCommands={};q.queryStateCommands={};q.queryValueCommands={};q.isNotDirty=false;q.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(s){q[s]=new l(q)});q.settings=r=f({id:u,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:n.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:n.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",validate:true,entity_encoding:"named",url_converter:q.convertURL,url_converter_scope:q,ie7_compat:true},r);q.documentBaseURI=new n.util.URI(r.document_base_url||n.documentBaseURL,{base_uri:tinyMCE.baseURI});q.baseURI=n.baseURI;q.contentCSS=[];q.execCallback("setup",q)},render:function(u){var v=this,x=v.settings,y=v.id,q=n.ScriptLoader;if(!k.domLoaded){k.add(document,"init",function(){v.render()});return}tinyMCE.settings=x;if(!v.getElement()){return}if(n.isIDevice&&!n.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(v.getElement().nodeName)&&x.hidden_input&&o.getParent(y,"form")){o.insertAfter(o.create("input",{type:"hidden",name:y}),y)}if(n.WindowManager){v.windowManager=new n.WindowManager(v)}if(x.encoding=="xml"){v.onGetContent.add(function(s,t){if(t.save){t.content=o.encode(t.content)}})}if(x.add_form_submit_trigger){v.onSubmit.addToTop(function(){if(v.initialized){v.save();v.isNotDirty=1}})}if(x.add_unload_trigger){v._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(v.initialized&&!v.destroyed&&!v.isHidden()){v.save({format:"raw",no_events:true})}})}n.addUnload(v.destroy,v);if(x.submit_patch){v.onBeforeRenderUI.add(function(){var s=v.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){v.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){n.triggerSave();v.isNotDirty=1;return v.formElement._mceOldSubmit(v.formElement)}}s=null})}function r(){if(x.language&&x.language_load!==false){q.add(n.baseURL+"/langs/"+x.language+".js")}if(x.theme&&x.theme.charAt(0)!="-"&&!h.urls[x.theme]){h.load(x.theme,"themes/"+x.theme+"/editor_template"+n.suffix+".js")}i(g(x.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(A){var z={prefix:"plugins/",resource:A,suffix:"/editor_plugin"+n.suffix+".js"};var A=c.createUrl(z,A);c.load(A.resource,A)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+n.suffix+".js"})}}});q.loadQueue(function(){if(!v.removed){v.init()}})}r()},init:function(){var v,I=this,J=I.settings,F,B,E=I.getElement(),r,q,G,z,D,H,A,x=[];n.add(I);J.aria_label=J.aria_label||o.getAttrib(E,"aria-label",I.getLang("aria.rich_text_area"));if(J.theme){J.theme=J.theme.replace(/-/,"");r=h.get(J.theme);I.theme=new r();if(I.theme.init&&J.init_theme){I.theme.init(I,h.urls[J.theme]||n.documentBaseURL.replace(/\/$/,""))}}function C(K){var L=c.get(K),t=c.urls[K]||n.documentBaseURL.replace(/\/$/,""),s;if(L&&n.inArray(x,K)===-1){i(c.dependencies(K),function(u){C(u)});s=new L(I,t);I.plugins[K]=s;if(s.init){s.init(I,t);x.push(K)}}}i(g(J.plugins.replace(/\-/g,"")),C);if(J.popup_css!==false){if(J.popup_css){J.popup_css=I.documentBaseURI.toAbsolute(J.popup_css)}else{J.popup_css=I.baseURI.toAbsolute("themes/"+J.theme+"/skins/"+J.skin+"/dialog.css")}}if(J.popup_css_add){J.popup_css+=","+I.documentBaseURI.toAbsolute(J.popup_css_add)}I.controlManager=new n.ControlManager(I);if(J.custom_undo_redo){I.onBeforeExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.beforeChange()}});I.onExecCommand.add(function(t,K,u,L,s){if(K!="Undo"&&K!="Redo"&&K!="mceRepaint"&&(!s||!s.skip_undo)){I.undoManager.add()}})}I.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){I.nodeChanged()}});if(a){function y(s,t){if(!t||!t.initial){I.execCommand("mceRepaint")}}I.onUndo.add(y);I.onRedo.add(y);I.onSetContent.add(y)}I.onBeforeRenderUI.dispatch(I,I.controlManager);if(J.render_ui){F=J.width||E.style.width||E.offsetWidth;B=J.height||E.style.height||E.offsetHeight;I.orgDisplay=E.style.display;H=/^[0-9\.]+(|px)$/i;if(H.test(""+F)){F=Math.max(parseInt(F)+(r.deltaWidth||0),100)}if(H.test(""+B)){B=Math.max(parseInt(B)+(r.deltaHeight||0),100)}r=I.theme.renderUI({targetNode:E,width:F,height:B,deltaWidth:J.delta_width,deltaHeight:J.delta_height});I.editorContainer=r.editorContainer}if(document.domain&&location.hostname!=document.domain){n.relaxedDomain=document.domain}o.setStyles(r.sizeContainer||r.editorContainer,{width:F,height:B});if(J.content_css){n.each(g(J.content_css),function(s){I.contentCSS.push(I.documentBaseURI.toAbsolute(s))})}B=(r.iframeHeight||B)+(typeof(B)=="number"?(r.deltaHeight||0):"");if(B<100){B=100}I.iframeHTML=J.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(J.document_base_url!=n.documentBaseURL){I.iframeHTML+='<base href="'+I.documentBaseURI.getURI()+'" />'}if(J.ie7_compat){I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{I.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}I.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(A=0;A<I.contentCSS.length;A++){I.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+I.contentCSS[A]+'" />'}z=J.body_id||"tinymce";if(z.indexOf("=")!=-1){z=I.getParam("body_id","","hash");z=z[I.id]||z}D=J.body_class||"";if(D.indexOf("=")!=-1){D=I.getParam("body_class","","hash");D=D[I.id]||""}I.iframeHTML+='</head><body id="'+z+'" class="mceContentBody '+D+'" onload="window.parent.tinyMCE.get(\''+I.id+"').onLoad.dispatch();\"><br></body></html>";if(n.relaxedDomain&&(b||(n.isOpera&&parseFloat(opera.version())<11))){G='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+I.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}v=o.add(r.iframeContainer,"iframe",{id:I.id+"_ifr",src:G||'javascript:""',frameBorder:"0",allowTransparency:"true",title:J.aria_label,style:{width:"100%",height:B,display:"block"}});I.contentAreaContainer=r.iframeContainer;o.get(r.editorContainer).style.display=I.orgDisplay;o.get(I.id).style.display="none";o.setAttrib(I.id,"aria-hidden",true);if(!n.relaxedDomain||!G){I.setupIframe()}E=v=r=null},setupIframe:function(){var r=this,x=r.settings,y=o.get(r.id),z=r.getDoc(),v,q;if(!b||!n.relaxedDomain){z.open();z.write(r.iframeHTML);z.close();if(n.relaxedDomain){z.domain=n.relaxedDomain}}q=r.getBody();q.disabled=true;if(!x.readonly){q.contentEditable=true}q.disabled=false;r.schema=new n.html.Schema(x);r.dom=new n.dom.DOMUtils(r.getDoc(),{keep_values:true,url_converter:r.convertURL,url_converter_scope:r,hex_colors:x.force_hex_style_colors,class_filter:x.class_filter,update_styles:1,fix_ie_paragraphs:1,schema:r.schema});r.parser=new n.html.DomParser(x,r.schema);if(!r.settings.allow_html_in_named_anchor){r.parser.addAttributeFilter("name",function(s,t){var B=s.length,D,A,C,E;while(B--){E=s[B];if(E.name==="a"&&E.firstChild){C=E.parent;D=E.lastChild;do{A=D.prev;C.insert(D,E);D=A}while(D)}}})}r.parser.addAttributeFilter("src,href,style",function(s,t){var A=s.length,C,E=r.dom,D,B;while(A--){C=s[A];D=C.attr(t);B="data-mce-"+t;if(!C.attributes.map[B]){if(t==="style"){C.attr(B,E.serializeStyle(E.parseStyle(D),C.name))}else{C.attr(B,r.convertURL(D,t,C.name))}}}});r.parser.addNodeFilter("script",function(s,t){var A=s.length,B;while(A--){B=s[A];B.attr("type","mce-"+(B.attr("type")||"text/javascript"))}});r.parser.addNodeFilter("#cdata",function(s,t){var A=s.length,B;while(A--){B=s[A];B.type=8;B.name="#comment";B.value="[CDATA["+B.value+"]]"}});r.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,A){var B=t.length,C,s=r.schema.getNonEmptyElements();while(B--){C=t[B];if(C.isEmpty(s)){C.empty().append(new n.html.Node("br",1)).shortEnded=true}}});r.serializer=new n.dom.Serializer(x,r.dom,r.schema);r.selection=new n.dom.Selection(r.dom,r.getWin(),r.serializer);r.formatter=new n.Formatter(this);r.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"}},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"}},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"}},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"}}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},wrap_links:false},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},wrap_links:false},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(s){return true},onformat:function(A,s,t){i(t,function(C,B){r.dom.setAttrib(A,B,C)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){r.formatter.register(s,{block:s,remove:"all"})});r.formatter.register(r.settings.formats);r.undoManager=new n.UndoManager(r);r.undoManager.onAdd.add(function(t,s){if(t.hasUndo()){return r.onChange.dispatch(r,s,t)}});r.undoManager.onUndo.add(function(t,s){return r.onUndo.dispatch(r,s,t)});r.undoManager.onRedo.add(function(t,s){return r.onRedo.dispatch(r,s,t)});r.forceBlocks=new n.ForceBlocks(r,{forced_root_block:x.forced_root_block});r.editorCommands=new n.EditorCommands(r);r.serializer.onPreProcess.add(function(s,t){return r.onPreProcess.dispatch(r,t,s)});r.serializer.onPostProcess.add(function(s,t){return r.onPostProcess.dispatch(r,t,s)});r.onPreInit.dispatch(r);if(!x.gecko_spellcheck){r.getBody().spellcheck=0}if(!x.readonly){r._addEvents()}r.controlManager.onPostRender.dispatch(r,r.controlManager);r.onPostRender.dispatch(r);r.quirks=new n.util.Quirks(this);if(x.directionality){r.getBody().dir=x.directionality}if(x.nowrap){r.getBody().style.whiteSpace="nowrap"}if(x.handle_node_change_callback){r.onNodeChange.add(function(t,s,A){r.execCallback("handle_node_change_callback",r.id,A,-1,-1,true,r.selection.isCollapsed())})}if(x.save_callback){r.onSaveContent.add(function(s,A){var t=r.execCallback("save_callback",r.id,A.content,r.getBody());if(t){A.content=t}})}if(x.onchange_callback){r.onChange.add(function(t,s){r.execCallback("onchange_callback",r,s)})}if(x.protect){r.onBeforeSetContent.add(function(s,t){if(x.protect){i(x.protect,function(A){t.content=t.content.replace(A,function(B){return"<!--mce:protected "+escape(B)+"-->"})})}})}if(x.convert_newlines_to_brs){r.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(x.preformatted){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(x.verify_css_classes){r.serializer.attribValueFilter=function(C,A){var B,t;if(C=="class"){if(!r.classesRE){t=r.dom.getClasses();if(t.length>0){B="";i(t,function(s){B+=(B?"|":"")+s["class"]});r.classesRE=new RegExp("("+B+")","gi")}}return !r.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(A)||r.classesRE.test(A)?A:""}return A}}if(x.cleanup_callback){r.onBeforeSetContent.add(function(s,t){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)});r.onPreProcess.add(function(s,t){if(t.set){r.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){r.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});r.onPostProcess.add(function(s,t){if(t.set){t.content=r.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=r.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(x.save_callback){r.onGetContent.add(function(s,t){if(t.save){t.content=r.execCallback("save_callback",r.id,t.content,r.getBody())}})}if(x.handle_event_callback){r.onEvent.add(function(s,t,A){if(r.execCallback("handle_event_callback",t,s,A)===false){k.cancel(t)}})}r.onSetContent.add(function(){r.addVisual(r.getBody())});if(x.padd_empty_editor){r.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function u(s,t){i(s.dom.select("a"),function(B){var A=B.parentNode;if(s.dom.isBlock(A)&&A.lastChild===B){s.dom.add(A,"br",{"data-mce-bogus":1})}})}r.onExecCommand.add(function(s,t){if(t==="CreateLink"){u(s)}});r.onSetContent.add(r.selection.onSetContent.add(u))}r.load({initial:true,format:"html"});r.startContent=r.getContent({format:"raw"});r.undoManager.add();r.initialized=true;r.onInit.dispatch(r);r.execCallback("setupcontent_callback",r.id,r.getBody(),r.getDoc());r.execCallback("init_instance_callback",r);r.focus(true);r.nodeChanged({initial:1});i(r.contentCSS,function(s){r.dom.loadCSS(s)});if(x.auto_focus){setTimeout(function(){var s=n.get(x.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getBody().focus();s.getWin().focus()},100)}y=null},focus:function(v){var z,r=this,u=r.selection,y=r.settings.content_editable,s,q,x=r.getDoc();if(!v){s=u.getRng();if(s.item){q=s.item(0)}r._refreshContentEditable();if(!y){r.getWin().focus()}if(n.isGecko){r.getBody().focus()}if(q&&q.ownerDocument==x){s=x.body.createControlRange();s.addElement(q);s.select()}}if(n.activeEditor!=r){if((z=n.activeEditor)!=null){z.onDeactivate.dispatch(z,r)}r.onActivate.dispatch(r,z)}n._setActive(r)},execCallback:function(v){var q=this,u=q.settings[v],r;if(!u){return}if(q.callbackLookup&&(r=q.callbackLookup[v])){u=r.func;r=r.scope}if(d(u,"string")){r=u.replace(/\.\w+$/,"");r=r?n.resolve(r):0;u=n.resolve(u);q.callbackLookup=q.callbackLookup||{};q.callbackLookup[v]={func:u,scope:r}}return u.apply(r||q,Array.prototype.slice.call(arguments,1))},translate:function(q){var t=this.settings.language||"en",r=n.i18n;if(!q){return""}return r[t+"."+q]||q.replace(/{\#([^}]+)\}/g,function(u,s){return r[t+"."+s]||"{#"+s+"}"})},getLang:function(r,q){return n.i18n[(this.settings.language||"en")+"."+r]||(d(q)?q:"{#"+r+"}")},getParam:function(x,s,q){var t=n.trim,r=d(this.settings[x])?this.settings[x]:s,u;if(q==="hash"){u={};if(d(r,"string")){i(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(y){y=y.split("=");if(y.length>1){u[t(y[0])]=t(y[1])}else{u[t(y[0])]=t(y)}})}else{u=r}return u}return r},nodeChanged:function(u){var q=this,r=q.selection,v=r.getStart()||q.getBody();if(q.initialized){u=u||{};v=b&&v.ownerDocument!=q.getDoc()?q.getBody():v;u.parents=[];q.dom.getParent(v,function(s){if(s.nodeName=="BODY"){return true}u.parents.push(s)});q.onNodeChange.dispatch(q,u?u.controlManager||q.controlManager:q.controlManager,v,r.isCollapsed(),u)}},addButton:function(u,r){var q=this;q.buttons=q.buttons||{};q.buttons[u]=r},addCommand:function(q,s,r){this.execCommands[q]={func:s,scope:r||this}},addQueryStateHandler:function(q,s,r){this.queryStateCommands[q]={func:s,scope:r||this}},addQueryValueHandler:function(q,s,r){this.queryValueCommands[q]={func:s,scope:r||this}},addShortcut:function(s,v,q,u){var r=this,x;if(!r.settings.custom_shortcuts){return false}r.shortcuts=r.shortcuts||{};if(d(q,"string")){x=q;q=function(){r.execCommand(x,false,null)}}if(d(q,"object")){x=q;q=function(){r.execCommand(x[0],x[1],x[2])}}i(g(s),function(t){var y={func:q,scope:u||this,desc:v,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(z){switch(z){case"alt":case"ctrl":case"shift":y[z]=true;break;default:y.charCode=z.charCodeAt(0);y.keyCode=z.toUpperCase().charCodeAt(0)}});r.shortcuts[(y.ctrl?"ctrl":"")+","+(y.alt?"alt":"")+","+(y.shift?"shift":"")+","+y.keyCode]=y});return true},execCommand:function(y,x,A,q){var u=this,v=0,z,r;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(y)&&(!q||!q.skip_focus)){u.focus()}z={};u.onBeforeExecCommand.dispatch(u,y,x,A,z);if(z.terminate){return false}if(u.execCallback("execcommand_callback",u.id,u.selection.getNode(),y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(z=u.execCommands[y]){r=z.func.call(z.scope,x,A);if(r!==true){u.onExecCommand.dispatch(u,y,x,A,q);return r}}i(u.plugins,function(s){if(s.execCommand&&s.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);v=1;return false}});if(v){return true}if(u.theme&&u.theme.execCommand&&u.theme.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}if(u.editorCommands.execCommand(y,x,A)){u.onExecCommand.dispatch(u,y,x,A,q);return true}u.getDoc().execCommand(y,x,A);u.onExecCommand.dispatch(u,y,x,A,q)},queryCommandState:function(v){var r=this,x,u;if(r._isHidden()){return}if(x=r.queryStateCommands[v]){u=x.func.call(x.scope);if(u!==true){return u}}x=r.editorCommands.queryCommandState(v);if(x!==-1){return x}try{return this.getDoc().queryCommandState(v)}catch(q){}},queryCommandValue:function(x){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryValueCommands[x]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandValue(x);if(d(v)){return v}try{return this.getDoc().queryCommandValue(x)}catch(q){}},show:function(){var q=this;o.show(q.getContainer());o.hide(q.id);q.load()},hide:function(){var q=this,r=q.getDoc();if(b&&r){r.execCommand("SelectAll")}q.save();o.hide(q.getContainer());o.setStyle(q.id,"display",q.orgDisplay)},isHidden:function(){return !o.isHidden(this.id)},setProgressState:function(q,r,s){this.onSetProgressState.dispatch(this,q,r,s);return q},load:function(u){var q=this,s=q.getElement(),r;if(s){u=u||{};u.load=true;r=q.setContent(d(s.value)?s.value:s.innerHTML,u);u.element=s;if(!u.no_events){q.onLoadContent.dispatch(q,u)}u.element=s=null;return r}},save:function(v){var q=this,u=q.getElement(),r,s;if(!u||!q.initialized){return}v=v||{};v.save=true;if(!v.no_events){q.undoManager.typing=false;q.undoManager.add()}v.element=u;r=v.content=q.getContent(v);if(!v.no_events){q.onSaveContent.dispatch(q,v)}r=v.content;if(!/TEXTAREA|INPUT/i.test(u.nodeName)){u.innerHTML=r;if(s=o.getParent(q.id,"form")){i(s.elements,function(t){if(t.name==q.id){t.value=r;return false}})}}else{u.value=r}v.element=u=null;return r},setContent:function(v,t){var s=this,r,q=s.getBody(),u;t=t||{};t.format=t.format||"html";t.set=true;t.content=v;if(!t.no_events){s.onBeforeSetContent.dispatch(s,t)}v=t.content;if(!n.isIE&&(v.length===0||/^\s+$/.test(v))){u=s.settings.forced_root_block;if(u){v="<"+u+'><br data-mce-bogus="1"></'+u+">"}else{v='<br data-mce-bogus="1">'}q.innerHTML=v;s.selection.select(q,true);s.selection.collapse(true);return}if(t.format!=="raw"){v=new n.html.Serializer({},s.schema).serialize(s.parser.parse(v))}t.content=n.trim(v);s.dom.setHTML(q,t.content);if(!t.no_events){s.onSetContent.dispatch(s,t)}s.selection.normalize();return t.content},getContent:function(r){var q=this,s;r=r||{};r.format=r.format||"html";r.get=true;if(!r.no_events){q.onBeforeGetContent.dispatch(q,r)}if(r.format=="raw"){s=q.getBody().innerHTML}else{s=q.serializer.serialize(q.getBody(),r)}r.content=n.trim(s);if(!r.no_events){q.onGetContent.dispatch(q,r)}return r.content},isDirty:function(){var q=this;return n.trim(q.startContent)!=n.trim(q.getContent({format:"raw",no_events:1}))&&!q.isNotDirty},getContainer:function(){var q=this;if(!q.container){q.container=o.get(q.editorContainer||q.id+"_parent")}return q.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return o.get(this.settings.content_element||this.id)},getWin:function(){var q=this,r;if(!q.contentWindow){r=o.get(q.id+"_ifr");if(r){q.contentWindow=r.contentWindow}}return q.contentWindow},getDoc:function(){var r=this,q;if(!r.contentDocument){q=r.getWin();if(q){r.contentDocument=q.document}}return r.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(q,y,x){var r=this,v=r.settings;if(v.urlconverter_callback){return r.execCallback("urlconverter_callback",q,x,true,y)}if(!v.convert_urls||(x&&x.nodeName=="LINK")||q.indexOf("file:")===0){return q}if(v.relative_urls){return r.documentBaseURI.toRelative(q)}q=r.documentBaseURI.toAbsolute(q,v.remove_script_host);return q},addVisual:function(u){var q=this,r=q.settings;u=u||q.getBody();if(!d(q.hasVisual)){q.hasVisual=r.visual}i(q.dom.select("table,a",u),function(t){var s;switch(t.nodeName){case"TABLE":s=q.dom.getAttrib(t,"border");if(!s||s=="0"){if(q.hasVisual){q.dom.addClass(t,r.visual_table_class)}else{q.dom.removeClass(t,r.visual_table_class)}}return;case"A":s=q.dom.getAttrib(t,"name");if(s){if(q.hasVisual){q.dom.addClass(t,"mceItemAnchor")}else{q.dom.removeClass(t,"mceItemAnchor")}}return}});q.onVisualAid.dispatch(q,u,q.hasVisual)},remove:function(){var q=this,r=q.getContainer();q.removed=1;q.hide();q.execCallback("remove_instance_callback",q);q.onRemove.dispatch(q);q.onExecCommand.listeners=[];n.remove(q);o.remove(r)},destroy:function(r){var q=this;if(q.destroyed){return}if(!r){n.removeUnload(q.destroy);tinyMCE.onBeforeUnload.remove(q._beforeUnload);if(q.theme&&q.theme.destroy){q.theme.destroy()}q.controlManager.destroy();q.selection.destroy();q.dom.destroy();if(!q.settings.content_editable){k.clear(q.getWin());k.clear(q.getDoc())}k.clear(q.getBody());k.clear(q.formElement)}if(q.formElement){q.formElement.submit=q.formElement._mceOldSubmit;q.formElement._mceOldSubmit=null}q.contentAreaContainer=q.formElement=q.container=q.settings.content_element=q.bodyElement=q.contentDocument=q.contentWindow=null;if(q.selection){q.selection=q.selection.win=q.selection.dom=q.selection.dom.doc=null}q.destroyed=1},_addEvents:function(){var C=this,u,D=C.settings,r=C.dom,y={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function q(t,E){var s=t.type;if(C.removed){return}if(C.onEvent.dispatch(C,t,E)!==false){C[y[t.fakeType||t.type]].dispatch(C,t,E)}}i(y,function(t,s){switch(s){case"contextmenu":r.bind(C.getDoc(),s,q);break;case"paste":r.bind(C.getBody(),s,function(E){q(E)});break;case"submit":case"reset":r.bind(C.getElement().form||o.getParent(C.id,"form"),s,q);break;default:r.bind(D.content_editable?C.getBody():C.getDoc(),s,q)}});r.bind(D.content_editable?C.getBody():(a?C.getDoc():C.getWin()),"focus",function(s){C.focus(true)});if(n.isGecko){r.bind(C.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("data-mce-src"))){t.src=C.documentBaseURI.toAbsolute(s)}})}if(a){function v(){var F=this,H=F.getDoc(),G=F.settings;if(a&&!G.readonly){F._refreshContentEditable();try{H.execCommand("styleWithCSS",0,false)}catch(E){if(!F._isHidden()){try{H.execCommand("useCSS",0,true)}catch(E){}}}if(!G.table_inline_editing){try{H.execCommand("enableInlineTableEditing",false,false)}catch(E){}}if(!G.object_resizing){try{H.execCommand("enableObjectResizing",false,false)}catch(E){}}}}C.onBeforeExecCommand.add(v);C.onMouseDown.add(v)}C.onMouseUp.add(C.nodeChanged);C.onKeyUp.add(function(s,t){var E=t.keyCode;if((E>=33&&E<=36)||(E>=37&&E<=40)||E==13||E==45||E==46||E==8||(n.isMac&&(E==91||E==93))||t.ctrlKey){C.nodeChanged()}});C.onKeyDown.add(function(t,E){if(E.keyCode!=j.BACKSPACE){return}var s=t.selection.getRng();if(!s.collapsed){return}var G=s.startContainer;var F=s.startOffset;while(G&&G.nodeType&&G.nodeType!=1&&G.parentNode){G=G.parentNode}if(G&&G.parentNode&&G.parentNode.tagName==="BLOCKQUOTE"&&G.parentNode.firstChild==G&&F==0){t.formatter.toggle("blockquote",null,G.parentNode);s.setStart(G,0);s.setEnd(G,0);t.selection.setRng(s);t.selection.collapse(false)}});C.onReset.add(function(){C.setContent(C.startContent,{format:"raw"})});if(D.custom_shortcuts){if(D.custom_undo_redo_keyboard_shortcuts){C.addShortcut("ctrl+z",C.getLang("undo_desc"),"Undo");C.addShortcut("ctrl+y",C.getLang("redo_desc"),"Redo")}C.addShortcut("ctrl+b",C.getLang("bold_desc"),"Bold");C.addShortcut("ctrl+i",C.getLang("italic_desc"),"Italic");C.addShortcut("ctrl+u",C.getLang("underline_desc"),"Underline");for(u=1;u<=6;u++){C.addShortcut("ctrl+"+u,"",["FormatBlock",false,"h"+u])}C.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);C.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);C.addShortcut("ctrl+9","",["FormatBlock",false,"address"]);function x(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(C.shortcuts,function(E){if(n.isMac&&E.ctrl!=t.metaKey){return}else{if(!n.isMac&&E.ctrl!=t.ctrlKey){return}}if(E.alt!=t.altKey){return}if(E.shift!=t.shiftKey){return}if(t.keyCode==E.keyCode||(t.charCode&&t.charCode==E.charCode)){s=E;return false}});return s}C.onKeyUp.add(function(s,t){var E=x(t);if(E){return k.cancel(t)}});C.onKeyPress.add(function(s,t){var E=x(t);if(E){return k.cancel(t)}});C.onKeyDown.add(function(s,t){var E=x(t);if(E){E.func.call(E.scope);return k.cancel(t)}})}if(n.isIE){r.bind(C.getDoc(),"controlselect",function(E){var t=C.resizeInfo,s;E=E.target;if(E.nodeName!=="IMG"){return}if(t){r.unbind(t.node,t.ev,t.cb)}if(!r.hasClass(E,"mceItemNoResize")){ev="resizeend";s=r.bind(E,ev,function(G){var F;G=G.target;if(F=r.getStyle(G,"width")){r.setAttrib(G,"width",F.replace(/[^0-9%]+/g,""));r.setStyle(G,"width","")}if(F=r.getStyle(G,"height")){r.setAttrib(G,"height",F.replace(/[^0-9%]+/g,""));r.setStyle(G,"height","")}})}else{ev="resizestart";s=r.bind(E,"resizestart",k.cancel,k)}t=C.resizeInfo={node:E,ev:ev,cb:s}})}if(n.isOpera){C.onClick.add(function(s,t){k.prevent(t)})}if(D.custom_undo_redo){function z(){C.undoManager.typing=false;C.undoManager.add()}r.bind(C.getDoc(),"focusout",function(s){if(!C.removed&&C.undoManager.typing){z()}});C.dom.bind(C.dom.getRoot(),"dragend",function(s){z()});C.onKeyUp.add(function(s,E){var t=E.keyCode;if((t>=33&&t<=36)||(t>=37&&t<=40)||t==13||t==45||E.ctrlKey){z()}});C.onKeyDown.add(function(s,F){var E=F.keyCode,t;if(E==8){t=C.getDoc().selection;if(t&&t.createRange&&t.createRange().item){C.undoManager.beforeChange();s.dom.remove(t.createRange().item(0));z();return k.cancel(F)}}if((E>=33&&E<=36)||(E>=37&&E<=40)||E==13||E==45){if(n.isIE&&E==13){C.undoManager.beforeChange()}if(C.undoManager.typing){z()}return}if((E<16||E>20)&&E!=224&&E!=91&&!C.undoManager.typing){C.undoManager.beforeChange();C.undoManager.typing=true;C.undoManager.add()}});C.onMouseDown.add(function(){if(C.undoManager.typing){z()}})}if(n.isGecko){function B(){var s=C.dom.getAttribs(C.selection.getStart().cloneNode(false));return function(){var t=C.selection.getStart();if(t!==C.getBody()){C.dom.setAttrib(t,"style",null);i(s,function(E){t.setAttributeNode(E.cloneNode(true))})}}}function A(){var t=C.selection;return !t.isCollapsed()&&t.getStart()!=t.getEnd()}C.onKeyPress.add(function(s,E){var t;if((E.keyCode==8||E.keyCode==46)&&A()){t=B();C.getDoc().execCommand("delete",false,null);t();return k.cancel(E)}});C.dom.bind(C.getDoc(),"cut",function(t){var s;if(A()){s=B();C.onKeyUp.addToTop(k.cancel,k);setTimeout(function(){s();C.onKeyUp.remove(k.cancel,k)},0)}})}},_refreshContentEditable:function(){var r=this,q,s;if(r._isHidden()){q=r.getBody();s=q.parentNode;s.removeChild(q);s.appendChild(q);q.focus()}},_isHidden:function(){var q;if(!a){return 0}q=this.selection.getSel();return(!q||!q.rangeCount||q.rangeCount==0)}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return b}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return b}function u(v,x){x=x||"exec";d(v,function(z,y){d(y.toLowerCase().split(","),function(A){j[x][A]=z})})}c.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===e){x=b}if(v===e){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:e)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);d("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=c.explode(k.font_size_style_values);v=c.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return b}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new c.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=n.selection.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=c.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){d(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();v.setStart(x,0);v.setEnd(x,x.childNodes.length);n.selection.setRng(v)}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[p.getNode()]:p.getSelectedBlocks();var y=c.map(v,function(A){return !!q.matchNode(A,x)});return c.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(v){return m.getParent(p.getNode(),v=="insertunorderedlist"?"UL":"OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");if(k.custom_undo_redo){u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(f){var d,e=0,h=[],c;function g(){return b.trim(f.getContent({format:"raw",no_events:1}))}return d={typing:false,onAdd:new a(d),onUndo:new a(d),onRedo:new a(d),beforeChange:function(){c=f.selection.getBookmark(2,true)},add:function(m){var j,k=f.settings,l;m=m||{};m.content=g();l=h[e];if(l&&l.content==m.content){return null}if(h[e]){h[e].beforeBookmark=c}if(k.custom_undo_redo_levels){if(h.length>k.custom_undo_redo_levels){for(j=0;j<h.length-1;j++){h[j]=h[j+1]}h.length--;e=h.length}}m.bookmark=f.selection.getBookmark(2,true);if(e<h.length-1){h.length=e+1}h.push(m);e=h.length-1;d.onAdd.dispatch(d,m);f.isNotDirty=0;return m},undo:function(){var k,j;if(d.typing){d.add();d.typing=false}if(e>0){k=h[--e];f.setContent(k.content,{format:"raw"});f.selection.moveToBookmark(k.beforeBookmark);d.onUndo.dispatch(d,k)}return k},redo:function(){var i;if(e<h.length-1){i=h[++e];f.setContent(i.content,{format:"raw"});f.selection.moveToBookmark(i.bookmark);d.onRedo.dispatch(d,i)}return i},clear:function(){h=[];e=0;d.typing=false},hasUndo:function(){return e>0||this.typing},hasRedo:function(){return e<h.length-1&&!this.typing}}}})(tinymce);(function(l){var j=l.dom.Event,c=l.isIE,a=l.isGecko,b=l.isOpera,i=l.each,h=l.extend,d=true,g=false;function k(o){var p,n,m;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(o.nodeName)){if(p){n=o.cloneNode(false);n.appendChild(p);p=n}else{p=m=o.cloneNode(false)}p.removeAttribute("id")}}while(o=o.parentNode);if(p){return{wrapper:p,inner:m}}}function f(n,o){var m=o.ownerDocument.createRange();m.setStart(n.endContainer,n.endOffset);m.setEndAfter(o);return m.cloneContents().textContent.length==0}function e(o,q,m){var n,p;if(q.isEmpty(m)){n=q.getParent(m,"ul,ol");if(!q.getParent(n.parentNode,"ul,ol")){q.split(n,m);p=q.create("p",0,'<br data-mce-bogus="1" />');q.replace(p,m);o.select(p,1)}return g}return d}l.create("tinymce.ForceBlocks",{ForceBlocks:function(m){var n=this,o=m.settings,p;n.editor=m;n.dom=m.dom;p=(o.forced_root_block||"p").toLowerCase();o.element=p.toUpperCase();m.onPreInit.add(n.setup,n)},setup:function(){var n=this,m=n.editor,p=m.settings,u=m.dom,o=m.selection,q=m.schema.getBlockElements();if(p.forced_root_block){function v(){var y=o.getStart(),t=m.getBody(),s,z,D,F,E,x,A,B=-16777215;if(!y||y.nodeType!==1){return}while(y!=t){if(q[y.nodeName]){return}y=y.parentNode}s=o.getRng();if(s.setStart){z=s.startContainer;D=s.startOffset;F=s.endContainer;E=s.endOffset}else{if(s.item){s=m.getDoc().body.createTextRange();s.moveToElementText(s.item(0))}tmpRng=s.duplicate();tmpRng.collapse(true);D=tmpRng.move("character",B)*-1;if(!tmpRng.collapsed){tmpRng=s.duplicate();tmpRng.collapse(false);E=(tmpRng.move("character",B)*-1)-D}}for(y=t.firstChild;y;y){if(y.nodeType===3||(y.nodeType==1&&!q[y.nodeName])){if(!x){x=u.create(p.forced_root_block);y.parentNode.insertBefore(x,y)}A=y;y=y.nextSibling;x.appendChild(A)}else{x=null;y=y.nextSibling}}if(s.setStart){s.setStart(z,D);s.setEnd(F,E);o.setRng(s)}else{try{s=m.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(true);s.moveStart("character",D);if(E>0){s.moveEnd("character",E)}s.select()}catch(C){}}m.nodeChanged()}m.onKeyUp.add(v);m.onClick.add(v)}if(p.force_br_newlines){if(c){m.onKeyPress.add(function(s,t){var x;if(t.keyCode==13&&o.getNode().nodeName!="LI"){o.setContent('<br id="__" /> ',{format:"raw"});x=u.get("__");x.removeAttribute("id");o.select(x);o.collapse();return j.cancel(t)}})}}if(p.force_p_newlines){if(!c){m.onKeyPress.add(function(s,t){if(t.keyCode==13&&!t.shiftKey&&!n.insertPara(t)){j.cancel(t)}})}else{l.addUnload(function(){n._previousFormats=0});m.onKeyPress.add(function(s,t){n._previousFormats=0;if(t.keyCode==13&&!t.shiftKey&&s.selection.isCollapsed()&&p.keep_styles){n._previousFormats=k(s.selection.getStart())}});m.onKeyUp.add(function(t,y){if(y.keyCode==13&&!y.shiftKey){var x=t.selection.getStart(),s=n._previousFormats;if(!x.hasChildNodes()&&s){x=u.getParent(x,u.isBlock);if(x&&x.nodeName!="LI"){x.innerHTML="";if(n._previousFormats){x.appendChild(s.wrapper);s.inner.innerHTML="\uFEFF"}else{x.innerHTML="\uFEFF"}o.select(x,1);o.collapse(true);t.getDoc().execCommand("Delete",false,null);n._previousFormats=0}}}})}if(a){m.onKeyDown.add(function(s,t){if((t.keyCode==8||t.keyCode==46)&&!t.shiftKey){n.backspaceDelete(t,t.keyCode==8)}})}}if(l.isWebKit){function r(t){var s=o.getRng(),x,A=u.create("div",null," "),z,y=u.getViewPort(t.getWin()).h;s.insertNode(x=u.create("br"));s.setStartAfter(x);s.setEndAfter(x);o.setRng(s);if(o.getSel().focusNode==x.previousSibling){o.select(u.insertAfter(u.doc.createTextNode("\u00a0"),x));o.collapse(d)}u.insertAfter(A,x);z=u.getPos(A).y;u.remove(A);if(z>y){t.getWin().scrollTo(0,z)}}m.onKeyPress.add(function(s,t){if(t.keyCode==13&&(t.shiftKey||(p.force_br_newlines&&!u.getParent(o.getNode(),"h1,h2,h3,h4,h5,h6,ol,ul")))){r(s);j.cancel(t)}})}if(c){if(p.element!="P"){m.onKeyPress.add(function(s,t){n.lastElm=o.getNode().nodeName});m.onKeyUp.add(function(t,x){var z,y=o.getNode(),s=t.getBody();if(s.childNodes.length===1&&y.nodeName=="P"){y=u.rename(y,p.element);o.select(y);o.collapse();t.nodeChanged()}else{if(x.keyCode==13&&!x.shiftKey&&n.lastElm!="P"){z=u.getParent(y,"p");if(z){u.rename(z,p.element);t.nodeChanged()}}}})}}},getParentBlock:function(o){var m=this.dom;return m.getParent(o,m.isBlock)},insertPara:function(Q){var E=this,v=E.editor,M=v.dom,R=v.getDoc(),V=v.settings,F=v.selection.getSel(),G=F.getRangeAt(0),U=R.body;var J,K,H,O,N,q,o,u,z,m,C,T,p,x,I,L=M.getViewPort(v.getWin()),B,D,A;v.undoManager.beforeChange();J=R.createRange();J.setStart(F.anchorNode,F.anchorOffset);J.collapse(d);K=R.createRange();K.setStart(F.focusNode,F.focusOffset);K.collapse(d);H=J.compareBoundaryPoints(J.START_TO_END,K)<0;O=H?F.anchorNode:F.focusNode;N=H?F.anchorOffset:F.focusOffset;q=H?F.focusNode:F.anchorNode;o=H?F.focusOffset:F.anchorOffset;if(O===q&&/^(TD|TH)$/.test(O.nodeName)){if(O.firstChild.nodeName=="BR"){M.remove(O.firstChild)}if(O.childNodes.length==0){v.dom.add(O,V.element,null,"<br />");T=v.dom.add(O,V.element,null,"<br />")}else{I=O.innerHTML;O.innerHTML="";v.dom.add(O,V.element,null,I);T=v.dom.add(O,V.element,null,"<br />")}G=R.createRange();G.selectNodeContents(T);G.collapse(1);v.selection.setRng(G);return g}if(O==U&&q==U&&U.firstChild&&v.dom.isBlock(U.firstChild)){O=q=O.firstChild;N=o=0;J=R.createRange();J.setStart(O,0);K=R.createRange();K.setStart(q,0)}if(!R.body.hasChildNodes()){R.body.appendChild(M.create("br"))}O=O.nodeName=="HTML"?R.body:O;O=O.nodeName=="BODY"?O.firstChild:O;q=q.nodeName=="HTML"?R.body:q;q=q.nodeName=="BODY"?q.firstChild:q;u=E.getParentBlock(O);z=E.getParentBlock(q);m=u?u.nodeName:V.element;if(I=E.dom.getParent(u,"li,pre")){if(I.nodeName=="LI"){return e(v.selection,E.dom,I)}return d}if(u&&(u.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;u=null}if(z&&(z.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(M.getStyle(u,"position",1)))){m=V.element;z=null}if(/(TD|TABLE|TH|CAPTION)/.test(m)||(u&&m=="DIV"&&/left|right/gi.test(M.getStyle(u,"float",1)))){m=V.element;u=z=null}C=(u&&u.nodeName==m)?u.cloneNode(0):v.dom.create(m);T=(z&&z.nodeName==m)?z.cloneNode(0):v.dom.create(m);T.removeAttribute("id");if(/^(H[1-6])$/.test(m)&&f(G,u)){T=v.dom.create(V.element)}I=p=O;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}p=I}while((I=I.previousSibling?I.previousSibling:I.parentNode));I=x=q;do{if(I==U||I.nodeType==9||E.dom.isBlock(I)||/(TD|TABLE|TH|CAPTION)/.test(I.nodeName)){break}x=I}while((I=I.nextSibling?I.nextSibling:I.parentNode));if(p.nodeName==m){J.setStart(p,0)}else{J.setStartBefore(p)}J.setEnd(O,N);C.appendChild(J.cloneContents()||R.createTextNode(""));try{K.setEndAfter(x)}catch(P){}K.setStart(q,o);T.appendChild(K.cloneContents()||R.createTextNode(""));G=R.createRange();if(!p.previousSibling&&p.parentNode.nodeName==m){G.setStartBefore(p.parentNode)}else{if(J.startContainer.nodeName==m&&J.startOffset==0){G.setStartBefore(J.startContainer)}else{G.setStart(J.startContainer,J.startOffset)}}if(!x.nextSibling&&x.parentNode.nodeName==m){G.setEndAfter(x.parentNode)}else{G.setEnd(K.endContainer,K.endOffset)}G.deleteContents();if(b){v.getWin().scrollTo(0,L.y)}if(C.firstChild&&C.firstChild.nodeName==m){C.innerHTML=C.firstChild.innerHTML}if(T.firstChild&&T.firstChild.nodeName==m){T.innerHTML=T.firstChild.innerHTML}function S(y,s){var r=[],X,W,t;y.innerHTML="";if(V.keep_styles){W=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(W.nodeName)){X=W.cloneNode(g);M.setAttrib(X,"id","");r.push(X)}}while(W=W.parentNode)}if(r.length>0){for(t=r.length-1,X=y;t>=0;t--){X=X.appendChild(r[t])}r[0].innerHTML=b?"\u00a0":"<br />";return r[0]}else{y.innerHTML=b?"\u00a0":"<br />"}}if(M.isEmpty(C)){S(C,O)}if(M.isEmpty(T)){A=S(T,q)}if(b&&parseFloat(opera.version())<9.5){G.insertNode(C);G.insertNode(T)}else{G.insertNode(T);G.insertNode(C)}T.normalize();C.normalize();v.selection.select(T,true);v.selection.collapse(true);B=v.dom.getPos(T).y;if(B<L.y||B+25>L.y+L.h){v.getWin().scrollTo(0,B<L.y?B:B-L.h+25)}v.undoManager.add();return g},backspaceDelete:function(u,B){var C=this,s=C.editor,y=s.getBody(),q=s.dom,p,v=s.selection,o=v.getRng(),x=o.startContainer,p,z,A,m;if(!B&&o.collapsed&&x.nodeType==1&&o.startOffset==x.childNodes.length){m=new l.dom.TreeWalker(x.lastChild,x);for(p=x.lastChild;p;p=m.prev()){if(p.nodeType==3){o.setStart(p,p.nodeValue.length);o.collapse(true);v.setRng(o);return}}}if(x&&s.dom.isBlock(x)&&!/^(TD|TH)$/.test(x.nodeName)&&B){if(x.childNodes.length==0||(x.childNodes.length==1&&x.firstChild.nodeName=="BR")){p=x;while((p=p.previousSibling)&&!s.dom.isBlock(p)){}if(p){if(x!=y.firstChild){z=s.dom.doc.createTreeWalker(p,NodeFilter.SHOW_TEXT,null,g);while(A=z.nextNode()){p=A}o=s.getDoc().createRange();o.setStart(p,p.nodeValue?p.nodeValue.length:0);o.setEnd(p,p.nodeValue?p.nodeValue.length:0);v.setRng(o);s.dom.remove(x)}return j.cancel(u)}}}}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i,g);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i,g)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i,g));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n,j);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createToolbarGroup:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||this._cls.toolbarGroup||c.ui.ToolbarGroup;i=new f(k,h,g.editor);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.Formatter=function(V){var M={},P=a.each,c=V.dom,q=V.selection,t=a.dom.TreeWalker,K=new a.dom.RangeUtils(c),d=V.schema.isValidChild,F=c.isBlock,l=V.settings.forced_root_block,s=c.nodeIndex,E="\uFEFF",e=/^(src|href|style)$/,S=false,B=true,p;function z(W){return W instanceof Array}function m(X,W){return c.getParents(X,W,c.getRoot())}function b(W){return W.nodeType===1&&(W.face==="mceinline"||W.style.fontFamily==="mceinline")}function R(W){return W?M[W]:M}function k(W,X){if(W){if(typeof(W)!=="string"){P(W,function(Z,Y){k(Y,Z)})}else{X=X.length?X:[X];P(X,function(Y){if(Y.deep===p){Y.deep=!Y.selector}if(Y.split===p){Y.split=!Y.selector||Y.inline}if(Y.remove===p&&Y.selector&&!Y.inline){Y.remove="none"}if(Y.selector&&Y.inline){Y.mixed=true;Y.block_expand=true}if(typeof(Y.classes)==="string"){Y.classes=Y.classes.split(/\s+/)}});M[W]=X}}}var i=function(X){var W;V.dom.getParent(X,function(Y){W=V.dom.getStyle(Y,"text-decoration");return W&&W!=="none"});return W};var I=function(W){var X;if(W.nodeType===1&&W.parentNode&&W.parentNode.nodeType===1){X=i(W.parentNode);if(V.dom.getStyle(W,"color")&&X){V.dom.setStyle(W,"text-decoration",X)}else{if(V.dom.getStyle(W,"textdecoration")===X){V.dom.setStyle(W,"text-decoration",null)}}}};function T(Z,ag,ab){var ac=R(Z),ah=ac[0],af,X,ae,ad=q.isCollapsed();function W(al,ak){ak=ak||ah;if(al){if(ak.onformat){ak.onformat(al,ak,ag,ab)}P(ak.styles,function(an,am){c.setStyle(al,am,r(an,ag))});P(ak.attributes,function(an,am){c.setAttrib(al,am,r(an,ag))});P(ak.classes,function(am){am=r(am,ag);if(!c.hasClass(al,am)){c.addClass(al,am)}})}}function aa(){function am(at,aq){var ar=new t(aq);for(ab=ar.current();ab;ab=ar.prev()){if(ab.childNodes.length>1||ab==at){return ab}}}var al=V.selection.getRng();var ap=al.startContainer;var ak=al.endContainer;if(ap!=ak&&al.endOffset==0){var ao=am(ap,ak);var an=ao.nodeType==3?ao.length:ao.childNodes.length;al.setEnd(ao,an)}return al}function Y(an,at,aq,ap,al){var ak=[],am=-1,ar,av=-1,ao=-1,au;P(an.childNodes,function(ax,aw){if(ax.nodeName==="UL"||ax.nodeName==="OL"){am=aw;ar=ax;return false}});P(an.childNodes,function(ax,aw){if(ax.nodeName==="SPAN"&&c.getAttrib(ax,"data-mce-type")=="bookmark"){if(ax.id==at.id+"_start"){av=aw}else{if(ax.id==at.id+"_end"){ao=aw}}}});if(am<=0||(av<am&&ao>am)){P(a.grep(an.childNodes),al);return 0}else{au=aq.cloneNode(S);P(a.grep(an.childNodes),function(ax,aw){if((av<am&&aw<am)||(av>am&&aw>am)){ak.push(ax);ax.parentNode.removeChild(ax)}});if(av<am){an.insertBefore(au,ar)}else{if(av>am){an.insertBefore(au,ar.nextSibling)}}ap.push(au);P(ak,function(aw){au.appendChild(aw)});return au}}function ai(al,an,ap){var ak=[],ao,am;ao=ah.inline||ah.block;am=c.create(ao);W(am);K.walk(al,function(aq){var ar;function at(au){var ax=au.nodeName.toLowerCase(),aw=au.parentNode.nodeName.toLowerCase(),av;if(g(ax,"br")){ar=0;if(ah.block){c.remove(au)}return}if(ah.wrapper&&x(au,Z,ag)){ar=0;return}if(ah.block&&!ah.wrapper&&G(ax)){au=c.rename(au,ao);W(au);ak.push(au);ar=0;return}if(ah.selector){P(ac,function(ay){if("collapsed" in ay&&ay.collapsed!==ad){return}if(c.is(au,ay.selector)&&!b(au)){W(au,ay);av=true}});if(!ah.inline||av){ar=0;return}}if(d(ao,ax)&&d(aw,ao)&&!(!ap&&au.nodeType===3&&au.nodeValue.length===1&&au.nodeValue.charCodeAt(0)===65279)&&au.id!=="_mce_caret"){if(!ar){ar=am.cloneNode(S);au.parentNode.insertBefore(ar,au);ak.push(ar)}ar.appendChild(au)}else{if(ax=="li"&&an){ar=Y(au,an,am,ak,at)}else{ar=0;P(a.grep(au.childNodes),at);ar=0}}}P(aq,at)});if(ah.wrap_links===false){P(ak,function(aq){function ar(aw){var av,au,at;if(aw.nodeName==="A"){au=am.cloneNode(S);ak.push(au);at=a.grep(aw.childNodes);for(av=0;av<at.length;av++){au.appendChild(at[av])}aw.appendChild(au)}P(a.grep(aw.childNodes),ar)}ar(aq)})}P(ak,function(at){var aq;function au(aw){var av=0;P(aw.childNodes,function(ax){if(!f(ax)&&!H(ax)){av++}});return av}function ar(av){var ax,aw;P(av.childNodes,function(ay){if(ay.nodeType==1&&!H(ay)&&!b(ay)){ax=ay;return S}});if(ax&&h(ax,ah)){aw=ax.cloneNode(S);W(aw);c.replace(aw,av,B);c.remove(ax,1)}return aw||av}aq=au(at);if((ak.length>1||!F(at))&&aq===0){c.remove(at,1);return}if(ah.inline||ah.wrapper){if(!ah.exact&&aq===1){at=ar(at)}P(ac,function(av){P(c.select(av.inline,at),function(ax){var aw;if(av.wrap_links===false){aw=ax.parentNode;do{if(aw.nodeName==="A"){return}}while(aw=aw.parentNode)}U(av,ag,ax,av.exact?ax:null)})});if(x(at.parentNode,Z,ag)){c.remove(at,1);at=0;return B}if(ah.merge_with_parents){c.getParent(at.parentNode,function(av){if(x(av,Z,ag)){c.remove(at,1);at=0;return B}})}if(at&&ah.merge_siblings!==false){at=u(C(at),at);at=u(at,C(at,B))}}})}if(ah){if(ab){if(ab.nodeType){X=c.createRng();X.setStartBefore(ab);X.setEndAfter(ab);ai(o(X,ac),null,true)}else{ai(ab,null,true)}}else{if(!ad||!ah.inline||c.select("td.mceSelected,th.mceSelected").length){var aj=V.selection.getNode();V.selection.setRng(aa());af=q.getBookmark();ai(o(q.getRng(B),ac),af);if(ah.styles&&(ah.styles.color||ah.styles.textDecoration)){a.walk(aj,I,"childNodes");I(aj)}q.moveToBookmark(af);N(q.getRng(B));V.nodeChanged()}else{Q("apply",Z,ag)}}}}function A(Y,ag,aa){var ab=R(Y),ai=ab[0],af,ae,X;function Z(an){var am,al,ak;am=a.grep(an.childNodes);for(al=0,ak=ab.length;al<ak;al++){if(U(ab[al],ag,an,an)){break}}if(ai.deep){for(al=0,ak=am.length;al<ak;al++){Z(am[al])}}}function ac(ak){var al;P(m(ak.parentNode).reverse(),function(am){var an;if(!al&&am.id!="_start"&&am.id!="_end"){an=x(am,Y,ag);if(an&&an.split!==false){al=am}}});return al}function W(an,ak,ap,at){var au,ar,aq,am,ao,al;if(an){al=an.parentNode;for(au=ak.parentNode;au&&au!=al;au=au.parentNode){ar=au.cloneNode(S);for(ao=0;ao<ab.length;ao++){if(U(ab[ao],ag,ar,ar)){ar=0;break}}if(ar){if(aq){ar.appendChild(aq)}if(!am){am=ar}aq=ar}}if(at&&(!ai.mixed||!F(an))){ak=c.split(an,ak)}if(aq){ap.parentNode.insertBefore(aq,ap);am.appendChild(ap)}}return ak}function ah(ak){return W(ac(ak),ak,ak,true)}function ad(am){var al=c.get(am?"_start":"_end"),ak=al[am?"firstChild":"lastChild"];if(H(ak)){ak=ak[am?"firstChild":"lastChild"]}c.remove(al,true);return ak}function aj(ak){var al,am;ak=o(ak,ab,B);if(ai.split){al=J(ak,B);am=J(ak);if(al!=am){al=O(al,"span",{id:"_start","data-mce-type":"bookmark"});am=O(am,"span",{id:"_end","data-mce-type":"bookmark"});ah(al);ah(am);al=ad(B);am=ad()}else{al=am=ah(al)}ak.startContainer=al.parentNode;ak.startOffset=s(al);ak.endContainer=am.parentNode;ak.endOffset=s(am)+1}K.walk(ak,function(an){P(an,function(ao){Z(ao);if(ao.nodeType===1&&V.dom.getStyle(ao,"text-decoration")==="underline"&&ao.parentNode&&i(ao.parentNode)==="underline"){U({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,ao)}})})}if(aa){if(aa.nodeType){X=c.createRng();X.setStartBefore(aa);X.setEndAfter(aa);aj(X)}else{aj(aa)}return}if(!q.isCollapsed()||!ai.inline||c.select("td.mceSelected,th.mceSelected").length){af=q.getBookmark();aj(q.getRng(B));q.moveToBookmark(af);if(ai.inline&&j(Y,ag,q.getStart())){N(q.getRng(true))}V.nodeChanged()}else{Q("remove",Y,ag)}if(a.isWebKit){V.execCommand("mceCleanup")}}function D(X,Z,Y){var W=R(X);if(j(X,Z,Y)&&(!("toggle" in W[0])||W[0]["toggle"])){A(X,Z,Y)}else{T(X,Z,Y)}}function x(X,W,ac,aa){var Y=R(W),ad,ab,Z;function ae(ai,ak,al){var ah,aj,af=ak[al],ag;if(ak.onmatch){return ak.onmatch(ai,ak,al)}if(af){if(af.length===p){for(ah in af){if(af.hasOwnProperty(ah)){if(al==="attributes"){aj=c.getAttrib(ai,ah)}else{aj=L(ai,ah)}if(aa&&!aj&&!ak.exact){return}if((!aa||ak.exact)&&!g(aj,r(af[ah],ac))){return}}}}else{for(ag=0;ag<af.length;ag++){if(al==="attributes"?c.getAttrib(ai,af[ag]):L(ai,af[ag])){return ak}}}}return ak}if(Y&&X){for(ab=0;ab<Y.length;ab++){ad=Y[ab];if(h(X,ad)&&ae(X,ad,"attributes")&&ae(X,ad,"styles")){if(Z=ad.classes){for(ab=0;ab<Z.length;ab++){if(!c.hasClass(X,Z[ab])){return}}}return ad}}}}function j(Y,aa,Z){var X;function W(ab){ab=c.getParent(ab,function(ac){return !!x(ac,Y,aa,true)});return x(ab,Y,aa)}if(Z){return W(Z)}Z=q.getNode();if(W(Z)){return B}X=q.getStart();if(X!=Z){if(W(X)){return B}}return S}function v(ad,ac){var aa,ab=[],Z={},Y,X,W;aa=q.getStart();c.getParent(aa,function(ag){var af,ae;for(af=0;af<ad.length;af++){ae=ad[af];if(!Z[ae]&&x(ag,ae,ac)){Z[ae]=true;ab.push(ae)}}});return ab}function y(aa){var ac=R(aa),Z,Y,ab,X,W;if(ac){Z=q.getStart();Y=m(Z);for(X=ac.length-1;X>=0;X--){W=ac[X].selector;if(!W){return B}for(ab=Y.length-1;ab>=0;ab--){if(c.is(Y[ab],W)){return B}}}}return S}a.extend(this,{get:R,register:k,apply:T,remove:A,toggle:D,match:j,matchAll:v,matchNode:x,canApply:y});function h(W,X){if(g(W,X.inline)){return B}if(g(W,X.block)){return B}if(X.selector){return c.is(W,X.selector)}}function g(X,W){X=X||"";W=W||"";X=""+(X.nodeName||X);W=""+(W.nodeName||W);return X.toLowerCase()==W.toLowerCase()}function L(X,W){var Y=c.getStyle(X,W);if(W=="color"||W=="backgroundColor"){Y=c.toHex(Y)}if(W=="fontWeight"&&Y==700){Y="bold"}return""+Y}function r(W,X){if(typeof(W)!="string"){W=W(X)}else{if(X){W=W.replace(/%(\w+)/g,function(Z,Y){return X[Y]||Z})}}return W}function f(W){return W&&W.nodeType===3&&/^([\t \r\n]+|)$/.test(W.nodeValue)}function O(Y,X,W){var Z=c.create(X,W);Y.parentNode.insertBefore(Z,Y);Z.appendChild(Y);return Z}function o(W,ai,Z){var Y=W.startContainer,ad=W.startOffset,al=W.endContainer,af=W.endOffset,ak,ah,ac,ag;function aj(ar){var am,ap,aq,ao,an;am=ap=ar?Y:al;an=ar?"previousSibling":"nextSibling";root=c.getRoot();if(am.nodeType==3&&!f(am)){if(ar?ad>0:af<am.nodeValue.length){return am}}for(;;){if(ap==root||(!ai[0].block_expand&&F(ap))){return ap}for(ao=ap[an];ao;ao=ao[an]){if(!H(ao)&&!f(ao)){return ap}}ap=ap.parentNode}return am}function ab(am,an){if(an===p){an=am.nodeType===3?am.length:am.childNodes.length}while(am&&am.hasChildNodes()){am=am.childNodes[an];if(am){an=am.nodeType===3?am.length:am.childNodes.length}}return{node:am,offset:an}}if(Y.nodeType==1&&Y.hasChildNodes()){ah=Y.childNodes.length-1;Y=Y.childNodes[ad>ah?ah:ad];if(Y.nodeType==3){ad=0}}if(al.nodeType==1&&al.hasChildNodes()){ah=al.childNodes.length-1;al=al.childNodes[af>ah?ah:af-1];if(al.nodeType==3){af=al.nodeValue.length}}if(H(Y.parentNode)||H(Y)){Y=H(Y)?Y:Y.parentNode;Y=Y.nextSibling||Y;if(Y.nodeType==3){ad=0}}if(H(al.parentNode)||H(al)){al=H(al)?al:al.parentNode;al=al.previousSibling||al;if(al.nodeType==3){af=al.length}}if(ai[0].inline){if(W.collapsed){function ae(an,ar,au){var aq,ao,at,am;function ap(aw,ay){var az,av,ax=aw.nodeValue;if(typeof(ay)=="undefined"){ay=au?ax.length:0}if(au){az=ax.lastIndexOf(" ",ay);av=ax.lastIndexOf("\u00a0",ay);az=az>av?az:av;if(az!==-1&&!Z){az++}}else{az=ax.indexOf(" ",ay);av=ax.indexOf("\u00a0",ay);az=az!==-1&&(av===-1||az<av)?az:av}return az}if(an.nodeType===3){at=ap(an,ar);if(at!==-1){return{container:an,offset:at}}am=an}aq=new t(an,c.getParent(an,F)||V.getBody());while(ao=aq[au?"prev":"next"]()){if(ao.nodeType===3){am=ao;at=ap(ao);if(at!==-1){return{container:ao,offset:at}}}else{if(F(ao)){break}}}if(am){if(au){ar=0}else{ar=am.length}return{container:am,offset:ar}}}ag=ae(Y,ad,true);if(ag){Y=ag.container;ad=ag.offset}ag=ae(al,af);if(ag){al=ag.container;af=ag.offset}}ac=ab(al,af);if(ac.node){while(ac.node&&ac.offset===0&&ac.node.previousSibling){ac=ab(ac.node.previousSibling)}if(ac.node&&ac.offset>0&&ac.node.nodeType===3&&ac.node.nodeValue.charAt(ac.offset-1)===" "){if(ac.offset>1){al=ac.node;al.splitText(ac.offset-1)}else{if(ac.node.previousSibling){}}}}}if(ai[0].inline||ai[0].block_expand){if(!ai[0].inline||(Y.nodeType!=3||ad===0)){Y=aj(true)}if(!ai[0].inline||(al.nodeType!=3||af===al.nodeValue.length)){al=aj()}}if(ai[0].selector&&ai[0].expand!==S&&!ai[0].inline){function aa(an,am){var ao,ap,ar,aq;if(an.nodeType==3&&an.nodeValue.length==0&&an[am]){an=an[am]}ao=m(an);for(ap=0;ap<ao.length;ap++){for(ar=0;ar<ai.length;ar++){aq=ai[ar];if("collapsed" in aq&&aq.collapsed!==W.collapsed){continue}if(c.is(ao[ap],aq.selector)){return ao[ap]}}}return an}Y=aa(Y,"previousSibling");al=aa(al,"nextSibling")}if(ai[0].block||ai[0].selector){function X(an,am,ap){var ao;if(!ai[0].wrapper){ao=c.getParent(an,ai[0].block)}if(!ao){ao=c.getParent(an.nodeType==3?an.parentNode:an,F)}if(ao&&ai[0].wrapper){ao=m(ao,"ul,ol").reverse()[0]||ao}if(!ao){ao=an;while(ao[am]&&!F(ao[am])){ao=ao[am];if(g(ao,"br")){break}}}return ao||an}Y=X(Y,"previousSibling");al=X(al,"nextSibling");if(ai[0].block){if(!F(Y)){Y=aj(true)}if(!F(al)){al=aj()}}}if(Y.nodeType==1){ad=s(Y);Y=Y.parentNode}if(al.nodeType==1){af=s(al)+1;al=al.parentNode}return{startContainer:Y,startOffset:ad,endContainer:al,endOffset:af}}function U(ac,ab,Z,W){var Y,X,aa;if(!h(Z,ac)){return S}if(ac.remove!="all"){P(ac.styles,function(ae,ad){ae=r(ae,ab);if(typeof(ad)==="number"){ad=ae;W=0}if(!W||g(L(W,ad),ae)){c.setStyle(Z,ad,"")}aa=1});if(aa&&c.getAttrib(Z,"style")==""){Z.removeAttribute("style");Z.removeAttribute("data-mce-style")}P(ac.attributes,function(af,ad){var ae;af=r(af,ab);if(typeof(ad)==="number"){ad=af;W=0}if(!W||g(c.getAttrib(W,ad),af)){if(ad=="class"){af=c.getAttrib(Z,ad);if(af){ae="";P(af.split(/\s+/),function(ag){if(/mce\w+/.test(ag)){ae+=(ae?" ":"")+ag}});if(ae){c.setAttrib(Z,ad,ae);return}}}if(ad=="class"){Z.removeAttribute("className")}if(e.test(ad)){Z.removeAttribute("data-mce-"+ad)}Z.removeAttribute(ad)}});P(ac.classes,function(ad){ad=r(ad,ab);if(!W||c.hasClass(W,ad)){c.removeClass(Z,ad)}});X=c.getAttribs(Z);for(Y=0;Y<X.length;Y++){if(X[Y].nodeName.indexOf("_")!==0){return S}}}if(ac.remove!="none"){n(Z,ac);return B}}function n(Y,Z){var W=Y.parentNode,X;if(Z.block){if(!l){function aa(ac,ab,ad){ac=C(ac,ab,ad);return !ac||(ac.nodeName=="BR"||F(ac))}if(F(Y)&&!F(W)){if(!aa(Y,S)&&!aa(Y.firstChild,B,1)){Y.insertBefore(c.create("br"),Y.firstChild)}if(!aa(Y,B)&&!aa(Y.lastChild,S,1)){Y.appendChild(c.create("br"))}}}else{if(W==c.getRoot()){if(!Z.list_block||!g(Y,Z.list_block)){P(a.grep(Y.childNodes),function(ab){if(d(l,ab.nodeName.toLowerCase())){if(!X){X=O(ab,l)}else{X.appendChild(ab)}}else{X=0}})}}}}if(Z.selector&&Z.inline&&!g(Z.inline,Y)){return}c.remove(Y,1)}function C(X,W,Y){if(X){W=W?"nextSibling":"previousSibling";for(X=Y?X:X[W];X;X=X[W]){if(X.nodeType==1||!f(X)){return X}}}}function H(W){return W&&W.nodeType==1&&W.getAttribute("data-mce-type")=="bookmark"}function u(aa,Z){var W,Y,X;function ac(af,ae){if(af.nodeName!=ae.nodeName){return S}function ad(ah){var ai={};P(c.getAttribs(ah),function(aj){var ak=aj.nodeName.toLowerCase();if(ak.indexOf("_")!==0&&ak!=="style"){ai[ak]=c.getAttrib(ah,ak)}});return ai}function ag(ak,aj){var ai,ah;for(ah in ak){if(ak.hasOwnProperty(ah)){ai=aj[ah];if(ai===p){return S}if(ak[ah]!=ai){return S}delete aj[ah]}}for(ah in aj){if(aj.hasOwnProperty(ah)){return S}}return B}if(!ag(ad(af),ad(ae))){return S}if(!ag(c.parseStyle(c.getAttrib(af,"style")),c.parseStyle(c.getAttrib(ae,"style")))){return S}return B}if(aa&&Z){function ab(ae,ad){for(Y=ae;Y;Y=Y[ad]){if(Y.nodeType==3&&Y.nodeValue.length!==0){return ae}if(Y.nodeType==1&&!H(Y)){return Y}}return ae}aa=ab(aa,"previousSibling");Z=ab(Z,"nextSibling");if(ac(aa,Z)){for(Y=aa.nextSibling;Y&&Y!=Z;){X=Y;Y=Y.nextSibling;aa.appendChild(X)}c.remove(Z);P(a.grep(Z.childNodes),function(ad){aa.appendChild(ad)});return aa}}return Z}function G(W){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(W)}function J(X,ab){var W,aa,Y,Z;W=X[ab?"startContainer":"endContainer"];aa=X[ab?"startOffset":"endOffset"];if(W.nodeType==1){Y=W.childNodes.length-1;if(!ab&&aa){aa--}W=W.childNodes[aa>Y?Y:aa]}if(W.nodeType===3&&ab&&aa>=W.nodeValue.length){W=new t(W,V.getBody()).next()||W}if(W.nodeType===3&&!ab&&aa==0){W=new t(W,V.getBody()).prev()||W}return W}function Q(af,W,ad){var ai,ag="_mce_caret",X=V.settings.caret_debug;ai=a.isGecko?"\u200B":E;function Y(ak){var aj=c.create("span",{id:ag,"data-mce-bogus":true,style:X?"color:red":""});if(ak){aj.appendChild(V.getDoc().createTextNode(ai))}return aj}function ae(ak,aj){while(ak){if((ak.nodeType===3&&ak.nodeValue!==ai)||ak.childNodes.length>1){return false}if(aj&&ak.nodeType===1){aj.push(ak)}ak=ak.firstChild}return true}function ab(aj){while(aj){if(aj.id===ag){return aj}aj=aj.parentNode}}function aa(aj){var ak;if(aj){ak=new t(aj,aj);for(aj=ak.current();aj;aj=ak.next()){if(aj.nodeType===3){return aj}}}}function Z(al,ak){var am,aj;if(!al){al=ab(q.getStart());if(!al){while(al=c.get(ag)){Z(al,false)}}}else{aj=q.getRng(true);if(ae(al)){if(ak!==false){aj.setStartBefore(al);aj.setEndBefore(al)}c.remove(al)}else{am=aa(al);if(am.nodeValue.charAt(0)===E){am=am.deleteData(0,1)}c.remove(al,1)}q.setRng(aj)}}function ac(){var al,aj,ap,ao,am,ak,an;al=q.getRng(true);ao=al.startOffset;ak=al.startContainer;an=ak.nodeValue;aj=ab(q.getStart());if(aj){ap=aa(aj)}if(an&&ao>0&&ao<an.length&&/\w/.test(an.charAt(ao))&&/\w/.test(an.charAt(ao-1))){am=q.getBookmark();al.collapse(true);al=o(al,R(W));al=K.split(al);T(W,ad,al);q.moveToBookmark(am)}else{if(!aj||ap.nodeValue!==ai){aj=Y(true);ap=aj.firstChild;al.insertNode(aj);ao=1;T(W,ad,aj)}else{T(W,ad,aj)}q.setCursorLocation(ap,ao)}}function ah(){var aj=q.getRng(true),ak,am,ap,ao,al,at,ar=[],an,aq;ak=aj.startContainer;am=aj.startOffset;al=ak;if(ak.nodeType==3){if(am!=ak.nodeValue.length||ak.nodeValue===ai){ao=true}al=al.parentNode}while(al){if(x(al,W,ad)){at=al;break}if(al.nextSibling){ao=true}ar.push(al);al=al.parentNode}if(!at){return}if(ao){ap=q.getBookmark();aj.collapse(true);aj=o(aj,R(W),true);aj=K.split(aj);A(W,ad,aj);q.moveToBookmark(ap)}else{aq=Y();al=aq;for(an=ar.length-1;an>=0;an--){al.appendChild(ar[an].cloneNode(false));al=al.firstChild}al.appendChild(c.doc.createTextNode(ai));al=al.firstChild;c.insertAfter(aq,at);q.setCursorLocation(al,1)}}if(!self._hasCaretEvents){V.onBeforeGetContent.addToTop(function(){var aj=[],ak;if(ae(ab(q.getStart()),aj)){ak=aj.length;while(ak--){c.setAttrib(aj[ak],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(aj){V[aj].addToTop(function(){Z()})});V.onKeyDown.addToTop(function(aj,al){var ak=al.keyCode;if(ak==8||ak==37||ak==39){Z(ab(q.getStart()))}});self._hasCaretEvents=true}if(af=="apply"){ac()}else{ah()}}function N(X){var W=X.startContainer,ac=X.startOffset,ab,aa,Y,Z;if(W.nodeType==3&&ac>=W.nodeValue.length-1){W=W.parentNode;ac=s(W)+1}if(W.nodeType==1){Y=W.childNodes;W=Y[Math.min(ac,Y.length-1)];ab=new t(W);if(ac>Y.length-1){ab.next()}for(aa=ab.current();aa;aa=ab.next()){if(aa.nodeType==3&&!f(aa)){Z=c.create("a",null,E);aa.parentNode.insertBefore(Z,aa);X.setStart(aa,0);q.setRng(X);c.remove(Z);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_legacy_values);function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/tiny_mce_popup.js
@@ -1,1 +1,5 @@
 
+// Uncomment and change this document.domain value if you are loading the script cross subdomains
+// document.domain = 'moxiecode.com';
+
+var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}if(!b.editor.getParam("browser_preferred_colors",false)||!b.isWindow){b.dom.addClass(document.body,"forceColors")}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait();

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/tiny_mce_src.js
@@ -1,1 +1,16803 @@
+(function(win) {

+	var whiteSpaceRe = /^\s*|\s*$/g,

+		undefined, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';

+

+	var tinymce = {

+		majorVersion : '3',

+

+		minorVersion : '4.8',

+

+		releaseDate : '2012-02-02',

+

+		_init : function() {

+			var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;

+

+			t.isOpera = win.opera && opera.buildNumber;

+

+			t.isWebKit = /WebKit/.test(ua);

+

+			t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);

+

+			t.isIE6 = t.isIE && /MSIE [56]/.test(ua);

+

+			t.isIE7 = t.isIE && /MSIE [7]/.test(ua);

+

+			t.isIE8 = t.isIE && /MSIE [8]/.test(ua);

+

+			t.isIE9 = t.isIE && /MSIE [9]/.test(ua);

+

+			t.isGecko = !t.isWebKit && /Gecko/.test(ua);

+

+			t.isMac = ua.indexOf('Mac') != -1;

+

+			t.isAir = /adobeair/i.test(ua);

+

+			t.isIDevice = /(iPad|iPhone)/.test(ua);

+			

+			t.isIOS5 = t.isIDevice && ua.match(/AppleWebKit\/(\d*)/)[1]>=534;

+

+			// TinyMCE .NET webcontrol might be setting the values for TinyMCE

+			if (win.tinyMCEPreInit) {

+				t.suffix = tinyMCEPreInit.suffix;

+				t.baseURL = tinyMCEPreInit.base;

+				t.query = tinyMCEPreInit.query;

+				return;

+			}

+

+			// Get suffix and base

+			t.suffix = '';

+

+			// If base element found, add that infront of baseURL

+			nl = d.getElementsByTagName('base');

+			for (i=0; i<nl.length; i++) {

+				if (v = nl[i].href) {

+					// Host only value like http://site.com or http://site.com:8008

+					if (/^https?:\/\/[^\/]+$/.test(v))

+						v += '/';

+

+					base = v ? v.match(/.*\//)[0] : ''; // Get only directory

+				}

+			}

+

+			function getBase(n) {

+				if (n.src && /tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(n.src)) {

+					if (/_(src|dev)\.js/g.test(n.src))

+						t.suffix = '_src';

+

+					if ((p = n.src.indexOf('?')) != -1)

+						t.query = n.src.substring(p + 1);

+

+					t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));

+

+					// If path to script is relative and a base href was found add that one infront

+					// the src property will always be an absolute one on non IE browsers and IE 8

+					// so this logic will basically only be executed on older IE versions

+					if (base && t.baseURL.indexOf('://') == -1 && t.baseURL.indexOf('/') !== 0)

+						t.baseURL = base + t.baseURL;

+

+					return t.baseURL;

+				}

+

+				return null;

+			};

+

+			// Check document

+			nl = d.getElementsByTagName('script');

+			for (i=0; i<nl.length; i++) {

+				if (getBase(nl[i]))

+					return;

+			}

+

+			// Check head

+			n = d.getElementsByTagName('head')[0];

+			if (n) {

+				nl = n.getElementsByTagName('script');

+				for (i=0; i<nl.length; i++) {

+					if (getBase(nl[i]))

+						return;

+				}

+			}

+

+			return;

+		},

+

+		is : function(o, t) {

+			if (!t)

+				return o !== undefined;

+

+			if (t == 'array' && (o.hasOwnProperty && o instanceof Array))

+				return true;

+

+			return typeof(o) == t;

+		},

+

+		makeMap : function(items, delim, map) {

+			var i;

+

+			items = items || [];

+			delim = delim || ',';

+

+			if (typeof(items) == "string")

+				items = items.split(delim);

+

+			map = map || {};

+

+			i = items.length;

+			while (i--)

+				map[items[i]] = {};

+

+			return map;

+		},

+

+		each : function(o, cb, s) {

+			var n, l;

+

+			if (!o)

+				return 0;

+

+			s = s || o;

+

+			if (o.length !== undefined) {

+				// Indexed arrays, needed for Safari

+				for (n=0, l = o.length; n < l; n++) {

+					if (cb.call(s, o[n], n, o) === false)

+						return 0;

+				}

+			} else {

+				// Hashtables

+				for (n in o) {

+					if (o.hasOwnProperty(n)) {

+						if (cb.call(s, o[n], n, o) === false)

+							return 0;

+					}

+				}

+			}

+

+			return 1;

+		},

+

+

+		map : function(a, f) {

+			var o = [];

+

+			tinymce.each(a, function(v) {

+				o.push(f(v));

+			});

+

+			return o;

+		},

+

+		grep : function(a, f) {

+			var o = [];

+

+			tinymce.each(a, function(v) {

+				if (!f || f(v))

+					o.push(v);

+			});

+

+			return o;

+		},

+

+		inArray : function(a, v) {

+			var i, l;

+

+			if (a) {

+				for (i = 0, l = a.length; i < l; i++) {

+					if (a[i] === v)

+						return i;

+				}

+			}

+

+			return -1;

+		},

+

+		extend : function(o, e) {

+			var i, l, a = arguments;

+

+			for (i = 1, l = a.length; i < l; i++) {

+				e = a[i];

+

+				tinymce.each(e, function(v, n) {

+					if (v !== undefined)

+						o[n] = v;

+				});

+			}

+

+			return o;

+		},

+

+

+		trim : function(s) {

+			return (s ? '' + s : '').replace(whiteSpaceRe, '');

+		},

+

+		create : function(s, p, root) {

+			var t = this, sp, ns, cn, scn, c, de = 0;

+

+			// Parse : <prefix> <class>:<super class>

+			s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);

+			cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name

+

+			// Create namespace for new class

+			ns = t.createNS(s[3].replace(/\.\w+$/, ''), root);

+

+			// Class already exists

+			if (ns[cn])

+				return;

+

+			// Make pure static class

+			if (s[2] == 'static') {

+				ns[cn] = p;

+

+				if (this.onCreate)

+					this.onCreate(s[2], s[3], ns[cn]);

+

+				return;

+			}

+

+			// Create default constructor

+			if (!p[cn]) {

+				p[cn] = function() {};

+				de = 1;

+			}

+

+			// Add constructor and methods

+			ns[cn] = p[cn];

+			t.extend(ns[cn].prototype, p);

+

+			// Extend

+			if (s[5]) {

+				sp = t.resolve(s[5]).prototype;

+				scn = s[5].match(/\.(\w+)$/i)[1]; // Class name

+

+				// Extend constructor

+				c = ns[cn];

+				if (de) {

+					// Add passthrough constructor

+					ns[cn] = function() {

+						return sp[scn].apply(this, arguments);

+					};

+				} else {

+					// Add inherit constructor

+					ns[cn] = function() {

+						this.parent = sp[scn];

+						return c.apply(this, arguments);

+					};

+				}

+				ns[cn].prototype[cn] = ns[cn];

+

+				// Add super methods

+				t.each(sp, function(f, n) {

+					ns[cn].prototype[n] = sp[n];

+				});

+

+				// Add overridden methods

+				t.each(p, function(f, n) {

+					// Extend methods if needed

+					if (sp[n]) {

+						ns[cn].prototype[n] = function() {

+							this.parent = sp[n];

+							return f.apply(this, arguments);

+						};

+					} else {

+						if (n != cn)

+							ns[cn].prototype[n] = f;

+					}

+				});

+			}

+

+			// Add static methods

+			t.each(p['static'], function(f, n) {

+				ns[cn][n] = f;

+			});

+

+			if (this.onCreate)

+				this.onCreate(s[2], s[3], ns[cn].prototype);

+		},

+

+		walk : function(o, f, n, s) {

+			s = s || this;

+

+			if (o) {

+				if (n)

+					o = o[n];

+

+				tinymce.each(o, function(o, i) {

+					if (f.call(s, o, i, n) === false)

+						return false;

+

+					tinymce.walk(o, f, n, s);

+				});

+			}

+		},

+

+		createNS : function(n, o) {

+			var i, v;

+

+			o = o || win;

+

+			n = n.split('.');

+			for (i=0; i<n.length; i++) {

+				v = n[i];

+

+				if (!o[v])

+					o[v] = {};

+

+				o = o[v];

+			}

+

+			return o;

+		},

+

+		resolve : function(n, o) {

+			var i, l;

+

+			o = o || win;

+

+			n = n.split('.');

+			for (i = 0, l = n.length; i < l; i++) {

+				o = o[n[i]];

+

+				if (!o)

+					break;

+			}

+

+			return o;

+		},

+

+		addUnload : function(f, s) {

+			var t = this;

+

+			f = {func : f, scope : s || this};

+

+			if (!t.unloads) {

+				function unload() {

+					var li = t.unloads, o, n;

+

+					if (li) {

+						// Call unload handlers

+						for (n in li) {

+							o = li[n];

+

+							if (o && o.func)

+								o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy

+						}

+

+						// Detach unload function

+						if (win.detachEvent) {

+							win.detachEvent('onbeforeunload', fakeUnload);

+							win.detachEvent('onunload', unload);

+						} else if (win.removeEventListener)

+							win.removeEventListener('unload', unload, false);

+

+						// Destroy references

+						t.unloads = o = li = w = unload = 0;

+

+						// Run garbarge collector on IE

+						if (win.CollectGarbage)

+							CollectGarbage();

+					}

+				};

+

+				function fakeUnload() {

+					var d = document;

+

+					// Is there things still loading, then do some magic

+					if (d.readyState == 'interactive') {

+						function stop() {

+							// Prevent memory leak

+							d.detachEvent('onstop', stop);

+

+							// Call unload handler

+							if (unload)

+								unload();

+

+							d = 0;

+						};

+

+						// Fire unload when the currently loading page is stopped

+						if (d)

+							d.attachEvent('onstop', stop);

+

+						// Remove onstop listener after a while to prevent the unload function

+						// to execute if the user presses cancel in an onbeforeunload

+						// confirm dialog and then presses the browser stop button

+						win.setTimeout(function() {

+							if (d)

+								d.detachEvent('onstop', stop);

+						}, 0);

+					}

+				};

+

+				// Attach unload handler

+				if (win.attachEvent) {

+					win.attachEvent('onunload', unload);

+					win.attachEvent('onbeforeunload', fakeUnload);

+				} else if (win.addEventListener)

+					win.addEventListener('unload', unload, false);

+

+				// Setup initial unload handler array

+				t.unloads = [f];

+			} else

+				t.unloads.push(f);

+

+			return f;

+		},

+

+		removeUnload : function(f) {

+			var u = this.unloads, r = null;

+

+			tinymce.each(u, function(o, i) {

+				if (o && o.func == f) {

+					u.splice(i, 1);

+					r = f;

+					return false;

+				}

+			});

+

+			return r;

+		},

+

+		explode : function(s, d) {

+			return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;

+		},

+

+		_addVer : function(u) {

+			var v;

+

+			if (!this.query)

+				return u;

+

+			v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;

+

+			if (u.indexOf('#') == -1)

+				return u + v;

+

+			return u.replace('#', v + '#');

+		},

+

+		// Fix function for IE 9 where regexps isn't working correctly

+		// Todo: remove me once MS fixes the bug

+		_replace : function(find, replace, str) {

+			// On IE9 we have to fake $x replacement

+			if (isRegExpBroken) {

+				return str.replace(find, function() {

+					var val = replace, args = arguments, i;

+

+					for (i = 0; i < args.length - 2; i++) {

+						if (args[i] === undefined) {

+							val = val.replace(new RegExp('\\$' + i, 'g'), '');

+						} else {

+							val = val.replace(new RegExp('\\$' + i, 'g'), args[i]);

+						}

+					}

+

+					return val;

+				});

+			}

+

+			return str.replace(find, replace);

+		}

+

+		};

+

+	// Initialize the API

+	tinymce._init();

+

+	// Expose tinymce namespace to the global namespace (window)

+	win.tinymce = win.tinyMCE = tinymce;

+

+	// Describe the different namespaces

+

+	})(window);

+

+

+

+tinymce.create('tinymce.util.Dispatcher', {

+	scope : null,

+	listeners : null,

+

+	Dispatcher : function(s) {

+		this.scope = s || this;

+		this.listeners = [];

+	},

+

+	add : function(cb, s) {

+		this.listeners.push({cb : cb, scope : s || this.scope});

+

+		return cb;

+	},

+

+	addToTop : function(cb, s) {

+		this.listeners.unshift({cb : cb, scope : s || this.scope});

+

+		return cb;

+	},

+

+	remove : function(cb) {

+		var l = this.listeners, o = null;

+

+		tinymce.each(l, function(c, i) {

+			if (cb == c.cb) {

+				o = cb;

+				l.splice(i, 1);

+				return false;

+			}

+		});

+

+		return o;

+	},

+

+	dispatch : function() {

+		var s, a = arguments, i, li = this.listeners, c;

+

+		// Needs to be a real loop since the listener count might change while looping

+		// And this is also more efficient

+		for (i = 0; i<li.length; i++) {

+			c = li[i];

+			s = c.cb.apply(c.scope, a.length > 0 ? a : [c.scope]);

+

+			if (s === false)

+				break;

+		}

+

+		return s;

+	}

+

+	});

+

+(function() {

+	var each = tinymce.each;

+

+	tinymce.create('tinymce.util.URI', {

+		URI : function(u, s) {

+			var t = this, o, a, b, base_url;

+

+			// Trim whitespace

+			u = tinymce.trim(u);

+

+			// Default settings

+			s = t.settings = s || {};

+

+			// Strange app protocol that isn't http/https or local anchor

+			// For example: mailto,skype,tel etc.

+			if (/^([\w\-]+):([^\/]{2})/i.test(u) || /^\s*#/.test(u)) {

+				t.source = u;

+				return;

+			}

+

+			// Absolute path with no host, fake host and protocol

+			if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)

+				u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;

+

+			// Relative path http:// or protocol relative //path

+			if (!/^[\w-]*:?\/\//.test(u)) {

+				base_url = s.base_uri ? s.base_uri.path : new tinymce.util.URI(location.href).directory;

+				u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u);

+			}

+

+			// Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)

+			u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something

+			u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);

+			each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) {

+				var s = u[i];

+

+				// Zope 3 workaround, they use @@something

+				if (s)

+					s = s.replace(/\(mce_at\)/g, '@@');

+

+				t[v] = s;

+			});

+

+			if (b = s.base_uri) {

+				if (!t.protocol)

+					t.protocol = b.protocol;

+

+				if (!t.userInfo)

+					t.userInfo = b.userInfo;

+

+				if (!t.port && t.host == 'mce_host')

+					t.port = b.port;

+

+				if (!t.host || t.host == 'mce_host')

+					t.host = b.host;

+

+				t.source = '';

+			}

+

+			//t.path = t.path || '/';

+		},

+

+		setPath : function(p) {

+			var t = this;

+

+			p = /^(.*?)\/?(\w+)?$/.exec(p);

+

+			// Update path parts

+			t.path = p[0];

+			t.directory = p[1];

+			t.file = p[2];

+

+			// Rebuild source

+			t.source = '';

+			t.getURI();

+		},

+

+		toRelative : function(u) {

+			var t = this, o;

+

+			if (u === "./")

+				return u;

+

+			u = new tinymce.util.URI(u, {base_uri : t});

+

+			// Not on same domain/port or protocol

+			if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)

+				return u.getURI();

+

+			o = t.toRelPath(t.path, u.path);

+

+			// Add query

+			if (u.query)

+				o += '?' + u.query;

+

+			// Add anchor

+			if (u.anchor)

+				o += '#' + u.anchor;

+

+			return o;

+		},

+	

+		toAbsolute : function(u, nh) {

+			var u = new tinymce.util.URI(u, {base_uri : this});

+

+			return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0);

+		},

+

+		toRelPath : function(base, path) {

+			var items, bp = 0, out = '', i, l;

+

+			// Split the paths

+			base = base.substring(0, base.lastIndexOf('/'));

+			base = base.split('/');

+			items = path.split('/');

+

+			if (base.length >= items.length) {

+				for (i = 0, l = base.length; i < l; i++) {

+					if (i >= items.length || base[i] != items[i]) {

+						bp = i + 1;

+						break;

+					}

+				}

+			}

+

+			if (base.length < items.length) {

+				for (i = 0, l = items.length; i < l; i++) {

+					if (i >= base.length || base[i] != items[i]) {

+						bp = i + 1;

+						break;

+					}

+				}

+			}

+

+			if (bp == 1)

+				return path;

+

+			for (i = 0, l = base.length - (bp - 1); i < l; i++)

+				out += "../";

+

+			for (i = bp - 1, l = items.length; i < l; i++) {

+				if (i != bp - 1)

+					out += "/" + items[i];

+				else

+					out += items[i];

+			}

+

+			return out;

+		},

+

+		toAbsPath : function(base, path) {

+			var i, nb = 0, o = [], tr, outPath;

+

+			// Split paths

+			tr = /\/$/.test(path) ? '/' : '';

+			base = base.split('/');

+			path = path.split('/');

+

+			// Remove empty chunks

+			each(base, function(k) {

+				if (k)

+					o.push(k);

+			});

+

+			base = o;

+

+			// Merge relURLParts chunks

+			for (i = path.length - 1, o = []; i >= 0; i--) {

+				// Ignore empty or .

+				if (path[i].length == 0 || path[i] == ".")

+					continue;

+

+				// Is parent

+				if (path[i] == '..') {

+					nb++;

+					continue;

+				}

+

+				// Move up

+				if (nb > 0) {

+					nb--;

+					continue;

+				}

+

+				o.push(path[i]);

+			}

+

+			i = base.length - nb;

+

+			// If /a/b/c or /

+			if (i <= 0)

+				outPath = o.reverse().join('/');

+			else

+				outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');

+

+			// Add front / if it's needed

+			if (outPath.indexOf('/') !== 0)

+				outPath = '/' + outPath;

+

+			// Add traling / if it's needed

+			if (tr && outPath.lastIndexOf('/') !== outPath.length - 1)

+				outPath += tr;

+

+			return outPath;

+		},

+

+		getURI : function(nh) {

+			var s, t = this;

+

+			// Rebuild source

+			if (!t.source || nh) {

+				s = '';

+

+				if (!nh) {

+					if (t.protocol)

+						s += t.protocol + '://';

+

+					if (t.userInfo)

+						s += t.userInfo + '@';

+

+					if (t.host)

+						s += t.host;

+

+					if (t.port)

+						s += ':' + t.port;

+				}

+

+				if (t.path)

+					s += t.path;

+

+				if (t.query)

+					s += '?' + t.query;

+

+				if (t.anchor)

+					s += '#' + t.anchor;

+

+				t.source = s;

+			}

+

+			return t.source;

+		}

+	});

+})();

+

+(function() {

+	var each = tinymce.each;

+

+	tinymce.create('static tinymce.util.Cookie', {

+		getHash : function(n) {

+			var v = this.get(n), h;

+

+			if (v) {

+				each(v.split('&'), function(v) {

+					v = v.split('=');

+					h = h || {};

+					h[unescape(v[0])] = unescape(v[1]);

+				});

+			}

+

+			return h;

+		},

+

+		setHash : function(n, v, e, p, d, s) {

+			var o = '';

+

+			each(v, function(v, k) {

+				o += (!o ? '' : '&') + escape(k) + '=' + escape(v);

+			});

+

+			this.set(n, o, e, p, d, s);

+		},

+

+		get : function(n) {

+			var c = document.cookie, e, p = n + "=", b;

+

+			// Strict mode

+			if (!c)

+				return;

+

+			b = c.indexOf("; " + p);

+

+			if (b == -1) {

+				b = c.indexOf(p);

+

+				if (b != 0)

+					return null;

+			} else

+				b += 2;

+

+			e = c.indexOf(";", b);

+

+			if (e == -1)

+				e = c.length;

+

+			return unescape(c.substring(b + p.length, e));

+		},

+

+		set : function(n, v, e, p, d, s) {

+			document.cookie = n + "=" + escape(v) +

+				((e) ? "; expires=" + e.toGMTString() : "") +

+				((p) ? "; path=" + escape(p) : "") +

+				((d) ? "; domain=" + d : "") +

+				((s) ? "; secure" : "");

+		},

+

+		remove : function(n, p) {

+			var d = new Date();

+

+			d.setTime(d.getTime() - 1000);

+

+			this.set(n, '', d, p, d);

+		}

+	});

+})();

+

+(function() {

+	function serialize(o, quote) {

+		var i, v, t;

+

+		quote = quote || '"';

+

+		if (o == null)

+			return 'null';

+

+		t = typeof o;

+

+		if (t == 'string') {

+			v = '\bb\tt\nn\ff\rr\""\'\'\\\\';

+

+			return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) {

+				// Make sure single quotes never get encoded inside double quotes for JSON compatibility

+				if (quote === '"' && a === "'")

+					return a;

+

+				i = v.indexOf(b);

+

+				if (i + 1)

+					return '\\' + v.charAt(i + 1);

+

+				a = b.charCodeAt().toString(16);

+

+				return '\\u' + '0000'.substring(a.length) + a;

+			}) + quote;

+		}

+

+		if (t == 'object') {

+			if (o.hasOwnProperty && o instanceof Array) {

+					for (i=0, v = '['; i<o.length; i++)

+						v += (i > 0 ? ',' : '') + serialize(o[i], quote);

+

+					return v + ']';

+				}

+

+				v = '{';

+

+				for (i in o) {

+					if (o.hasOwnProperty(i)) {

+						v += typeof o[i] != 'function' ? (v.length > 1 ? ',' + quote : quote) + i + quote +':' + serialize(o[i], quote) : '';

+					}

+				}

+

+				return v + '}';

+		}

+

+		return '' + o;

+	};

+

+	tinymce.util.JSON = {

+		serialize: serialize,

+

+		parse: function(s) {

+			try {

+				return eval('(' + s + ')');

+			} catch (ex) {

+				// Ignore

+			}

+		}

+

+		};

+})();

+

+tinymce.create('static tinymce.util.XHR', {

+	send : function(o) {

+		var x, t, w = window, c = 0;

+

+		// Default settings

+		o.scope = o.scope || this;

+		o.success_scope = o.success_scope || o.scope;

+		o.error_scope = o.error_scope || o.scope;

+		o.async = o.async === false ? false : true;

+		o.data = o.data || '';

+

+		function get(s) {

+			x = 0;

+

+			try {

+				x = new ActiveXObject(s);

+			} catch (ex) {

+			}

+

+			return x;

+		};

+

+		x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP');

+

+		if (x) {

+			if (x.overrideMimeType)

+				x.overrideMimeType(o.content_type);

+

+			x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async);

+

+			if (o.content_type)

+				x.setRequestHeader('Content-Type', o.content_type);

+

+			x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

+

+			x.send(o.data);

+

+			function ready() {

+				if (!o.async || x.readyState == 4 || c++ > 10000) {

+					if (o.success && c < 10000 && x.status == 200)

+						o.success.call(o.success_scope, '' + x.responseText, x, o);

+					else if (o.error)

+						o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);

+

+					x = null;

+				} else

+					w.setTimeout(ready, 10);

+			};

+

+			// Syncronous request

+			if (!o.async)

+				return ready();

+

+			// Wait for response, onReadyStateChange can not be used since it leaks memory in IE

+			t = w.setTimeout(ready, 10);

+		}

+	}

+});

+

+(function() {

+	var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;

+

+	tinymce.create('tinymce.util.JSONRequest', {

+		JSONRequest : function(s) {

+			this.settings = extend({

+			}, s);

+			this.count = 0;

+		},

+

+		send : function(o) {

+			var ecb = o.error, scb = o.success;

+

+			o = extend(this.settings, o);

+

+			o.success = function(c, x) {

+				c = JSON.parse(c);

+

+				if (typeof(c) == 'undefined') {

+					c = {

+						error : 'JSON Parse error.'

+					};

+				}

+

+				if (c.error)

+					ecb.call(o.error_scope || o.scope, c.error, x);

+				else

+					scb.call(o.success_scope || o.scope, c.result);

+			};

+

+			o.error = function(ty, x) {

+				if (ecb)

+					ecb.call(o.error_scope || o.scope, ty, x);

+			};

+

+			o.data = JSON.serialize({

+				id : o.id || 'c' + (this.count++),

+				method : o.method,

+				params : o.params

+			});

+

+			// JSON content type for Ruby on rails. Bug: #1883287

+			o.content_type = 'application/json';

+

+			XHR.send(o);

+		},

+

+		'static' : {

+			sendRPC : function(o) {

+				return new tinymce.util.JSONRequest().send(o);

+			}

+		}

+	});

+}());

+(function(tinymce){

+	tinymce.VK = {

+		DELETE: 46,

+		BACKSPACE: 8,

+		ENTER: 13,

+		TAB: 9,

+        SPACEBAR: 32,

+		UP: 38,

+		DOWN: 40,

+		modifierPressed: function (e) {

+			return e.shiftKey || e.ctrlKey || e.altKey;

+		}

+	}

+})(tinymce);

+

+(function(tinymce) {

+	var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE;

+

+	function cleanupStylesWhenDeleting(ed) {

+		var dom = ed.dom, selection = ed.selection;

+

+		ed.onKeyDown.add(function(ed, e) {

+			var rng, blockElm, node, clonedSpan, isDelete;

+

+			isDelete = e.keyCode == DELETE;

+			if ((isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) {

+				e.preventDefault();

+				rng = selection.getRng();

+

+				// Find root block

+				blockElm = dom.getParent(rng.startContainer, dom.isBlock);

+

+				// On delete clone the root span of the next block element

+				if (isDelete)

+					blockElm = dom.getNext(blockElm, dom.isBlock);

+

+				// Locate root span element and clone it since it would otherwise get merged by the "apple-style-span" on delete/backspace

+				if (blockElm) {

+					node = blockElm.firstChild;

+

+					// Ignore empty text nodes

+					while (node && node.nodeType == 3 && node.nodeValue.length == 0)

+						node = node.nextSibling;

+

+					if (node && node.nodeName === 'SPAN') {

+						clonedSpan = node.cloneNode(false);

+					}

+				}

+

+				// Do the backspace/delete actiopn

+				ed.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);

+

+				// Find all odd apple-style-spans

+				blockElm = dom.getParent(rng.startContainer, dom.isBlock);

+				tinymce.each(dom.select('span.Apple-style-span,font.Apple-style-span', blockElm), function(span) {

+					var bm = selection.getBookmark();

+

+					if (clonedSpan) {

+						dom.replace(clonedSpan.cloneNode(false), span, true);

+					} else {

+						dom.remove(span, true);

+					}

+

+					// Restore the selection

+					selection.moveToBookmark(bm);

+				});

+			}

+		});

+	};

+

+	function emptyEditorWhenDeleting(ed) {

+		ed.onKeyUp.add(function(ed, e) {

+			var keyCode = e.keyCode;

+

+			if (keyCode == DELETE || keyCode == BACKSPACE) {

+				if (ed.dom.isEmpty(ed.getBody())) {

+					ed.setContent('', {format : 'raw'});

+					ed.nodeChanged();

+					return;

+				}

+			}

+		});

+	};

+

+	function inputMethodFocus(ed) {

+		ed.dom.bind(ed.getDoc(), 'focusin', function() {

+			ed.selection.setRng(ed.selection.getRng());

+		});

+	};

+

+	function removeHrOnBackspace(ed) {

+		ed.onKeyDown.add(function(ed, e) {

+			if (e.keyCode === BACKSPACE) {

+				if (ed.selection.isCollapsed() && ed.selection.getRng(true).startOffset === 0) {

+					var node = ed.selection.getNode();

+					var previousSibling = node.previousSibling;

+					if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") {

+						ed.dom.remove(previousSibling);

+						tinymce.dom.Event.cancel(e);

+					}

+				}

+			}

+		})

+	}

+

+	function focusBody(ed) {

+		// Fix for a focus bug in FF 3.x where the body element

+		// wouldn't get proper focus if the user clicked on the HTML element

+		if (!Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4

+			ed.onMouseDown.add(function(ed, e) {

+				if (e.target.nodeName === "HTML") {

+					var body = ed.getBody();

+

+					// Blur the body it's focused but not correctly focused

+					body.blur();

+

+					// Refocus the body after a little while

+					setTimeout(function() {

+						body.focus();

+					}, 0);

+				}

+			});

+		}

+	};

+

+	function selectControlElements(ed) {

+		ed.onClick.add(function(ed, e) {

+			e = e.target;

+

+			// Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250

+			// WebKit can't even do simple things like selecting an image

+			// Needs tobe the setBaseAndExtend or it will fail to select floated images

+			if (/^(IMG|HR)$/.test(e.nodeName))

+				ed.selection.getSel().setBaseAndExtent(e, 0, e, 1);

+

+			if (e.nodeName == 'A' && ed.dom.hasClass(e, 'mceItemAnchor'))

+				ed.selection.select(e);

+

+			ed.nodeChanged();

+		});

+	};

+

+	function removeStylesOnPTagsInheritedFromHeadingTag(ed) {

+		ed.onKeyDown.add(function(ed, event) {

+			function checkInHeadingTag(ed) {

+				var currentNode = ed.selection.getNode();

+				var headingTags = 'h1,h2,h3,h4,h5,h6';

+				return ed.dom.is(currentNode, headingTags) || ed.dom.getParent(currentNode, headingTags) !== null;

+			}

+

+			if (event.keyCode === VK.ENTER && !VK.modifierPressed(event) && checkInHeadingTag(ed)) {

+				setTimeout(function() {

+					var currentNode = ed.selection.getNode();

+					if (ed.dom.is(currentNode, 'p')) {

+						ed.dom.setAttrib(currentNode, 'style', null);

+						// While tiny's content is correct after this method call, the content shown is not representative of it and needs to be 'repainted'

+						ed.execCommand('mceCleanup');

+					}

+				}, 0);

+			}

+		});

+	}

+	function selectionChangeNodeChanged(ed) {

+		var lastRng, selectionTimer;

+

+		ed.dom.bind(ed.getDoc(), 'selectionchange', function() {

+			if (selectionTimer) {

+				clearTimeout(selectionTimer);

+				selectionTimer = 0;

+			}

+

+			selectionTimer = window.setTimeout(function() {

+				var rng = ed.selection.getRng();

+

+				// Compare the ranges to see if it was a real change or not

+				if (!lastRng || !tinymce.dom.RangeUtils.compareRanges(rng, lastRng)) {

+					ed.nodeChanged();

+					lastRng = rng;

+				}

+			}, 50);

+		});

+	}

+

+	function ensureBodyHasRoleApplication(ed) {

+		document.body.setAttribute("role", "application");

+	}

+	

+	tinymce.create('tinymce.util.Quirks', {

+		Quirks: function(ed) {

+			// WebKit

+			if (tinymce.isWebKit) {

+				cleanupStylesWhenDeleting(ed);

+				emptyEditorWhenDeleting(ed);

+				inputMethodFocus(ed);

+				selectControlElements(ed);

+

+				// iOS

+				if (tinymce.isIDevice) {

+					selectionChangeNodeChanged(ed);

+				}

+			}

+

+			// IE

+			if (tinymce.isIE) {

+				removeHrOnBackspace(ed);

+				emptyEditorWhenDeleting(ed);

+				ensureBodyHasRoleApplication(ed);

+				removeStylesOnPTagsInheritedFromHeadingTag(ed)

+			}

+

+			// Gecko

+			if (tinymce.isGecko) {

+				removeHrOnBackspace(ed);

+				focusBody(ed);

+			}

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var namedEntities, baseEntities, reverseEntities,

+		attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,

+		textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,

+		rawCharsRegExp = /[<>&\"\']/g,

+		entityRegExp = /&(#x|#)?([\w]+);/g,

+		asciiMap = {

+				128 : "\u20AC", 130 : "\u201A", 131 : "\u0192", 132 : "\u201E", 133 : "\u2026", 134 : "\u2020",

+				135 : "\u2021", 136 : "\u02C6", 137 : "\u2030", 138 : "\u0160", 139 : "\u2039", 140 : "\u0152",

+				142 : "\u017D", 145 : "\u2018", 146 : "\u2019", 147 : "\u201C", 148 : "\u201D", 149 : "\u2022",

+				150 : "\u2013", 151 : "\u2014", 152 : "\u02DC", 153 : "\u2122", 154 : "\u0161", 155 : "\u203A",

+				156 : "\u0153", 158 : "\u017E", 159 : "\u0178"

+		};

+

+	// Raw entities

+	baseEntities = {

+		'\"' : '&quot;', // Needs to be escaped since the YUI compressor would otherwise break the code

+		"'" : '&#39;',

+		'<' : '&lt;',

+		'>' : '&gt;',

+		'&' : '&amp;'

+	};

+

+	// Reverse lookup table for raw entities

+	reverseEntities = {

+		'&lt;' : '<',

+		'&gt;' : '>',

+		'&amp;' : '&',

+		'&quot;' : '"',

+		'&apos;' : "'"

+	};

+

+	// Decodes text by using the browser

+	function nativeDecode(text) {

+		var elm;

+

+		elm = document.createElement("div");

+		elm.innerHTML = text;

+

+		return elm.textContent || elm.innerText || text;

+	};

+

+	// Build a two way lookup table for the entities

+	function buildEntitiesLookup(items, radix) {

+		var i, chr, entity, lookup = {};

+

+		if (items) {

+			items = items.split(',');

+			radix = radix || 10;

+

+			// Build entities lookup table

+			for (i = 0; i < items.length; i += 2) {

+				chr = String.fromCharCode(parseInt(items[i], radix));

+

+				// Only add non base entities

+				if (!baseEntities[chr]) {

+					entity = '&' + items[i + 1] + ';';

+					lookup[chr] = entity;

+					lookup[entity] = chr;

+				}

+			}

+

+			return lookup;

+		}

+	};

+

+	// Unpack entities lookup where the numbers are in radix 32 to reduce the size

+	namedEntities = buildEntitiesLookup(

+		'50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' +

+		'5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' +

+		'5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' +

+		'5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' +

+		'68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' +

+		'6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' +

+		'6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' +

+		'75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' +

+		'7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' +

+		'7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' +

+		'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' +

+		'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' +

+		't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' +

+		'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' +

+		'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' +

+		'81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' +

+		'8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' +

+		'8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' +

+		'8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' +

+		'8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' +

+		'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' +

+		'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' +

+		'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' +

+		'80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' +

+		'811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro'

+	, 32);

+

+	tinymce.html = tinymce.html || {};

+

+	tinymce.html.Entities = {

+		encodeRaw : function(text, attr) {

+			return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

+				return baseEntities[chr] || chr;

+			});

+		},

+

+		encodeAllRaw : function(text) {

+			return ('' + text).replace(rawCharsRegExp, function(chr) {

+				return baseEntities[chr] || chr;

+			});

+		},

+

+		encodeNumeric : function(text, attr) {

+			return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

+				// Multi byte sequence convert it to a single entity

+				if (chr.length > 1)

+					return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';';

+

+				return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';

+			});

+		},

+

+		encodeNamed : function(text, attr, entities) {

+			entities = entities || namedEntities;

+

+			return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

+				return baseEntities[chr] || entities[chr] || chr;

+			});

+		},

+

+		getEncodeFunc : function(name, entities) {

+			var Entities = tinymce.html.Entities;

+

+			entities = buildEntitiesLookup(entities) || namedEntities;

+

+			function encodeNamedAndNumeric(text, attr) {

+				return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {

+					return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr;

+				});

+			};

+

+			function encodeCustomNamed(text, attr) {

+				return Entities.encodeNamed(text, attr, entities);

+			};

+

+			// Replace + with , to be compatible with previous TinyMCE versions

+			name = tinymce.makeMap(name.replace(/\+/g, ','));

+

+			// Named and numeric encoder

+			if (name.named && name.numeric)

+				return encodeNamedAndNumeric;

+

+			// Named encoder

+			if (name.named) {

+				// Custom names

+				if (entities)

+					return encodeCustomNamed;

+

+				return Entities.encodeNamed;

+			}

+

+			// Numeric

+			if (name.numeric)

+				return Entities.encodeNumeric;

+

+			// Raw encoder

+			return Entities.encodeRaw;

+		},

+

+		decode : function(text) {

+			return text.replace(entityRegExp, function(all, numeric, value) {

+				if (numeric) {

+					value = parseInt(value, numeric.length === 2 ? 16 : 10);

+

+					// Support upper UTF

+					if (value > 0xFFFF) {

+						value -= 0x10000;

+

+						return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF));

+					} else

+						return asciiMap[value] || String.fromCharCode(value);

+				}

+

+				return reverseEntities[all] || namedEntities[all] || nativeDecode(all);

+			});

+		}

+	};

+})(tinymce);

+

+tinymce.html.Styles = function(settings, schema) {

+	var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,

+		urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,

+		styleRegExp = /\s*([^:]+):\s*([^;]+);?/g,

+		trimRightRegExp = /\s+$/,

+		urlColorRegExp = /rgb/,

+		undef, i, encodingLookup = {}, encodingItems;

+

+	settings = settings || {};

+

+	encodingItems = '\\" \\\' \\; \\: ; : \uFEFF'.split(' ');

+	for (i = 0; i < encodingItems.length; i++) {

+		encodingLookup[encodingItems[i]] = '\uFEFF' + i;

+		encodingLookup['\uFEFF' + i] = encodingItems[i];

+	}

+

+	function toHex(match, r, g, b) {

+		function hex(val) {

+			val = parseInt(val).toString(16);

+

+			return val.length > 1 ? val : '0' + val; // 0 -> 00

+		};

+

+		return '#' + hex(r) + hex(g) + hex(b);

+	};

+

+	return {

+		toHex : function(color) {

+			return color.replace(rgbRegExp, toHex);

+		},

+

+		parse : function(css) {

+			var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope || this;

+

+			function compress(prefix, suffix) {

+				var top, right, bottom, left;

+

+				// Get values and check it it needs compressing

+				top = styles[prefix + '-top' + suffix];

+				if (!top)

+					return;

+

+				right = styles[prefix + '-right' + suffix];

+				if (top != right)

+					return;

+

+				bottom = styles[prefix + '-bottom' + suffix];

+				if (right != bottom)

+					return;

+

+				left = styles[prefix + '-left' + suffix];

+				if (bottom != left)

+					return;

+

+				// Compress

+				styles[prefix + suffix] = left;

+				delete styles[prefix + '-top' + suffix];

+				delete styles[prefix + '-right' + suffix];

+				delete styles[prefix + '-bottom' + suffix];

+				delete styles[prefix + '-left' + suffix];

+			};

+

+			function canCompress(key) {

+				var value = styles[key], i;

+

+				if (!value || value.indexOf(' ') < 0)

+					return;

+

+				value = value.split(' ');

+				i = value.length;

+				while (i--) {

+					if (value[i] !== value[0])

+						return false;

+				}

+

+				styles[key] = value[0];

+

+				return true;

+			};

+

+			function compress2(target, a, b, c) {

+				if (!canCompress(a))

+					return;

+

+				if (!canCompress(b))

+					return;

+

+				if (!canCompress(c))

+					return;

+

+				// Compress

+				styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];

+				delete styles[a];

+				delete styles[b];

+				delete styles[c];

+			};

+

+			// Encodes the specified string by replacing all \" \' ; : with _<num>

+			function encode(str) {

+				isEncoded = true;

+

+				return encodingLookup[str];

+			};

+

+			// Decodes the specified string by replacing all _<num> with it's original value \" \' etc

+			// It will also decode the \" \' if keep_slashes is set to fale or omitted

+			function decode(str, keep_slashes) {

+				if (isEncoded) {

+					str = str.replace(/\uFEFF[0-9]/g, function(str) {

+						return encodingLookup[str];

+					});

+				}

+

+				if (!keep_slashes)

+					str = str.replace(/\\([\'\";:])/g, "$1");

+

+				return str;

+			}

+

+			if (css) {

+				// Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing

+				css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) {

+					return str.replace(/[;:]/g, encode);

+				});

+

+				// Parse styles

+				while (matches = styleRegExp.exec(css)) {

+					name = matches[1].replace(trimRightRegExp, '').toLowerCase();

+					value = matches[2].replace(trimRightRegExp, '');

+

+					if (name && value.length > 0) {

+						// Opera will produce 700 instead of bold in their style values

+						if (name === 'font-weight' && value === '700')

+							value = 'bold';

+						else if (name === 'color' || name === 'background-color') // Lowercase colors like RED

+							value = value.toLowerCase();		

+

+						// Convert RGB colors to HEX

+						value = value.replace(rgbRegExp, toHex);

+

+						// Convert URLs and force them into url('value') format

+						value = value.replace(urlOrStrRegExp, function(match, url, url2, url3, str, str2) {

+							str = str || str2;

+

+							if (str) {

+								str = decode(str);

+

+								// Force strings into single quote format

+								return "'" + str.replace(/\'/g, "\\'") + "'";

+							}

+

+							url = decode(url || url2 || url3);

+

+							// Convert the URL to relative/absolute depending on config

+							if (urlConverter)

+								url = urlConverter.call(urlConverterScope, url, 'style');

+

+							// Output new URL format

+							return "url('" + url.replace(/\'/g, "\\'") + "')";

+						});

+

+						styles[name] = isEncoded ? decode(value, true) : value;

+					}

+

+					styleRegExp.lastIndex = matches.index + matches[0].length;

+				}

+

+				// Compress the styles to reduce it's size for example IE will expand styles

+				compress("border", "");

+				compress("border", "-width");

+				compress("border", "-color");

+				compress("border", "-style");

+				compress("padding", "");

+				compress("margin", "");

+				compress2('border', 'border-width', 'border-style', 'border-color');

+

+				// Remove pointless border, IE produces these

+				if (styles.border === 'medium none')

+					delete styles.border;

+			}

+

+			return styles;

+		},

+

+		serialize : function(styles, element_name) {

+			var css = '', name, value;

+

+			function serializeStyles(name) {

+				var styleList, i, l, value;

+

+				styleList = schema.styles[name];

+				if (styleList) {

+					for (i = 0, l = styleList.length; i < l; i++) {

+						name = styleList[i];

+						value = styles[name];

+

+						if (value !== undef && value.length > 0)

+							css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';

+					}

+				}

+			};

+

+			// Serialize styles according to schema

+			if (element_name && schema && schema.styles) {

+				// Serialize global styles and element specific styles

+				serializeStyles('*');

+				serializeStyles(element_name);

+			} else {

+				// Output the styles in the order they are inside the object

+				for (name in styles) {

+					value = styles[name];

+

+					if (value !== undef && value.length > 0)

+						css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';

+				}

+			}

+

+			return css;

+		}

+	};

+};

+

+(function(tinymce) {

+	var transitional = {}, boolAttrMap, blockElementsMap, shortEndedElementsMap, nonEmptyElementsMap, customElementsMap = {},

+		defaultWhiteSpaceElementsMap, selfClosingElementsMap, makeMap = tinymce.makeMap, each = tinymce.each;

+

+	function split(str, delim) {

+		return str.split(delim || ',');

+	};

+

+	function unpack(lookup, data) {

+		var key, elements = {};

+

+		function replace(value) {

+			return value.replace(/[A-Z]+/g, function(key) {

+				return replace(lookup[key]);

+			});

+		};

+

+		// Unpack lookup

+		for (key in lookup) {

+			if (lookup.hasOwnProperty(key))

+				lookup[key] = replace(lookup[key]);

+		}

+

+		// Unpack and parse data into object map

+		replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function(str, name, attributes, children) {

+			attributes = split(attributes, '|');

+

+			elements[name] = {

+				attributes : makeMap(attributes),

+				attributesOrder : attributes,

+				children : makeMap(children, '|', {'#comment' : {}})

+			}

+		});

+

+		return elements;

+	};

+

+	// Build a lookup table for block elements both lowercase and uppercase

+	blockElementsMap = 'h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,' + 

+						'th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,' + 

+						'noscript,menu,isindex,samp,header,footer,article,section,hgroup';

+	blockElementsMap = makeMap(blockElementsMap, ',', makeMap(blockElementsMap.toUpperCase()));

+

+	// This is the XHTML 1.0 transitional elements with it's attributes and children packed to reduce it's size

+	transitional = unpack({

+		Z : 'H|K|N|O|P',

+		Y : 'X|form|R|Q',

+		ZG : 'E|span|width|align|char|charoff|valign',

+		X : 'p|T|div|U|W|isindex|fieldset|table',

+		ZF : 'E|align|char|charoff|valign',

+		W : 'pre|hr|blockquote|address|center|noframes',

+		ZE : 'abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height',

+		ZD : '[E][S]',

+		U : 'ul|ol|dl|menu|dir',

+		ZC : 'p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q',

+		T : 'h1|h2|h3|h4|h5|h6',

+		ZB : 'X|S|Q',

+		S : 'R|P',

+		ZA : 'a|G|J|M|O|P',

+		R : 'a|H|K|N|O',

+		Q : 'noscript|P',

+		P : 'ins|del|script',

+		O : 'input|select|textarea|label|button',

+		N : 'M|L',

+		M : 'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym',

+		L : 'sub|sup',

+		K : 'J|I',

+		J : 'tt|i|b|u|s|strike',

+		I : 'big|small|font|basefont',

+		H : 'G|F',

+		G : 'br|span|bdo',

+		F : 'object|applet|img|map|iframe',

+		E : 'A|B|C',

+		D : 'accesskey|tabindex|onfocus|onblur',

+		C : 'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup',

+		B : 'lang|xml:lang|dir',

+		A : 'id|class|style|title'

+	}, 'script[id|charset|type|language|src|defer|xml:space][]' + 

+		'style[B|id|type|media|title|xml:space][]' + 

+		'object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]' + 

+		'param[id|name|value|valuetype|type][]' + 

+		'p[E|align][#|S]' + 

+		'a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]' + 

+		'br[A|clear][]' + 

+		'span[E][#|S]' + 

+		'bdo[A|C|B][#|S]' + 

+		'applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]' + 

+		'h1[E|align][#|S]' + 

+		'img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]' + 

+		'map[B|C|A|name][X|form|Q|area]' + 

+		'h2[E|align][#|S]' + 

+		'iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]' + 

+		'h3[E|align][#|S]' + 

+		'tt[E][#|S]' + 

+		'i[E][#|S]' + 

+		'b[E][#|S]' + 

+		'u[E][#|S]' + 

+		's[E][#|S]' + 

+		'strike[E][#|S]' + 

+		'big[E][#|S]' + 

+		'small[E][#|S]' + 

+		'font[A|B|size|color|face][#|S]' + 

+		'basefont[id|size|color|face][]' + 

+		'em[E][#|S]' + 

+		'strong[E][#|S]' + 

+		'dfn[E][#|S]' + 

+		'code[E][#|S]' + 

+		'q[E|cite][#|S]' + 

+		'samp[E][#|S]' + 

+		'kbd[E][#|S]' + 

+		'var[E][#|S]' + 

+		'cite[E][#|S]' + 

+		'abbr[E][#|S]' + 

+		'acronym[E][#|S]' + 

+		'sub[E][#|S]' + 

+		'sup[E][#|S]' + 

+		'input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]' + 

+		'select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]' + 

+		'optgroup[E|disabled|label][option]' + 

+		'option[E|selected|disabled|label|value][]' + 

+		'textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]' + 

+		'label[E|for|accesskey|onfocus|onblur][#|S]' + 

+		'button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]' + 

+		'h4[E|align][#|S]' + 

+		'ins[E|cite|datetime][#|Y]' + 

+		'h5[E|align][#|S]' + 

+		'del[E|cite|datetime][#|Y]' + 

+		'h6[E|align][#|S]' + 

+		'div[E|align][#|Y]' + 

+		'ul[E|type|compact][li]' + 

+		'li[E|type|value][#|Y]' + 

+		'ol[E|type|compact|start][li]' + 

+		'dl[E|compact][dt|dd]' + 

+		'dt[E][#|S]' + 

+		'dd[E][#|Y]' + 

+		'menu[E|compact][li]' + 

+		'dir[E|compact][li]' + 

+		'pre[E|width|xml:space][#|ZA]' + 

+		'hr[E|align|noshade|size|width][]' + 

+		'blockquote[E|cite][#|Y]' + 

+		'address[E][#|S|p]' + 

+		'center[E][#|Y]' + 

+		'noframes[E][#|Y]' + 

+		'isindex[A|B|prompt][]' + 

+		'fieldset[E][#|legend|Y]' + 

+		'legend[E|accesskey|align][#|S]' + 

+		'table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]' + 

+		'caption[E|align][#|S]' + 

+		'col[ZG][]' + 

+		'colgroup[ZG][col]' + 

+		'thead[ZF][tr]' + 

+		'tr[ZF|bgcolor][th|td]' + 

+		'th[E|ZE][#|Y]' + 

+		'form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]' + 

+		'noscript[E][#|Y]' + 

+		'td[E|ZE][#|Y]' + 

+		'tfoot[ZF][tr]' + 

+		'tbody[ZF][tr]' + 

+		'area[E|D|shape|coords|href|nohref|alt|target][]' + 

+		'base[id|href|target][]' + 

+		'body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]'

+	);

+

+	boolAttrMap = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,autoplay,loop,controls');

+	shortEndedElementsMap = makeMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source');

+	nonEmptyElementsMap = tinymce.extend(makeMap('td,th,iframe,video,audio,object'), shortEndedElementsMap);

+	defaultWhiteSpaceElementsMap = makeMap('pre,script,style,textarea');

+	selfClosingElementsMap = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');

+

+	tinymce.html.Schema = function(settings) {

+		var self = this, elements = {}, children = {}, patternElements = [], validStyles, whiteSpaceElementsMap;

+

+		settings = settings || {};

+

+		// Allow all elements and attributes if verify_html is set to false

+		if (settings.verify_html === false)

+			settings.valid_elements = '*[*]';

+

+		// Build styles list

+		if (settings.valid_styles) {

+			validStyles = {};

+

+			// Convert styles into a rule list

+			each(settings.valid_styles, function(value, key) {

+				validStyles[key] = tinymce.explode(value);

+			});

+		}

+

+		whiteSpaceElementsMap = settings.whitespace_elements ? makeMap(settings.whitespace_elements) : defaultWhiteSpaceElementsMap;

+

+		// Converts a wildcard expression string to a regexp for example *a will become /.*a/.

+		function patternToRegExp(str) {

+			return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');

+		};

+

+		// Parses the specified valid_elements string and adds to the current rules

+		// This function is a bit hard to read since it's heavily optimized for speed

+		function addValidElements(valid_elements) {

+			var ei, el, ai, al, yl, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder,

+				prefix, outputName, globalAttributes, globalAttributesOrder, transElement, key, childKey, value,

+				elementRuleRegExp = /^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,

+				attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,

+				hasPatternsRegExp = /[*?+]/;

+

+			if (valid_elements) {

+				// Split valid elements into an array with rules

+				valid_elements = split(valid_elements);

+

+				if (elements['@']) {

+					globalAttributes = elements['@'].attributes;

+					globalAttributesOrder = elements['@'].attributesOrder;

+				}

+

+				// Loop all rules

+				for (ei = 0, el = valid_elements.length; ei < el; ei++) {

+					// Parse element rule

+					matches = elementRuleRegExp.exec(valid_elements[ei]);

+					if (matches) {

+						// Setup local names for matches

+						prefix = matches[1];

+						elementName = matches[2];

+						outputName = matches[3];

+						attrData = matches[4];

+

+						// Create new attributes and attributesOrder

+						attributes = {};

+						attributesOrder = [];

+

+						// Create the new element

+						element = {

+							attributes : attributes,

+							attributesOrder : attributesOrder

+						};

+

+						// Padd empty elements prefix

+						if (prefix === '#')

+							element.paddEmpty = true;

+

+						// Remove empty elements prefix

+						if (prefix === '-')

+							element.removeEmpty = true;

+

+						// Copy attributes from global rule into current rule

+						if (globalAttributes) {

+							for (key in globalAttributes)

+								attributes[key] = globalAttributes[key];

+

+							attributesOrder.push.apply(attributesOrder, globalAttributesOrder);

+						}

+

+						// Attributes defined

+						if (attrData) {

+							attrData = split(attrData, '|');

+							for (ai = 0, al = attrData.length; ai < al; ai++) {

+								matches = attrRuleRegExp.exec(attrData[ai]);

+								if (matches) {

+									attr = {};

+									attrType = matches[1];

+									attrName = matches[2].replace(/::/g, ':');

+									prefix = matches[3];

+									value = matches[4];

+

+									// Required

+									if (attrType === '!') {

+										element.attributesRequired = element.attributesRequired || [];

+										element.attributesRequired.push(attrName);

+										attr.required = true;

+									}

+

+									// Denied from global

+									if (attrType === '-') {

+										delete attributes[attrName];

+										attributesOrder.splice(tinymce.inArray(attributesOrder, attrName), 1);

+										continue;

+									}

+

+									// Default value

+									if (prefix) {

+										// Default value

+										if (prefix === '=') {

+											element.attributesDefault = element.attributesDefault || [];

+											element.attributesDefault.push({name: attrName, value: value});

+											attr.defaultValue = value;

+										}

+

+										// Forced value

+										if (prefix === ':') {

+											element.attributesForced = element.attributesForced || [];

+											element.attributesForced.push({name: attrName, value: value});

+											attr.forcedValue = value;

+										}

+

+										// Required values

+										if (prefix === '<')

+											attr.validValues = makeMap(value, '?');

+									}

+

+									// Check for attribute patterns

+									if (hasPatternsRegExp.test(attrName)) {

+										element.attributePatterns = element.attributePatterns || [];

+										attr.pattern = patternToRegExp(attrName);

+										element.attributePatterns.push(attr);

+									} else {

+										// Add attribute to order list if it doesn't already exist

+										if (!attributes[attrName])

+											attributesOrder.push(attrName);

+

+										attributes[attrName] = attr;

+									}

+								}

+							}

+						}

+

+						// Global rule, store away these for later usage

+						if (!globalAttributes && elementName == '@') {

+							globalAttributes = attributes;

+							globalAttributesOrder = attributesOrder;

+						}

+

+						// Handle substitute elements such as b/strong

+						if (outputName) {

+							element.outputName = elementName;

+							elements[outputName] = element;

+						}

+

+						// Add pattern or exact element

+						if (hasPatternsRegExp.test(elementName)) {

+							element.pattern = patternToRegExp(elementName);

+							patternElements.push(element);

+						} else

+							elements[elementName] = element;

+					}

+				}

+			}

+		};

+

+		function setValidElements(valid_elements) {

+			elements = {};

+			patternElements = [];

+

+			addValidElements(valid_elements);

+

+			each(transitional, function(element, name) {

+				children[name] = element.children;

+			});

+		};

+

+		// Adds custom non HTML elements to the schema

+		function addCustomElements(custom_elements) {

+			var customElementRegExp = /^(~)?(.+)$/;

+

+			if (custom_elements) {

+				each(split(custom_elements), function(rule) {

+					var matches = customElementRegExp.exec(rule),

+						inline = matches[1] === '~',

+						cloneName = inline ? 'span' : 'div',

+						name = matches[2];

+

+					children[name] = children[cloneName];

+					customElementsMap[name] = cloneName;

+

+					// If it's not marked as inline then add it to valid block elements

+					if (!inline)

+						blockElementsMap[name] = {};

+

+					// Add custom elements at span/div positions

+					each(children, function(element, child) {

+						if (element[cloneName])

+							element[name] = element[cloneName];

+					});

+				});

+			}

+		};

+

+		// Adds valid children to the schema object

+		function addValidChildren(valid_children) {

+			var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;

+

+			if (valid_children) {

+				each(split(valid_children), function(rule) {

+					var matches = childRuleRegExp.exec(rule), parent, prefix;

+

+					if (matches) {

+						prefix = matches[1];

+

+						// Add/remove items from default

+						if (prefix)

+							parent = children[matches[2]];

+						else

+							parent = children[matches[2]] = {'#comment' : {}};

+

+						parent = children[matches[2]];

+

+						each(split(matches[3], '|'), function(child) {

+							if (prefix === '-')

+								delete parent[child];

+							else

+								parent[child] = {};

+						});

+					}

+				});

+			}

+		};

+

+		function getElementRule(name) {

+			var element = elements[name], i;

+

+			// Exact match found

+			if (element)

+				return element;

+

+			// No exact match then try the patterns

+			i = patternElements.length;

+			while (i--) {

+				element = patternElements[i];

+

+				if (element.pattern.test(name))

+					return element;

+			}

+		};

+

+		if (!settings.valid_elements) {

+			// No valid elements defined then clone the elements from the transitional spec

+			each(transitional, function(element, name) {

+				elements[name] = {

+					attributes : element.attributes,

+					attributesOrder : element.attributesOrder

+				};

+

+				children[name] = element.children;

+			});

+

+			// Switch these

+			each(split('strong/b,em/i'), function(item) {

+				item = split(item, '/');

+				elements[item[1]].outputName = item[0];

+			});

+

+			// Add default alt attribute for images

+			elements.img.attributesDefault = [{name: 'alt', value: ''}];

+

+			// Remove these if they are empty by default

+			each(split('ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr'), function(name) {

+				elements[name].removeEmpty = true;

+			});

+

+			// Padd these by default

+			each(split('p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption'), function(name) {

+				elements[name].paddEmpty = true;

+			});

+		} else

+			setValidElements(settings.valid_elements);

+

+		addCustomElements(settings.custom_elements);

+		addValidChildren(settings.valid_children);

+		addValidElements(settings.extended_valid_elements);

+

+		// Todo: Remove this when we fix list handling to be valid

+		addValidChildren('+ol[ul|ol],+ul[ul|ol]');

+

+		// If the user didn't allow span only allow internal spans

+		if (!getElementRule('span'))

+			addValidElements('span[!data-mce-type|*]');

+

+		// Delete invalid elements

+		if (settings.invalid_elements) {

+			tinymce.each(tinymce.explode(settings.invalid_elements), function(item) {

+				if (elements[item])

+					delete elements[item];

+			});

+		}

+

+		self.children = children;

+

+		self.styles = validStyles;

+

+		self.getBoolAttrs = function() {

+			return boolAttrMap;

+		};

+

+		self.getBlockElements = function() {

+			return blockElementsMap;

+		};

+

+		self.getShortEndedElements = function() {

+			return shortEndedElementsMap;

+		};

+

+		self.getSelfClosingElements = function() {

+			return selfClosingElementsMap;

+		};

+

+		self.getNonEmptyElements = function() {

+			return nonEmptyElementsMap;

+		};

+

+		self.getWhiteSpaceElements = function() {

+			return whiteSpaceElementsMap;

+		};

+

+		self.isValidChild = function(name, child) {

+			var parent = children[name];

+

+			return !!(parent && parent[child]);

+		};

+

+		self.getElementRule = getElementRule;

+

+		self.getCustomElements = function() {

+			return customElementsMap;

+		};

+

+		self.addValidElements = addValidElements;

+

+		self.setValidElements = setValidElements;

+

+		self.addCustomElements = addCustomElements;

+

+		self.addValidChildren = addValidChildren;

+	};

+

+	// Expose boolMap and blockElementMap as static properties for usage in DOMUtils

+	tinymce.html.Schema.boolAttrMap = boolAttrMap;

+	tinymce.html.Schema.blockElementsMap = blockElementsMap;

+})(tinymce);

+

+(function(tinymce) {

+	tinymce.html.SaxParser = function(settings, schema) {

+		var self = this, noop = function() {};

+

+		settings = settings || {};

+		self.schema = schema = schema || new tinymce.html.Schema();

+

+		if (settings.fix_self_closing !== false)

+			settings.fix_self_closing = true;

+

+		// Add handler functions from settings and setup default handlers

+		tinymce.each('comment cdata text start end pi doctype'.split(' '), function(name) {

+			if (name)

+				self[name] = settings[name] || noop;

+		});

+

+		self.parse = function(html) {

+			var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name, isInternalElement, removeInternalElements,

+				shortEndedElements, fillAttrsMap, isShortEnded, validate, elementRule, isValidElement, attr, attribsValue, invalidPrefixRegExp,

+				validAttributesMap, validAttributePatterns, attributesRequired, attributesDefault, attributesForced, selfClosing,

+				tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0, decode = tinymce.html.Entities.decode, fixSelfClosing, isIE;

+

+			function processEndTag(name) {

+				var pos, i;

+

+				// Find position of parent of the same type

+				pos = stack.length;

+				while (pos--) {

+					if (stack[pos].name === name)

+						break;						

+				}

+

+				// Found parent

+				if (pos >= 0) {

+					// Close all the open elements

+					for (i = stack.length - 1; i >= pos; i--) {

+						name = stack[i];

+

+						if (name.valid)

+							self.end(name.name);

+					}

+

+					// Remove the open elements from the stack

+					stack.length = pos;

+				}

+			};

+

+			// Precompile RegExps and map objects

+			tokenRegExp = new RegExp('<(?:' +

+				'(?:!--([\\w\\W]*?)-->)|' + // Comment

+				'(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA

+				'(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE

+				'(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI

+				'(?:\\/([^>]+)>)|' + // End element

+				'(?:([^\\s\\/<>]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/)>)' + // Start element

+			')', 'g');

+

+			attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;

+			specialElements = {

+				'script' : /<\/script[^>]*>/gi,

+				'style' : /<\/style[^>]*>/gi,

+				'noscript' : /<\/noscript[^>]*>/gi

+			};

+

+			// Setup lookup tables for empty elements and boolean attributes

+			shortEndedElements = schema.getShortEndedElements();

+			selfClosing = schema.getSelfClosingElements();

+			fillAttrsMap = schema.getBoolAttrs();

+			validate = settings.validate;

+			removeInternalElements = settings.remove_internals;

+			fixSelfClosing = settings.fix_self_closing;

+			isIE = tinymce.isIE;

+			invalidPrefixRegExp = /^:/;

+

+			while (matches = tokenRegExp.exec(html)) {

+				// Text

+				if (index < matches.index)

+					self.text(decode(html.substr(index, matches.index - index)));

+

+				if (value = matches[6]) { // End element

+					value = value.toLowerCase();

+

+					// IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements

+					if (isIE && invalidPrefixRegExp.test(value))

+						value = value.substr(1);

+

+					processEndTag(value);

+				} else if (value = matches[7]) { // Start element

+					value = value.toLowerCase();

+

+					// IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements

+					if (isIE && invalidPrefixRegExp.test(value))

+						value = value.substr(1);

+

+					isShortEnded = value in shortEndedElements;

+

+					// Is self closing tag for example an <li> after an open <li>

+					if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value)

+						processEndTag(value);

+

+					// Validate element

+					if (!validate || (elementRule = schema.getElementRule(value))) {

+						isValidElement = true;

+

+						// Grab attributes map and patters when validation is enabled

+						if (validate) {

+							validAttributesMap = elementRule.attributes;

+							validAttributePatterns = elementRule.attributePatterns;

+						}

+

+						// Parse attributes

+						if (attribsValue = matches[8]) {

+							isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; // Check if the element is an internal element

+

+							// If the element has internal attributes then remove it if we are told to do so

+							if (isInternalElement && removeInternalElements)

+								isValidElement = false;

+

+							attrList = [];

+							attrList.map = {};

+

+							attribsValue.replace(attrRegExp, function(match, name, value, val2, val3) {

+								var attrRule, i;

+

+								name = name.toLowerCase();

+								value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute

+

+								// Validate name and value

+								if (validate && !isInternalElement && name.indexOf('data-') !== 0) {

+									attrRule = validAttributesMap[name];

+

+									// Find rule by pattern matching

+									if (!attrRule && validAttributePatterns) {

+										i = validAttributePatterns.length;

+										while (i--) {

+											attrRule = validAttributePatterns[i];

+											if (attrRule.pattern.test(name))

+												break;

+										}

+

+										// No rule matched

+										if (i === -1)

+											attrRule = null;

+									}

+

+									// No attribute rule found

+									if (!attrRule)

+										return;

+

+									// Validate value

+									if (attrRule.validValues && !(value in attrRule.validValues))

+										return;

+								}

+

+								// Add attribute to list and map

+								attrList.map[name] = value;

+								attrList.push({

+									name: name,

+									value: value

+								});

+							});

+						} else {

+							attrList = [];

+							attrList.map = {};

+						}

+

+						// Process attributes if validation is enabled

+						if (validate && !isInternalElement) {

+							attributesRequired = elementRule.attributesRequired;

+							attributesDefault = elementRule.attributesDefault;

+							attributesForced = elementRule.attributesForced;

+

+							// Handle forced attributes

+							if (attributesForced) {

+								i = attributesForced.length;

+								while (i--) {

+									attr = attributesForced[i];

+									name = attr.name;

+									attrValue = attr.value;

+

+									if (attrValue === '{$uid}')

+										attrValue = 'mce_' + idCount++;

+

+									attrList.map[name] = attrValue;

+									attrList.push({name: name, value: attrValue});

+								}

+							}

+

+							// Handle default attributes

+							if (attributesDefault) {

+								i = attributesDefault.length;

+								while (i--) {

+									attr = attributesDefault[i];

+									name = attr.name;

+

+									if (!(name in attrList.map)) {

+										attrValue = attr.value;

+

+										if (attrValue === '{$uid}')

+											attrValue = 'mce_' + idCount++;

+

+										attrList.map[name] = attrValue;

+										attrList.push({name: name, value: attrValue});

+									}

+								}

+							}

+

+							// Handle required attributes

+							if (attributesRequired) {

+								i = attributesRequired.length;

+								while (i--) {

+									if (attributesRequired[i] in attrList.map)

+										break;

+								}

+

+								// None of the required attributes where found

+								if (i === -1)

+									isValidElement = false;

+							}

+

+							// Invalidate element if it's marked as bogus

+							if (attrList.map['data-mce-bogus'])

+								isValidElement = false;

+						}

+

+						if (isValidElement)

+							self.start(value, attrList, isShortEnded);

+					} else

+						isValidElement = false;

+

+					// Treat script, noscript and style a bit different since they may include code that looks like elements

+					if (endRegExp = specialElements[value]) {

+						endRegExp.lastIndex = index = matches.index + matches[0].length;

+

+						if (matches = endRegExp.exec(html)) {

+							if (isValidElement)

+								text = html.substr(index, matches.index - index);

+

+							index = matches.index + matches[0].length;

+						} else {

+							text = html.substr(index);

+							index = html.length;

+						}

+

+						if (isValidElement && text.length > 0)

+							self.text(text, true);

+

+						if (isValidElement)

+							self.end(value);

+

+						tokenRegExp.lastIndex = index;

+						continue;

+					}

+

+					// Push value on to stack

+					if (!isShortEnded) {

+						if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1)

+							stack.push({name: value, valid: isValidElement});

+						else if (isValidElement)

+							self.end(value);

+					}

+				} else if (value = matches[1]) { // Comment

+					self.comment(value);

+				} else if (value = matches[2]) { // CDATA

+					self.cdata(value);

+				} else if (value = matches[3]) { // DOCTYPE

+					self.doctype(value);

+				} else if (value = matches[4]) { // PI

+					self.pi(value, matches[5]);

+				}

+

+				index = matches.index + matches[0].length;

+			}

+

+			// Text

+			if (index < html.length)

+				self.text(decode(html.substr(index)));

+

+			// Close any open elements

+			for (i = stack.length - 1; i >= 0; i--) {

+				value = stack[i];

+

+				if (value.valid)

+					self.end(value.name);

+			}

+		};

+	}

+})(tinymce);

+

+(function(tinymce) {

+	var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = {

+		'#text' : 3,

+		'#comment' : 8,

+		'#cdata' : 4,

+		'#pi' : 7,

+		'#doctype' : 10,

+		'#document-fragment' : 11

+	};

+

+	// Walks the tree left/right

+	function walk(node, root_node, prev) {

+		var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next';

+

+		// Walk into nodes if it has a start

+		if (node[startName])

+			return node[startName];

+

+		// Return the sibling if it has one

+		if (node !== root_node) {

+			sibling = node[siblingName];

+

+			if (sibling)

+				return sibling;

+

+			// Walk up the parents to look for siblings

+			for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) {

+				sibling = parent[siblingName];

+

+				if (sibling)

+					return sibling;

+			}

+		}

+	};

+

+	function Node(name, type) {

+		this.name = name;

+		this.type = type;

+

+		if (type === 1) {

+			this.attributes = [];

+			this.attributes.map = {};

+		}

+	}

+

+	tinymce.extend(Node.prototype, {

+		replace : function(node) {

+			var self = this;

+

+			if (node.parent)

+				node.remove();

+

+			self.insert(node, self);

+			self.remove();

+

+			return self;

+		},

+

+		attr : function(name, value) {

+			var self = this, attrs, i, undef;

+

+			if (typeof name !== "string") {

+				for (i in name)

+					self.attr(i, name[i]);

+

+				return self;

+			}

+

+			if (attrs = self.attributes) {

+				if (value !== undef) {

+					// Remove attribute

+					if (value === null) {

+						if (name in attrs.map) {

+							delete attrs.map[name];

+

+							i = attrs.length;

+							while (i--) {

+								if (attrs[i].name === name) {

+									attrs = attrs.splice(i, 1);

+									return self;

+								}

+							}

+						}

+

+						return self;

+					}

+

+					// Set attribute

+					if (name in attrs.map) {

+						// Set attribute

+						i = attrs.length;

+						while (i--) {

+							if (attrs[i].name === name) {

+								attrs[i].value = value;

+								break;

+							}

+						}

+					} else

+						attrs.push({name: name, value: value});

+

+					attrs.map[name] = value;

+

+					return self;

+				} else {

+					return attrs.map[name];

+				}

+			}

+		},

+

+		clone : function() {

+			var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs;

+

+			// Clone element attributes

+			if (selfAttrs = self.attributes) {

+				cloneAttrs = [];

+				cloneAttrs.map = {};

+

+				for (i = 0, l = selfAttrs.length; i < l; i++) {

+					selfAttr = selfAttrs[i];

+

+					// Clone everything except id

+					if (selfAttr.name !== 'id') {

+						cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value};

+						cloneAttrs.map[selfAttr.name] = selfAttr.value;

+					}

+				}

+

+				clone.attributes = cloneAttrs;

+			}

+

+			clone.value = self.value;

+			clone.shortEnded = self.shortEnded;

+

+			return clone;

+		},

+

+		wrap : function(wrapper) {

+			var self = this;

+

+			self.parent.insert(wrapper, self);

+			wrapper.append(self);

+

+			return self;

+		},

+

+		unwrap : function() {

+			var self = this, node, next;

+

+			for (node = self.firstChild; node; ) {

+				next = node.next;

+				self.insert(node, self, true);

+				node = next;

+			}

+

+			self.remove();

+		},

+

+		remove : function() {

+			var self = this, parent = self.parent, next = self.next, prev = self.prev;

+

+			if (parent) {

+				if (parent.firstChild === self) {

+					parent.firstChild = next;

+

+					if (next)

+						next.prev = null;

+				} else {

+					prev.next = next;

+				}

+

+				if (parent.lastChild === self) {

+					parent.lastChild = prev;

+

+					if (prev)

+						prev.next = null;

+				} else {

+					next.prev = prev;

+				}

+

+				self.parent = self.next = self.prev = null;

+			}

+

+			return self;

+		},

+

+		append : function(node) {

+			var self = this, last;

+

+			if (node.parent)

+				node.remove();

+

+			last = self.lastChild;

+			if (last) {

+				last.next = node;

+				node.prev = last;

+				self.lastChild = node;

+			} else

+				self.lastChild = self.firstChild = node;

+

+			node.parent = self;

+

+			return node;

+		},

+

+		insert : function(node, ref_node, before) {

+			var parent;

+

+			if (node.parent)

+				node.remove();

+

+			parent = ref_node.parent || this;

+

+			if (before) {

+				if (ref_node === parent.firstChild)

+					parent.firstChild = node;

+				else

+					ref_node.prev.next = node;

+

+				node.prev = ref_node.prev;

+				node.next = ref_node;

+				ref_node.prev = node;

+			} else {

+				if (ref_node === parent.lastChild)

+					parent.lastChild = node;

+				else

+					ref_node.next.prev = node;

+

+				node.next = ref_node.next;

+				node.prev = ref_node;

+				ref_node.next = node;

+			}

+

+			node.parent = parent;

+

+			return node;

+		},

+

+		getAll : function(name) {

+			var self = this, node, collection = [];

+

+			for (node = self.firstChild; node; node = walk(node, self)) {

+				if (node.name === name)

+					collection.push(node);

+			}

+

+			return collection;

+		},

+

+		empty : function() {

+			var self = this, nodes, i, node;

+

+			// Remove all children

+			if (self.firstChild) {

+				nodes = [];

+

+				// Collect the children

+				for (node = self.firstChild; node; node = walk(node, self))

+					nodes.push(node);

+

+				// Remove the children

+				i = nodes.length;

+				while (i--) {

+					node = nodes[i];

+					node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;

+				}

+			}

+

+			self.firstChild = self.lastChild = null;

+

+			return self;

+		},

+

+		isEmpty : function(elements) {

+			var self = this, node = self.firstChild, i, name;

+

+			if (node) {

+				do {

+					if (node.type === 1) {

+						// Ignore bogus elements

+						if (node.attributes.map['data-mce-bogus'])

+							continue;

+

+						// Keep empty elements like <img />

+						if (elements[node.name])

+							return false;

+

+						// Keep elements with data attributes or name attribute like <a name="1"></a>

+						i = node.attributes.length;

+						while (i--) {

+							name = node.attributes[i].name;

+							if (name === "name" || name.indexOf('data-') === 0)

+								return false;

+						}

+					}

+

+					// Keep non whitespace text nodes

+					if ((node.type === 3 && !whiteSpaceRegExp.test(node.value)))

+						return false;

+				} while (node = walk(node, self));

+			}

+

+			return true;

+		},

+

+		walk : function(prev) {

+			return walk(this, null, prev);

+		}

+	});

+

+	tinymce.extend(Node, {

+		create : function(name, attrs) {

+			var node, attrName;

+

+			// Create node

+			node = new Node(name, typeLookup[name] || 1);

+

+			// Add attributes if needed

+			if (attrs) {

+				for (attrName in attrs)

+					node.attr(attrName, attrs[attrName]);

+			}

+

+			return node;

+		}

+	});

+

+	tinymce.html.Node = Node;

+})(tinymce);

+

+(function(tinymce) {

+	var Node = tinymce.html.Node;

+

+	tinymce.html.DomParser = function(settings, schema) {

+		var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {};

+

+		settings = settings || {};

+		settings.validate = "validate" in settings ? settings.validate : true;

+		settings.root_name = settings.root_name || 'body';

+		self.schema = schema = schema || new tinymce.html.Schema();

+

+		function fixInvalidChildren(nodes) {

+			var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i,

+				childClone, nonEmptyElements, nonSplitableElements, sibling, nextNode;

+

+			nonSplitableElements = tinymce.makeMap('tr,td,th,tbody,thead,tfoot,table');

+			nonEmptyElements = schema.getNonEmptyElements();

+

+			for (ni = 0; ni < nodes.length; ni++) {

+				node = nodes[ni];

+

+				// Already removed

+				if (!node.parent)

+					continue;

+

+				// Get list of all parent nodes until we find a valid parent to stick the child into

+				parents = [node];

+				for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent)

+					parents.push(parent);

+

+				// Found a suitable parent

+				if (parent && parents.length > 1) {

+					// Reverse the array since it makes looping easier

+					parents.reverse();

+

+					// Clone the related parent and insert that after the moved node

+					newParent = currentNode = self.filterNode(parents[0].clone());

+

+					// Start cloning and moving children on the left side of the target node

+					for (i = 0; i < parents.length - 1; i++) {

+						if (schema.isValidChild(currentNode.name, parents[i].name)) {

+							tempNode = self.filterNode(parents[i].clone());

+							currentNode.append(tempNode);

+						} else

+							tempNode = currentNode;

+

+						for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) {

+							nextNode = childNode.next;

+							tempNode.append(childNode);

+							childNode = nextNode;

+						}

+

+						currentNode = tempNode;

+					}

+

+					if (!newParent.isEmpty(nonEmptyElements)) {

+						parent.insert(newParent, parents[0], true);

+						parent.insert(node, newParent);

+					} else {

+						parent.insert(node, parents[0], true);

+					}

+

+					// Check if the element is empty by looking through it's contents and special treatment for <p><br /></p>

+					parent = parents[0];

+					if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') {

+						parent.empty().remove();

+					}

+				} else if (node.parent) {

+					// If it's an LI try to find a UL/OL for it or wrap it

+					if (node.name === 'li') {

+						sibling = node.prev;

+						if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {

+							sibling.append(node);

+							continue;

+						}

+

+						sibling = node.next;

+						if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {

+							sibling.insert(node, sibling.firstChild, true);

+							continue;

+						}

+

+						node.wrap(self.filterNode(new Node('ul', 1)));

+						continue;

+					}

+

+					// Try wrapping the element in a DIV

+					if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {

+						node.wrap(self.filterNode(new Node('div', 1)));

+					} else {

+						// We failed wrapping it, then remove or unwrap it

+						if (node.name === 'style' || node.name === 'script')

+							node.empty().remove();

+						else

+							node.unwrap();

+					}

+				}

+			}

+		};

+

+		self.filterNode = function(node) {

+			var i, name, list;

+

+			// Run element filters

+			if (name in nodeFilters) {

+				list = matchedNodes[name];

+

+				if (list)

+					list.push(node);

+				else

+					matchedNodes[name] = [node];

+			}

+

+			// Run attribute filters

+			i = attributeFilters.length;

+			while (i--) {

+				name = attributeFilters[i].name;

+

+				if (name in node.attributes.map) {

+					list = matchedAttributes[name];

+

+					if (list)

+						list.push(node);

+					else

+						matchedAttributes[name] = [node];

+				}

+			}

+

+			return node;

+		};

+

+		self.addNodeFilter = function(name, callback) {

+			tinymce.each(tinymce.explode(name), function(name) {

+				var list = nodeFilters[name];

+

+				if (!list)

+					nodeFilters[name] = list = [];

+

+				list.push(callback);

+			});

+		};

+

+		self.addAttributeFilter = function(name, callback) {

+			tinymce.each(tinymce.explode(name), function(name) {

+				var i;

+

+				for (i = 0; i < attributeFilters.length; i++) {

+					if (attributeFilters[i].name === name) {

+						attributeFilters[i].callbacks.push(callback);

+						return;

+					}

+				}

+

+				attributeFilters.push({name: name, callbacks: [callback]});

+			});

+		};

+

+		self.parse = function(html, args) {

+			var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate,

+				blockElements, startWhiteSpaceRegExp, invalidChildren = [],

+				endWhiteSpaceRegExp, allWhiteSpaceRegExp, whiteSpaceElements, children, nonEmptyElements, rootBlockName;

+

+			args = args || {};

+			matchedNodes = {};

+			matchedAttributes = {};

+			blockElements = tinymce.extend(tinymce.makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());

+			nonEmptyElements = schema.getNonEmptyElements();

+			children = schema.children;

+			validate = settings.validate;

+			rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block;

+

+			whiteSpaceElements = schema.getWhiteSpaceElements();

+			startWhiteSpaceRegExp = /^[ \t\r\n]+/;

+			endWhiteSpaceRegExp = /[ \t\r\n]+$/;

+			allWhiteSpaceRegExp = /[ \t\r\n]+/g;

+

+			function addRootBlocks() {

+				var node = rootNode.firstChild, next, rootBlockNode;

+

+				while (node) {

+					next = node.next;

+

+					if (node.type == 3 || (node.type == 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type'))) {

+						if (!rootBlockNode) {

+							// Create a new root block element

+							rootBlockNode = createNode(rootBlockName, 1);

+							rootNode.insert(rootBlockNode, node);

+							rootBlockNode.append(node);

+						} else

+							rootBlockNode.append(node);

+					} else {

+						rootBlockNode = null;

+					}

+

+					node = next;

+				};

+			};

+

+			function createNode(name, type) {

+				var node = new Node(name, type), list;

+

+				if (name in nodeFilters) {

+					list = matchedNodes[name];

+

+					if (list)

+						list.push(node);

+					else

+						matchedNodes[name] = [node];

+				}

+

+				return node;

+			};

+

+			function removeWhitespaceBefore(node) {

+				var textNode, textVal, sibling;

+

+				for (textNode = node.prev; textNode && textNode.type === 3; ) {

+					textVal = textNode.value.replace(endWhiteSpaceRegExp, '');

+

+					if (textVal.length > 0) {

+						textNode.value = textVal;

+						textNode = textNode.prev;

+					} else {

+						sibling = textNode.prev;

+						textNode.remove();

+						textNode = sibling;

+					}

+				}

+			};

+

+			parser = new tinymce.html.SaxParser({

+				validate : validate,

+				fix_self_closing : !validate, // Let the DOM parser handle <li> in <li> or <p> in <p> for better results

+

+				cdata: function(text) {

+					node.append(createNode('#cdata', 4)).value = text;

+				},

+

+				text: function(text, raw) {

+					var textNode;

+

+					// Trim all redundant whitespace on non white space elements

+					if (!whiteSpaceElements[node.name]) {

+						text = text.replace(allWhiteSpaceRegExp, ' ');

+

+						if (node.lastChild && blockElements[node.lastChild.name])

+							text = text.replace(startWhiteSpaceRegExp, '');

+					}

+

+					// Do we need to create the node

+					if (text.length !== 0) {

+						textNode = createNode('#text', 3);

+						textNode.raw = !!raw;

+						node.append(textNode).value = text;

+					}

+				},

+

+				comment: function(text) {

+					node.append(createNode('#comment', 8)).value = text;

+				},

+

+				pi: function(name, text) {

+					node.append(createNode(name, 7)).value = text;

+					removeWhitespaceBefore(node);

+				},

+

+				doctype: function(text) {

+					var newNode;

+		

+					newNode = node.append(createNode('#doctype', 10));

+					newNode.value = text;

+					removeWhitespaceBefore(node);

+				},

+

+				start: function(name, attrs, empty) {

+					var newNode, attrFiltersLen, elementRule, textNode, attrName, text, sibling, parent;

+

+					elementRule = validate ? schema.getElementRule(name) : {};

+					if (elementRule) {

+						newNode = createNode(elementRule.outputName || name, 1);

+						newNode.attributes = attrs;

+						newNode.shortEnded = empty;

+

+						node.append(newNode);

+

+						// Check if node is valid child of the parent node is the child is

+						// unknown we don't collect it since it's probably a custom element

+						parent = children[node.name];

+						if (parent && children[newNode.name] && !parent[newNode.name])

+							invalidChildren.push(newNode);

+

+						attrFiltersLen = attributeFilters.length;

+						while (attrFiltersLen--) {

+							attrName = attributeFilters[attrFiltersLen].name;

+

+							if (attrName in attrs.map) {

+								list = matchedAttributes[attrName];

+

+								if (list)

+									list.push(newNode);

+								else

+									matchedAttributes[attrName] = [newNode];

+							}

+						}

+

+						// Trim whitespace before block

+						if (blockElements[name])

+							removeWhitespaceBefore(newNode);

+

+						// Change current node if the element wasn't empty i.e not <br /> or <img />

+						if (!empty)

+							node = newNode;

+					}

+				},

+

+				end: function(name) {

+					var textNode, elementRule, text, sibling, tempNode;

+

+					elementRule = validate ? schema.getElementRule(name) : {};

+					if (elementRule) {

+						if (blockElements[name]) {

+							if (!whiteSpaceElements[node.name]) {

+								// Trim whitespace at beginning of block

+								for (textNode = node.firstChild; textNode && textNode.type === 3; ) {

+									text = textNode.value.replace(startWhiteSpaceRegExp, '');

+

+									if (text.length > 0) {

+										textNode.value = text;

+										textNode = textNode.next;

+									} else {

+										sibling = textNode.next;

+										textNode.remove();

+										textNode = sibling;

+									}

+								}

+

+								// Trim whitespace at end of block

+								for (textNode = node.lastChild; textNode && textNode.type === 3; ) {

+									text = textNode.value.replace(endWhiteSpaceRegExp, '');

+

+									if (text.length > 0) {

+										textNode.value = text;

+										textNode = textNode.prev;

+									} else {

+										sibling = textNode.prev;

+										textNode.remove();

+										textNode = sibling;

+									}

+								}

+							}

+

+							// Trim start white space

+							textNode = node.prev;

+							if (textNode && textNode.type === 3) {

+								text = textNode.value.replace(startWhiteSpaceRegExp, '');

+

+								if (text.length > 0)

+									textNode.value = text;

+								else

+									textNode.remove();

+							}

+						}

+

+						// Handle empty nodes

+						if (elementRule.removeEmpty || elementRule.paddEmpty) {

+							if (node.isEmpty(nonEmptyElements)) {

+								if (elementRule.paddEmpty)

+									node.empty().append(new Node('#text', '3')).value = '\u00a0';

+								else {

+									// Leave nodes that have a name like <a name="name">

+									if (!node.attributes.map.name) {

+										tempNode = node.parent;

+										node.empty().remove();

+										node = tempNode;

+										return;

+									}

+								}

+							}

+						}

+

+						node = node.parent;

+					}

+				}

+			}, schema);

+

+			rootNode = node = new Node(args.context || settings.root_name, 11);

+

+			parser.parse(html);

+

+			// Fix invalid children or report invalid children in a contextual parsing

+			if (validate && invalidChildren.length) {

+				if (!args.context)

+					fixInvalidChildren(invalidChildren);

+				else

+					args.invalid = true;

+			}

+

+			// Wrap nodes in the root into block elements if the root is body

+			if (rootBlockName && rootNode.name == 'body')

+				addRootBlocks();

+

+			// Run filters only when the contents is valid

+			if (!args.invalid) {

+				// Run node filters

+				for (name in matchedNodes) {

+					list = nodeFilters[name];

+					nodes = matchedNodes[name];

+

+					// Remove already removed children

+					fi = nodes.length;

+					while (fi--) {

+						if (!nodes[fi].parent)

+							nodes.splice(fi, 1);

+					}

+

+					for (i = 0, l = list.length; i < l; i++)

+						list[i](nodes, name, args);

+				}

+

+				// Run attribute filters

+				for (i = 0, l = attributeFilters.length; i < l; i++) {

+					list = attributeFilters[i];

+

+					if (list.name in matchedAttributes) {

+						nodes = matchedAttributes[list.name];

+

+						// Remove already removed children

+						fi = nodes.length;

+						while (fi--) {

+							if (!nodes[fi].parent)

+								nodes.splice(fi, 1);

+						}

+

+						for (fi = 0, fl = list.callbacks.length; fi < fl; fi++)

+							list.callbacks[fi](nodes, list.name, args);

+					}

+				}

+			}

+

+			return rootNode;

+		};

+

+		// Remove <br> at end of block elements Gecko and WebKit injects BR elements to

+		// make it possible to place the caret inside empty blocks. This logic tries to remove

+		// these elements and keep br elements that where intended to be there intact

+		if (settings.remove_trailing_brs) {

+			self.addNodeFilter('br', function(nodes, name) {

+				var i, l = nodes.length, node, blockElements = schema.getBlockElements(),

+					nonEmptyElements = schema.getNonEmptyElements(), parent, prev, prevName;

+

+				// Remove brs from body element as well

+				blockElements.body = 1;

+

+				// Must loop forwards since it will otherwise remove all brs in <p>a<br><br><br></p>

+				for (i = 0; i < l; i++) {

+					node = nodes[i];

+					parent = node.parent;

+

+					if (blockElements[node.parent.name] && node === parent.lastChild) {

+						// Loop all nodes to the right of the current node and check for other BR elements

+						// excluding bookmarks since they are invisible

+						prev = node.prev;

+						while (prev) {

+							prevName = prev.name;

+

+							// Ignore bookmarks

+							if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') {

+								// Found a non BR element

+								if (prevName !== "br")

+									break;

+	

+								// Found another br it's a <br><br> structure then don't remove anything

+								if (prevName === 'br') {

+									node = null;

+									break;

+								}

+							}

+

+							prev = prev.prev;

+						}

+

+						if (node) {

+							node.remove();

+

+							// Is the parent to be considered empty after we removed the BR

+							if (parent.isEmpty(nonEmptyElements)) {

+								elementRule = schema.getElementRule(parent.name);

+

+								// Remove or padd the element depending on schema rule

+								if (elementRule) {

+								  if (elementRule.removeEmpty)

+									  parent.remove();

+								  else if (elementRule.paddEmpty)

+									  parent.empty().append(new tinymce.html.Node('#text', 3)).value = '\u00a0';

+							  }

+              }

+						}

+					}

+				}

+			});

+		}

+	}

+})(tinymce);

+

+tinymce.html.Writer = function(settings) {

+	var html = [], indent, indentBefore, indentAfter, encode, htmlOutput;

+

+	settings = settings || {};

+	indent = settings.indent;

+	indentBefore = tinymce.makeMap(settings.indent_before || '');

+	indentAfter = tinymce.makeMap(settings.indent_after || '');

+	encode = tinymce.html.Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);

+	htmlOutput = settings.element_format == "html";

+

+	return {

+		start: function(name, attrs, empty) {

+			var i, l, attr, value;

+

+			if (indent && indentBefore[name] && html.length > 0) {

+				value = html[html.length - 1];

+

+				if (value.length > 0 && value !== '\n')

+					html.push('\n');

+			}

+

+			html.push('<', name);

+

+			if (attrs) {

+				for (i = 0, l = attrs.length; i < l; i++) {

+					attr = attrs[i];

+					html.push(' ', attr.name, '="', encode(attr.value, true), '"');

+				}

+			}

+

+			if (!empty || htmlOutput)

+				html[html.length] = '>';

+			else

+				html[html.length] = ' />';

+

+			if (empty && indent && indentAfter[name] && html.length > 0) {

+				value = html[html.length - 1];

+

+				if (value.length > 0 && value !== '\n')

+					html.push('\n');

+			}

+		},

+

+		end: function(name) {

+			var value;

+

+			/*if (indent && indentBefore[name] && html.length > 0) {

+				value = html[html.length - 1];

+

+				if (value.length > 0 && value !== '\n')

+					html.push('\n');

+			}*/

+

+			html.push('</', name, '>');

+

+			if (indent && indentAfter[name] && html.length > 0) {

+				value = html[html.length - 1];

+

+				if (value.length > 0 && value !== '\n')

+					html.push('\n');

+			}

+		},

+

+		text: function(text, raw) {

+			if (text.length > 0)

+				html[html.length] = raw ? text : encode(text);

+		},

+

+		cdata: function(text) {

+			html.push('<![CDATA[', text, ']]>');

+		},

+

+		comment: function(text) {

+			html.push('<!--', text, '-->');

+		},

+

+		pi: function(name, text) {

+			if (text)

+				html.push('<?', name, ' ', text, '?>');

+			else

+				html.push('<?', name, '?>');

+

+			if (indent)

+				html.push('\n');

+		},

+

+		doctype: function(text) {

+			html.push('<!DOCTYPE', text, '>', indent ? '\n' : '');

+		},

+

+		reset: function() {

+			html.length = 0;

+		},

+

+		getContent: function() {

+			return html.join('').replace(/\n$/, '');

+		}

+	};

+};

+

+(function(tinymce) {

+	tinymce.html.Serializer = function(settings, schema) {

+		var self = this, writer = new tinymce.html.Writer(settings);

+

+		settings = settings || {};

+		settings.validate = "validate" in settings ? settings.validate : true;

+

+		self.schema = schema = schema || new tinymce.html.Schema();

+		self.writer = writer;

+

+		self.serialize = function(node) {

+			var handlers, validate;

+

+			validate = settings.validate;

+

+			handlers = {

+				// #text

+				3: function(node, raw) {

+					writer.text(node.value, node.raw);

+				},

+

+				// #comment

+				8: function(node) {

+					writer.comment(node.value);

+				},

+

+				// Processing instruction

+				7: function(node) {

+					writer.pi(node.name, node.value);

+				},

+

+				// Doctype

+				10: function(node) {

+					writer.doctype(node.value);

+				},

+

+				// CDATA

+				4: function(node) {

+					writer.cdata(node.value);

+				},

+

+ 				// Document fragment

+				11: function(node) {

+					if ((node = node.firstChild)) {

+						do {

+							walk(node);

+						} while (node = node.next);

+					}

+				}

+			};

+

+			writer.reset();

+

+			function walk(node) {

+				var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;

+

+				if (!handler) {

+					name = node.name;

+					isEmpty = node.shortEnded;

+					attrs = node.attributes;

+

+					// Sort attributes

+					if (validate && attrs && attrs.length > 1) {

+						sortedAttrs = [];

+						sortedAttrs.map = {};

+

+						elementRule = schema.getElementRule(node.name);

+						for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {

+							attrName = elementRule.attributesOrder[i];

+

+							if (attrName in attrs.map) {

+								attrValue = attrs.map[attrName];

+								sortedAttrs.map[attrName] = attrValue;

+								sortedAttrs.push({name: attrName, value: attrValue});

+							}

+						}

+

+						for (i = 0, l = attrs.length; i < l; i++) {

+							attrName = attrs[i].name;

+

+							if (!(attrName in sortedAttrs.map)) {

+								attrValue = attrs.map[attrName];

+								sortedAttrs.map[attrName] = attrValue;

+								sortedAttrs.push({name: attrName, value: attrValue});

+							}

+						}

+

+						attrs = sortedAttrs;

+					}

+

+					writer.start(node.name, attrs, isEmpty);

+

+					if (!isEmpty) {

+						if ((node = node.firstChild)) {

+							do {

+								walk(node);

+							} while (node = node.next);

+						}

+

+						writer.end(name);

+					}

+				} else

+					handler(node);

+			}

+

+			// Serialize element and treat all non elements as fragments

+			if (node.type == 1 && !settings.inner)

+				walk(node);

+			else

+				handlers[11](node);

+

+			return writer.getContent();

+		};

+	}

+})(tinymce);

+

+(function(tinymce) {

+	// Shorten names

+	var each = tinymce.each,

+		is = tinymce.is,

+		isWebKit = tinymce.isWebKit,

+		isIE = tinymce.isIE,

+		Entities = tinymce.html.Entities,

+		simpleSelectorRe = /^([a-z0-9],?)+$/i,

+		blockElementsMap = tinymce.html.Schema.blockElementsMap,

+		whiteSpaceRegExp = /^[ \t\r\n]*$/;

+

+	tinymce.create('tinymce.dom.DOMUtils', {

+		doc : null,

+		root : null,

+		files : null,

+		pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/,

+		props : {

+			"for" : "htmlFor",

+			"class" : "className",

+			className : "className",

+			checked : "checked",

+			disabled : "disabled",

+			maxlength : "maxLength",

+			readonly : "readOnly",

+			selected : "selected",

+			value : "value",

+			id : "id",

+			name : "name",

+			type : "type"

+		},

+

+		DOMUtils : function(d, s) {

+			var t = this, globalStyle, name;

+

+			t.doc = d;

+			t.win = window;

+			t.files = {};

+			t.cssFlicker = false;

+			t.counter = 0;

+			t.stdMode = !tinymce.isIE || d.documentMode >= 8;

+			t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat" || t.stdMode;

+			t.hasOuterHTML = "outerHTML" in d.createElement("a");

+

+			t.settings = s = tinymce.extend({

+				keep_values : false,

+				hex_colors : 1

+			}, s);

+			

+			t.schema = s.schema;

+			t.styles = new tinymce.html.Styles({

+				url_converter : s.url_converter,

+				url_converter_scope : s.url_converter_scope

+			}, s.schema);

+

+			// Fix IE6SP2 flicker and check it failed for pre SP2

+			if (tinymce.isIE6) {

+				try {

+					d.execCommand('BackgroundImageCache', false, true);

+				} catch (e) {

+					t.cssFlicker = true;

+				}

+			}

+

+			if (isIE && s.schema) {

+				// Add missing HTML 4/5 elements to IE

+				('abbr article aside audio canvas ' +

+				'details figcaption figure footer ' +

+				'header hgroup mark menu meter nav ' +

+				'output progress section summary ' +

+				'time video').replace(/\w+/g, function(name) {

+					d.createElement(name);

+				});

+

+				// Create all custom elements

+				for (name in s.schema.getCustomElements()) {

+					d.createElement(name);

+				}

+			}

+

+			tinymce.addUnload(t.destroy, t);

+		},

+

+		getRoot : function() {

+			var t = this, s = t.settings;

+

+			return (s && t.get(s.root_element)) || t.doc.body;

+		},

+

+		getViewPort : function(w) {

+			var d, b;

+

+			w = !w ? this.win : w;

+			d = w.document;

+			b = this.boxModel ? d.documentElement : d.body;

+

+			// Returns viewport size excluding scrollbars

+			return {

+				x : w.pageXOffset || b.scrollLeft,

+				y : w.pageYOffset || b.scrollTop,

+				w : w.innerWidth || b.clientWidth,

+				h : w.innerHeight || b.clientHeight

+			};

+		},

+

+		getRect : function(e) {

+			var p, t = this, sr;

+

+			e = t.get(e);

+			p = t.getPos(e);

+			sr = t.getSize(e);

+

+			return {

+				x : p.x,

+				y : p.y,

+				w : sr.w,

+				h : sr.h

+			};

+		},

+

+		getSize : function(e) {

+			var t = this, w, h;

+

+			e = t.get(e);

+			w = t.getStyle(e, 'width');

+			h = t.getStyle(e, 'height');

+

+			// Non pixel value, then force offset/clientWidth

+			if (w.indexOf('px') === -1)

+				w = 0;

+

+			// Non pixel value, then force offset/clientWidth

+			if (h.indexOf('px') === -1)

+				h = 0;

+

+			return {

+				w : parseInt(w) || e.offsetWidth || e.clientWidth,

+				h : parseInt(h) || e.offsetHeight || e.clientHeight

+			};

+		},

+

+		getParent : function(n, f, r) {

+			return this.getParents(n, f, r, false);

+		},

+

+		getParents : function(n, f, r, c) {

+			var t = this, na, se = t.settings, o = [];

+

+			n = t.get(n);

+			c = c === undefined;

+

+			if (se.strict_root)

+				r = r || t.getRoot();

+

+			// Wrap node name as func

+			if (is(f, 'string')) {

+				na = f;

+

+				if (f === '*') {

+					f = function(n) {return n.nodeType == 1;};

+				} else {

+					f = function(n) {

+						return t.is(n, na);

+					};

+				}

+			}

+

+			while (n) {

+				if (n == r || !n.nodeType || n.nodeType === 9)

+					break;

+

+				if (!f || f(n)) {

+					if (c)

+						o.push(n);

+					else

+						return n;

+				}

+

+				n = n.parentNode;

+			}

+

+			return c ? o : null;

+		},

+

+		get : function(e) {

+			var n;

+

+			if (e && this.doc && typeof(e) == 'string') {

+				n = e;

+				e = this.doc.getElementById(e);

+

+				// IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick

+				if (e && e.id !== n)

+					return this.doc.getElementsByName(n)[1];

+			}

+

+			return e;

+		},

+

+		getNext : function(node, selector) {

+			return this._findSib(node, selector, 'nextSibling');

+		},

+

+		getPrev : function(node, selector) {

+			return this._findSib(node, selector, 'previousSibling');

+		},

+

+

+		select : function(pa, s) {

+			var t = this;

+

+			return tinymce.dom.Sizzle(pa, t.get(s) || t.get(t.settings.root_element) || t.doc, []);

+		},

+

+		is : function(n, selector) {

+			var i;

+

+			// If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance

+			if (n.length === undefined) {

+				// Simple all selector

+				if (selector === '*')

+					return n.nodeType == 1;

+

+				// Simple selector just elements

+				if (simpleSelectorRe.test(selector)) {

+					selector = selector.toLowerCase().split(/,/);

+					n = n.nodeName.toLowerCase();

+

+					for (i = selector.length - 1; i >= 0; i--) {

+						if (selector[i] == n)

+							return true;

+					}

+

+					return false;

+				}

+			}

+

+			return tinymce.dom.Sizzle.matches(selector, n.nodeType ? [n] : n).length > 0;

+		},

+

+

+		add : function(p, n, a, h, c) {

+			var t = this;

+

+			return this.run(p, function(p) {

+				var e, k;

+

+				e = is(n, 'string') ? t.doc.createElement(n) : n;

+				t.setAttribs(e, a);

+

+				if (h) {

+					if (h.nodeType)

+						e.appendChild(h);

+					else

+						t.setHTML(e, h);

+				}

+

+				return !c ? p.appendChild(e) : e;

+			});

+		},

+

+		create : function(n, a, h) {

+			return this.add(this.doc.createElement(n), n, a, h, 1);

+		},

+

+		createHTML : function(n, a, h) {

+			var o = '', t = this, k;

+

+			o += '<' + n;

+

+			for (k in a) {

+				if (a.hasOwnProperty(k))

+					o += ' ' + k + '="' + t.encode(a[k]) + '"';

+			}

+

+			// A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime

+			if (typeof(h) != "undefined")

+				return o + '>' + h + '</' + n + '>';

+

+			return o + ' />';

+		},

+

+		remove : function(node, keep_children) {

+			return this.run(node, function(node) {

+				var child, parent = node.parentNode;

+

+				if (!parent)

+					return null;

+

+				if (keep_children) {

+					while (child = node.firstChild) {

+						// IE 8 will crash if you don't remove completely empty text nodes

+						if (!tinymce.isIE || child.nodeType !== 3 || child.nodeValue)

+							parent.insertBefore(child, node);

+						else

+							node.removeChild(child);

+					}

+				}

+

+				return parent.removeChild(node);

+			});

+		},

+

+		setStyle : function(n, na, v) {

+			var t = this;

+

+			return t.run(n, function(e) {

+				var s, i;

+

+				s = e.style;

+

+				// Camelcase it, if needed

+				na = na.replace(/-(\D)/g, function(a, b){

+					return b.toUpperCase();

+				});

+

+				// Default px suffix on these

+				if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v)))

+					v += 'px';

+

+				switch (na) {

+					case 'opacity':

+						// IE specific opacity

+						if (isIE) {

+							s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";

+

+							if (!n.currentStyle || !n.currentStyle.hasLayout)

+								s.display = 'inline-block';

+						}

+

+						// Fix for older browsers

+						s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || '';

+						break;

+

+					case 'float':

+						isIE ? s.styleFloat = v : s.cssFloat = v;

+						break;

+					

+					default:

+						s[na] = v || '';

+				}

+

+				// Force update of the style data

+				if (t.settings.update_styles)

+					t.setAttrib(e, 'data-mce-style');

+			});

+		},

+

+		getStyle : function(n, na, c) {

+			n = this.get(n);

+

+			if (!n)

+				return;

+

+			// Gecko

+			if (this.doc.defaultView && c) {

+				// Remove camelcase

+				na = na.replace(/[A-Z]/g, function(a){

+					return '-' + a;

+				});

+

+				try {

+					return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na);

+				} catch (ex) {

+					// Old safari might fail

+					return null;

+				}

+			}

+

+			// Camelcase it, if needed

+			na = na.replace(/-(\D)/g, function(a, b){

+				return b.toUpperCase();

+			});

+

+			if (na == 'float')

+				na = isIE ? 'styleFloat' : 'cssFloat';

+

+			// IE & Opera

+			if (n.currentStyle && c)

+				return n.currentStyle[na];

+

+			return n.style ? n.style[na] : undefined;

+		},

+

+		setStyles : function(e, o) {

+			var t = this, s = t.settings, ol;

+

+			ol = s.update_styles;

+			s.update_styles = 0;

+

+			each(o, function(v, n) {

+				t.setStyle(e, n, v);

+			});

+

+			// Update style info

+			s.update_styles = ol;

+			if (s.update_styles)

+				t.setAttrib(e, s.cssText);

+		},

+

+		removeAllAttribs: function(e) {

+			return this.run(e, function(e) {

+				var i, attrs = e.attributes;

+				for (i = attrs.length - 1; i >= 0; i--) {

+					e.removeAttributeNode(attrs.item(i));

+				}

+			});

+		},

+

+		setAttrib : function(e, n, v) {

+			var t = this;

+

+			// Whats the point

+			if (!e || !n)

+				return;

+

+			// Strict XML mode

+			if (t.settings.strict)

+				n = n.toLowerCase();

+

+			return this.run(e, function(e) {

+				var s = t.settings;

+				var originalValue = e.getAttribute(n);

+				if (v !== null) {

+					switch (n) {

+						case "style":

+							if (!is(v, 'string')) {

+								each(v, function(v, n) {

+									t.setStyle(e, n, v);

+								});

+

+								return;

+							}

+

+							// No mce_style for elements with these since they might get resized by the user

+							if (s.keep_values) {

+								if (v && !t._isRes(v))

+									e.setAttribute('data-mce-style', v, 2);

+								else

+									e.removeAttribute('data-mce-style', 2);

+							}

+

+							e.style.cssText = v;

+							break;

+

+						case "class":

+							e.className = v || ''; // Fix IE null bug

+							break;

+

+						case "src":

+						case "href":

+							if (s.keep_values) {

+								if (s.url_converter)

+									v = s.url_converter.call(s.url_converter_scope || t, v, n, e);

+

+								t.setAttrib(e, 'data-mce-' + n, v, 2);

+							}

+

+							break;

+

+						case "shape":

+							e.setAttribute('data-mce-style', v);

+							break;

+					}

+				}

+				if (is(v) && v !== null && v.length !== 0)

+					e.setAttribute(n, '' + v, 2);

+				else

+					e.removeAttribute(n, 2);

+

+				// fire onChangeAttrib event for attributes that have changed

+				if (tinyMCE.activeEditor && originalValue != v) {

+					var ed = tinyMCE.activeEditor;

+					ed.onSetAttrib.dispatch(ed, e, n, v);

+				}

+			});

+		},

+

+		setAttribs : function(e, o) {

+			var t = this;

+

+			return this.run(e, function(e) {

+				each(o, function(v, n) {

+					t.setAttrib(e, n, v);

+				});

+			});

+		},

+

+		getAttrib : function(e, n, dv) {

+			var v, t = this, undef;

+

+			e = t.get(e);

+

+			if (!e || e.nodeType !== 1)

+				return dv === undef ? false : dv;

+

+			if (!is(dv))

+				dv = '';

+

+			// Try the mce variant for these

+			if (/^(src|href|style|coords|shape)$/.test(n)) {

+				v = e.getAttribute("data-mce-" + n);

+

+				if (v)

+					return v;

+			}

+

+			if (isIE && t.props[n]) {

+				v = e[t.props[n]];

+				v = v && v.nodeValue ? v.nodeValue : v;

+			}

+

+			if (!v)

+				v = e.getAttribute(n, 2);

+

+			// Check boolean attribs

+			if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(n)) {

+				if (e[t.props[n]] === true && v === '')

+					return n;

+

+				return v ? n : '';

+			}

+

+			// Inner input elements will override attributes on form elements

+			if (e.nodeName === "FORM" && e.getAttributeNode(n))

+				return e.getAttributeNode(n).nodeValue;

+

+			if (n === 'style') {

+				v = v || e.style.cssText;

+

+				if (v) {

+					v = t.serializeStyle(t.parseStyle(v), e.nodeName);

+

+					if (t.settings.keep_values && !t._isRes(v))

+						e.setAttribute('data-mce-style', v);

+				}

+			}

+

+			// Remove Apple and WebKit stuff

+			if (isWebKit && n === "class" && v)

+				v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, '');

+

+			// Handle IE issues

+			if (isIE) {

+				switch (n) {

+					case 'rowspan':

+					case 'colspan':

+						// IE returns 1 as default value

+						if (v === 1)

+							v = '';

+

+						break;

+

+					case 'size':

+						// IE returns +0 as default value for size

+						if (v === '+0' || v === 20 || v === 0)

+							v = '';

+

+						break;

+

+					case 'width':

+					case 'height':

+					case 'vspace':

+					case 'checked':

+					case 'disabled':

+					case 'readonly':

+						if (v === 0)

+							v = '';

+

+						break;

+

+					case 'hspace':

+						// IE returns -1 as default value

+						if (v === -1)

+							v = '';

+

+						break;

+

+					case 'maxlength':

+					case 'tabindex':

+						// IE returns default value

+						if (v === 32768 || v === 2147483647 || v === '32768')

+							v = '';

+

+						break;

+

+					case 'multiple':

+					case 'compact':

+					case 'noshade':

+					case 'nowrap':

+						if (v === 65535)

+							return n;

+

+						return dv;

+

+					case 'shape':

+						v = v.toLowerCase();

+						break;

+

+					default:

+						// IE has odd anonymous function for event attributes

+						if (n.indexOf('on') === 0 && v)

+							v = tinymce._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1', '' + v);

+				}

+			}

+

+			return (v !== undef && v !== null && v !== '') ? '' + v : dv;

+		},

+

+		getPos : function(n, ro) {

+			var t = this, x = 0, y = 0, e, d = t.doc, r;

+

+			n = t.get(n);

+			ro = ro || d.body;

+

+			if (n) {

+				// Use getBoundingClientRect if it exists since it's faster than looping offset nodes

+				if (n.getBoundingClientRect) {

+					n = n.getBoundingClientRect();

+					e = t.boxModel ? d.documentElement : d.body;

+

+					// Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit

+					// Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position

+					x = n.left + (d.documentElement.scrollLeft || d.body.scrollLeft) - e.clientTop;

+					y = n.top + (d.documentElement.scrollTop || d.body.scrollTop) - e.clientLeft;

+

+					return {x : x, y : y};

+				}

+

+				r = n;

+				while (r && r != ro && r.nodeType) {

+					x += r.offsetLeft || 0;

+					y += r.offsetTop || 0;

+					r = r.offsetParent;

+				}

+

+				r = n.parentNode;

+				while (r && r != ro && r.nodeType) {

+					x -= r.scrollLeft || 0;

+					y -= r.scrollTop || 0;

+					r = r.parentNode;

+				}

+			}

+

+			return {x : x, y : y};

+		},

+

+		parseStyle : function(st) {

+			return this.styles.parse(st);

+		},

+

+		serializeStyle : function(o, name) {

+			return this.styles.serialize(o, name);

+		},

+

+		loadCSS : function(u) {

+			var t = this, d = t.doc, head;

+

+			if (!u)

+				u = '';

+

+			head = t.select('head')[0];

+

+			each(u.split(','), function(u) {

+				var link;

+

+				if (t.files[u])

+					return;

+

+				t.files[u] = true;

+				link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)});

+

+				// IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug

+				// This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading

+				// It's ugly but it seems to work fine.

+				if (isIE && d.documentMode && d.recalc) {

+					link.onload = function() {

+						if (d.recalc)

+							d.recalc();

+

+						link.onload = null;

+					};

+				}

+

+				head.appendChild(link);

+			});

+		},

+

+		addClass : function(e, c) {

+			return this.run(e, function(e) {

+				var o;

+

+				if (!c)

+					return 0;

+

+				if (this.hasClass(e, c))

+					return e.className;

+

+				o = this.removeClass(e, c);

+

+				return e.className = (o != '' ? (o + ' ') : '') + c;

+			});

+		},

+

+		removeClass : function(e, c) {

+			var t = this, re;

+

+			return t.run(e, function(e) {

+				var v;

+

+				if (t.hasClass(e, c)) {

+					if (!re)

+						re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");

+

+					v = e.className.replace(re, ' ');

+					v = tinymce.trim(v != ' ' ? v : '');

+

+					e.className = v;

+

+					// Empty class attr

+					if (!v) {

+						e.removeAttribute('class');

+						e.removeAttribute('className');

+					}

+

+					return v;

+				}

+

+				return e.className;

+			});

+		},

+

+		hasClass : function(n, c) {

+			n = this.get(n);

+

+			if (!n || !c)

+				return false;

+

+			return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1;

+		},

+

+		show : function(e) {

+			return this.setStyle(e, 'display', 'block');

+		},

+

+		hide : function(e) {

+			return this.setStyle(e, 'display', 'none');

+		},

+

+		isHidden : function(e) {

+			e = this.get(e);

+

+			return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none';

+		},

+

+		uniqueId : function(p) {

+			return (!p ? 'mce_' : p) + (this.counter++);

+		},

+

+		setHTML : function(element, html) {

+			var self = this;

+

+			return self.run(element, function(element) {

+				if (isIE) {

+					// Remove all child nodes, IE keeps empty text nodes in DOM

+					while (element.firstChild)

+						element.removeChild(element.firstChild);

+

+					try {

+						// IE will remove comments from the beginning

+						// unless you padd the contents with something

+						element.innerHTML = '<br />' + html;

+						element.removeChild(element.firstChild);

+					} catch (ex) {

+						// IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p

+						// This seems to fix this problem

+

+						// Create new div with HTML contents and a BR infront to keep comments

+						element = self.create('div');

+						element.innerHTML = '<br />' + html;

+

+						// Add all children from div to target

+						each (element.childNodes, function(node, i) {

+							// Skip br element

+							if (i)

+								element.appendChild(node);

+						});

+					}

+				} else

+					element.innerHTML = html;

+

+				return html;

+			});

+		},

+

+		getOuterHTML : function(elm) {

+			var doc, self = this;

+

+			elm = self.get(elm);

+

+			if (!elm)

+				return null;

+

+			if (elm.nodeType === 1 && self.hasOuterHTML)

+				return elm.outerHTML;

+

+			doc = (elm.ownerDocument || self.doc).createElement("body");

+			doc.appendChild(elm.cloneNode(true));

+

+			return doc.innerHTML;

+		},

+

+		setOuterHTML : function(e, h, d) {

+			var t = this;

+

+			function setHTML(e, h, d) {

+				var n, tp;

+

+				tp = d.createElement("body");

+				tp.innerHTML = h;

+

+				n = tp.lastChild;

+				while (n) {

+					t.insertAfter(n.cloneNode(true), e);

+					n = n.previousSibling;

+				}

+

+				t.remove(e);

+			};

+

+			return this.run(e, function(e) {

+				e = t.get(e);

+

+				// Only set HTML on elements

+				if (e.nodeType == 1) {

+					d = d || e.ownerDocument || t.doc;

+

+					if (isIE) {

+						try {

+							// Try outerHTML for IE it sometimes produces an unknown runtime error

+							if (isIE && e.nodeType == 1)

+								e.outerHTML = h;

+							else

+								setHTML(e, h, d);

+						} catch (ex) {

+							// Fix for unknown runtime error

+							setHTML(e, h, d);

+						}

+					} else

+						setHTML(e, h, d);

+				}

+			});

+		},

+

+		decode : Entities.decode,

+

+		encode : Entities.encodeAllRaw,

+

+		insertAfter : function(node, reference_node) {

+			reference_node = this.get(reference_node);

+

+			return this.run(node, function(node) {

+				var parent, nextSibling;

+

+				parent = reference_node.parentNode;

+				nextSibling = reference_node.nextSibling;

+

+				if (nextSibling)

+					parent.insertBefore(node, nextSibling);

+				else

+					parent.appendChild(node);

+

+				return node;

+			});

+		},

+

+		isBlock : function(node) {

+			var type = node.nodeType;

+

+			// If it's a node then check the type and use the nodeName

+			if (type)

+				return !!(type === 1 && blockElementsMap[node.nodeName]);

+

+			return !!blockElementsMap[node];

+		},

+

+		replace : function(n, o, k) {

+			var t = this;

+

+			if (is(o, 'array'))

+				n = n.cloneNode(true);

+

+			return t.run(o, function(o) {

+				if (k) {

+					each(tinymce.grep(o.childNodes), function(c) {

+						n.appendChild(c);

+					});

+				}

+

+				return o.parentNode.replaceChild(n, o);

+			});

+		},

+

+		rename : function(elm, name) {

+			var t = this, newElm;

+

+			if (elm.nodeName != name.toUpperCase()) {

+				// Rename block element

+				newElm = t.create(name);

+

+				// Copy attribs to new block

+				each(t.getAttribs(elm), function(attr_node) {

+					t.setAttrib(newElm, attr_node.nodeName, t.getAttrib(elm, attr_node.nodeName));

+				});

+

+				// Replace block

+				t.replace(newElm, elm, 1);

+			}

+

+			return newElm || elm;

+		},

+

+		findCommonAncestor : function(a, b) {

+			var ps = a, pe;

+

+			while (ps) {

+				pe = b;

+

+				while (pe && ps != pe)

+					pe = pe.parentNode;

+

+				if (ps == pe)

+					break;

+

+				ps = ps.parentNode;

+			}

+

+			if (!ps && a.ownerDocument)

+				return a.ownerDocument.documentElement;

+

+			return ps;

+		},

+

+		toHex : function(s) {

+			var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);

+

+			function hex(s) {

+				s = parseInt(s).toString(16);

+

+				return s.length > 1 ? s : '0' + s; // 0 -> 00

+			};

+

+			if (c) {

+				s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]);

+

+				return s;

+			}

+

+			return s;

+		},

+

+		getClasses : function() {

+			var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov;

+

+			if (t.classes)

+				return t.classes;

+

+			function addClasses(s) {

+				// IE style imports

+				each(s.imports, function(r) {

+					addClasses(r);

+				});

+

+				each(s.cssRules || s.rules, function(r) {

+					// Real type or fake it on IE

+					switch (r.type || 1) {

+						// Rule

+						case 1:

+							if (r.selectorText) {

+								each(r.selectorText.split(','), function(v) {

+									v = v.replace(/^\s*|\s*$|^\s\./g, "");

+

+									// Is internal or it doesn't contain a class

+									if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v))

+										return;

+

+									// Remove everything but class name

+									ov = v;

+									v = tinymce._replace(/.*\.([a-z0-9_\-]+).*/i, '$1', v);

+

+									// Filter classes

+									if (f && !(v = f(v, ov)))

+										return;

+

+									if (!lo[v]) {

+										cl.push({'class' : v});

+										lo[v] = 1;

+									}

+								});

+							}

+							break;

+

+						// Import

+						case 3:

+							addClasses(r.styleSheet);

+							break;

+					}

+				});

+			};

+

+			try {

+				each(t.doc.styleSheets, addClasses);

+			} catch (ex) {

+				// Ignore

+			}

+

+			if (cl.length > 0)

+				t.classes = cl;

+

+			return cl;

+		},

+

+		run : function(e, f, s) {

+			var t = this, o;

+

+			if (t.doc && typeof(e) === 'string')

+				e = t.get(e);

+

+			if (!e)

+				return false;

+

+			s = s || this;

+			if (!e.nodeType && (e.length || e.length === 0)) {

+				o = [];

+

+				each(e, function(e, i) {

+					if (e) {

+						if (typeof(e) == 'string')

+							e = t.doc.getElementById(e);

+

+						o.push(f.call(s, e, i));

+					}

+				});

+

+				return o;

+			}

+

+			return f.call(s, e);

+		},

+

+		getAttribs : function(n) {

+			var o;

+

+			n = this.get(n);

+

+			if (!n)

+				return [];

+

+			if (isIE) {

+				o = [];

+

+				// Object will throw exception in IE

+				if (n.nodeName == 'OBJECT')

+					return n.attributes;

+

+				// IE doesn't keep the selected attribute if you clone option elements

+				if (n.nodeName === 'OPTION' && this.getAttrib(n, 'selected'))

+					o.push({specified : 1, nodeName : 'selected'});

+

+				// It's crazy that this is faster in IE but it's because it returns all attributes all the time

+				n.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, '').replace(/[\w:\-]+/gi, function(a) {

+					o.push({specified : 1, nodeName : a});

+				});

+

+				return o;

+			}

+

+			return n.attributes;

+		},

+

+		isEmpty : function(node, elements) {

+			var self = this, i, attributes, type, walker, name, parentNode;

+

+			node = node.firstChild;

+			if (node) {

+				walker = new tinymce.dom.TreeWalker(node);

+				elements = elements || self.schema ? self.schema.getNonEmptyElements() : null;

+

+				do {

+					type = node.nodeType;

+

+					if (type === 1) {

+						// Ignore bogus elements

+						if (node.getAttribute('data-mce-bogus'))

+							continue;

+

+						// Keep empty elements like <img />

+						name = node.nodeName.toLowerCase();

+						if (elements && elements[name]) {

+							// Ignore single BR elements in blocks like <p><br /></p>

+							parentNode = node.parentNode;

+							if (name === 'br' && self.isBlock(parentNode) && parentNode.firstChild === node && parentNode.lastChild === node) {

+								continue;

+							}

+

+							return false;

+						}

+

+						// Keep elements with data-bookmark attributes or name attribute like <a name="1"></a>

+						attributes = self.getAttribs(node);

+						i = node.attributes.length;

+						while (i--) {

+							name = node.attributes[i].nodeName;

+							if (name === "name" || name === 'data-mce-bookmark')

+								return false;

+						}

+					}

+

+					// Keep non whitespace text nodes

+					if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue)))

+						return false;

+				} while (node = walker.next());

+			}

+

+			return true;

+		},

+

+		destroy : function(s) {

+			var t = this;

+

+			if (t.events)

+				t.events.destroy();

+

+			t.win = t.doc = t.root = t.events = null;

+

+			// Manual destroy then remove unload handler

+			if (!s)

+				tinymce.removeUnload(t.destroy);

+		},

+

+		createRng : function() {

+			var d = this.doc;

+

+			return d.createRange ? d.createRange() : new tinymce.dom.Range(this);

+		},

+

+		nodeIndex : function(node, normalized) {

+			var idx = 0, lastNodeType, lastNode, nodeType;

+

+			if (node) {

+				for (lastNodeType = node.nodeType, node = node.previousSibling, lastNode = node; node; node = node.previousSibling) {

+					nodeType = node.nodeType;

+

+					// Normalize text nodes

+					if (normalized && nodeType == 3) {

+						if (nodeType == lastNodeType || !node.nodeValue.length)

+							continue;

+					}

+					idx++;

+					lastNodeType = nodeType;

+				}

+			}

+

+			return idx;

+		},

+

+		split : function(pe, e, re) {

+			var t = this, r = t.createRng(), bef, aft, pa;

+

+			// W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sense

+			// but we don't want that in our code since it serves no purpose for the end user

+			// For example if this is chopped:

+			//   <p>text 1<span><b>CHOP</b></span>text 2</p>

+			// would produce:

+			//   <p>text 1<span></span></p><b>CHOP</b><p><span></span>text 2</p>

+			// this function will then trim of empty edges and produce:

+			//   <p>text 1</p><b>CHOP</b><p>text 2</p>

+			function trim(node) {

+				var i, children = node.childNodes, type = node.nodeType;

+

+				function surroundedBySpans(node) {

+					var previousIsSpan = node.previousSibling && node.previousSibling.nodeName == 'SPAN';

+					var nextIsSpan = node.nextSibling && node.nextSibling.nodeName == 'SPAN';

+					return previousIsSpan && nextIsSpan;

+				}

+

+				if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark')

+					return;

+

+				for (i = children.length - 1; i >= 0; i--)

+					trim(children[i]);

+

+				if (type != 9) {

+					// Keep non whitespace text nodes

+					if (type == 3 && node.nodeValue.length > 0) {

+						// If parent element isn't a block or there isn't any useful contents for example "<p>   </p>"

+						// Also keep text nodes with only spaces if surrounded by spans.

+						// eg. "<p><span>a</span> <span>b</span></p>" should keep space between a and b

+						var trimmedLength = tinymce.trim(node.nodeValue).length;

+						if (!t.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength == 0 && surroundedBySpans(node))

+							return;

+					} else if (type == 1) {

+						// If the only child is a bookmark then move it up

+						children = node.childNodes;

+						if (children.length == 1 && children[0] && children[0].nodeType == 1 && children[0].getAttribute('data-mce-type') == 'bookmark')

+							node.parentNode.insertBefore(children[0], node);

+

+						// Keep non empty elements or img, hr etc

+						if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName))

+							return;

+					}

+

+					t.remove(node);

+				}

+

+				return node;

+			};

+

+			if (pe && e) {

+				// Get before chunk

+				r.setStart(pe.parentNode, t.nodeIndex(pe));

+				r.setEnd(e.parentNode, t.nodeIndex(e));

+				bef = r.extractContents();

+

+				// Get after chunk

+				r = t.createRng();

+				r.setStart(e.parentNode, t.nodeIndex(e) + 1);

+				r.setEnd(pe.parentNode, t.nodeIndex(pe) + 1);

+				aft = r.extractContents();

+

+				// Insert before chunk

+				pa = pe.parentNode;

+				pa.insertBefore(trim(bef), pe);

+

+				// Insert middle chunk

+				if (re)

+				pa.replaceChild(re, e);

+			else

+				pa.insertBefore(e, pe);

+

+				// Insert after chunk

+				pa.insertBefore(trim(aft), pe);

+				t.remove(pe);

+

+				return re || e;

+			}

+		},

+

+		bind : function(target, name, func, scope) {

+			var t = this;

+

+			if (!t.events)

+				t.events = new tinymce.dom.EventUtils();

+

+			return t.events.add(target, name, func, scope || this);

+		},

+

+		unbind : function(target, name, func) {

+			var t = this;

+

+			if (!t.events)

+				t.events = new tinymce.dom.EventUtils();

+

+			return t.events.remove(target, name, func);

+		},

+

+

+		_findSib : function(node, selector, name) {

+			var t = this, f = selector;

+

+			if (node) {

+				// If expression make a function of it using is

+				if (is(f, 'string')) {

+					f = function(node) {

+						return t.is(node, selector);

+					};

+				}

+

+				// Loop all siblings

+				for (node = node[name]; node; node = node[name]) {

+					if (f(node))

+						return node;

+				}

+			}

+

+			return null;

+		},

+

+		_isRes : function(c) {

+			// Is live resizble element

+			return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c);

+		}

+

+		/*

+		walk : function(n, f, s) {

+			var d = this.doc, w;

+

+			if (d.createTreeWalker) {

+				w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);

+

+				while ((n = w.nextNode()) != null)

+					f.call(s || this, n);

+			} else

+				tinymce.walk(n, f, 'childNodes', s);

+		}

+		*/

+

+		/*

+		toRGB : function(s) {

+			var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s);

+

+			if (c) {

+				// #FFF -> #FFFFFF

+				if (!is(c[3]))

+					c[3] = c[2] = c[1];

+

+				return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")";

+			}

+

+			return s;

+		}

+		*/

+	});

+

+	tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});

+})(tinymce);

+

+(function(ns) {

+	// Range constructor

+	function Range(dom) {

+		var t = this,

+			doc = dom.doc,

+			EXTRACT = 0,

+			CLONE = 1,

+			DELETE = 2,

+			TRUE = true,

+			FALSE = false,

+			START_OFFSET = 'startOffset',

+			START_CONTAINER = 'startContainer',

+			END_CONTAINER = 'endContainer',

+			END_OFFSET = 'endOffset',

+			extend = tinymce.extend,

+			nodeIndex = dom.nodeIndex;

+

+		extend(t, {

+			// Inital states

+			startContainer : doc,

+			startOffset : 0,

+			endContainer : doc,

+			endOffset : 0,

+			collapsed : TRUE,

+			commonAncestorContainer : doc,

+

+			// Range constants

+			START_TO_START : 0,

+			START_TO_END : 1,

+			END_TO_END : 2,

+			END_TO_START : 3,

+

+			// Public methods

+			setStart : setStart,

+			setEnd : setEnd,

+			setStartBefore : setStartBefore,

+			setStartAfter : setStartAfter,

+			setEndBefore : setEndBefore,

+			setEndAfter : setEndAfter,

+			collapse : collapse,

+			selectNode : selectNode,

+			selectNodeContents : selectNodeContents,

+			compareBoundaryPoints : compareBoundaryPoints,

+			deleteContents : deleteContents,

+			extractContents : extractContents,

+			cloneContents : cloneContents,

+			insertNode : insertNode,

+			surroundContents : surroundContents,

+			cloneRange : cloneRange

+		});

+

+		function setStart(n, o) {

+			_setEndPoint(TRUE, n, o);

+		};

+

+		function setEnd(n, o) {

+			_setEndPoint(FALSE, n, o);

+		};

+

+		function setStartBefore(n) {

+			setStart(n.parentNode, nodeIndex(n));

+		};

+

+		function setStartAfter(n) {

+			setStart(n.parentNode, nodeIndex(n) + 1);

+		};

+

+		function setEndBefore(n) {

+			setEnd(n.parentNode, nodeIndex(n));

+		};

+

+		function setEndAfter(n) {

+			setEnd(n.parentNode, nodeIndex(n) + 1);

+		};

+

+		function collapse(ts) {

+			if (ts) {

+				t[END_CONTAINER] = t[START_CONTAINER];

+				t[END_OFFSET] = t[START_OFFSET];

+			} else {

+				t[START_CONTAINER] = t[END_CONTAINER];

+				t[START_OFFSET] = t[END_OFFSET];

+			}

+

+			t.collapsed = TRUE;

+		};

+

+		function selectNode(n) {

+			setStartBefore(n);

+			setEndAfter(n);

+		};

+

+		function selectNodeContents(n) {

+			setStart(n, 0);

+			setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length);

+		};

+

+		function compareBoundaryPoints(h, r) {

+			var sc = t[START_CONTAINER], so = t[START_OFFSET], ec = t[END_CONTAINER], eo = t[END_OFFSET],

+			rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset;

+

+			// Check START_TO_START

+			if (h === 0)

+				return _compareBoundaryPoints(sc, so, rsc, rso);

+	

+			// Check START_TO_END

+			if (h === 1)

+				return _compareBoundaryPoints(ec, eo, rsc, rso);

+	

+			// Check END_TO_END

+			if (h === 2)

+				return _compareBoundaryPoints(ec, eo, rec, reo);

+	

+			// Check END_TO_START

+			if (h === 3) 

+				return _compareBoundaryPoints(sc, so, rec, reo);

+		};

+

+		function deleteContents() {

+			_traverse(DELETE);

+		};

+

+		function extractContents() {

+			return _traverse(EXTRACT);

+		};

+

+		function cloneContents() {

+			return _traverse(CLONE);

+		};

+

+		function insertNode(n) {

+			var startContainer = this[START_CONTAINER],

+				startOffset = this[START_OFFSET], nn, o;

+

+			// Node is TEXT_NODE or CDATA

+			if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) {

+				if (!startOffset) {

+					// At the start of text

+					startContainer.parentNode.insertBefore(n, startContainer);

+				} else if (startOffset >= startContainer.nodeValue.length) {

+					// At the end of text

+					dom.insertAfter(n, startContainer);

+				} else {

+					// Middle, need to split

+					nn = startContainer.splitText(startOffset);

+					startContainer.parentNode.insertBefore(n, nn);

+				}

+			} else {

+				// Insert element node

+				if (startContainer.childNodes.length > 0)

+					o = startContainer.childNodes[startOffset];

+

+				if (o)

+					startContainer.insertBefore(n, o);

+				else

+					startContainer.appendChild(n);

+			}

+		};

+

+		function surroundContents(n) {

+			var f = t.extractContents();

+

+			t.insertNode(n);

+			n.appendChild(f);

+			t.selectNode(n);

+		};

+

+		function cloneRange() {

+			return extend(new Range(dom), {

+				startContainer : t[START_CONTAINER],

+				startOffset : t[START_OFFSET],

+				endContainer : t[END_CONTAINER],

+				endOffset : t[END_OFFSET],

+				collapsed : t.collapsed,

+				commonAncestorContainer : t.commonAncestorContainer

+			});

+		};

+

+		// Private methods

+

+		function _getSelectedNode(container, offset) {

+			var child;

+

+			if (container.nodeType == 3 /* TEXT_NODE */)

+				return container;

+

+			if (offset < 0)

+				return container;

+

+			child = container.firstChild;

+			while (child && offset > 0) {

+				--offset;

+				child = child.nextSibling;

+			}

+

+			if (child)

+				return child;

+

+			return container;

+		};

+

+		function _isCollapsed() {

+			return (t[START_CONTAINER] == t[END_CONTAINER] && t[START_OFFSET] == t[END_OFFSET]);

+		};

+

+		function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) {

+			var c, offsetC, n, cmnRoot, childA, childB;

+			

+			// In the first case the boundary-points have the same container. A is before B

+			// if its offset is less than the offset of B, A is equal to B if its offset is

+			// equal to the offset of B, and A is after B if its offset is greater than the

+			// offset of B.

+			if (containerA == containerB) {

+				if (offsetA == offsetB)

+					return 0; // equal

+

+				if (offsetA < offsetB)

+					return -1; // before

+

+				return 1; // after

+			}

+

+			// In the second case a child node C of the container of A is an ancestor

+			// container of B. In this case, A is before B if the offset of A is less than or

+			// equal to the index of the child node C and A is after B otherwise.

+			c = containerB;

+			while (c && c.parentNode != containerA)

+				c = c.parentNode;

+

+			if (c) {

+				offsetC = 0;

+				n = containerA.firstChild;

+

+				while (n != c && offsetC < offsetA) {

+					offsetC++;

+					n = n.nextSibling;

+				}

+

+				if (offsetA <= offsetC)

+					return -1; // before

+

+				return 1; // after

+			}

+

+			// In the third case a child node C of the container of B is an ancestor container

+			// of A. In this case, A is before B if the index of the child node C is less than

+			// the offset of B and A is after B otherwise.

+			c = containerA;

+			while (c && c.parentNode != containerB) {

+				c = c.parentNode;

+			}

+

+			if (c) {

+				offsetC = 0;

+				n = containerB.firstChild;

+

+				while (n != c && offsetC < offsetB) {

+					offsetC++;

+					n = n.nextSibling;

+				}

+

+				if (offsetC < offsetB)

+					return -1; // before

+

+				return 1; // after

+			}

+

+			// In the fourth case, none of three other cases hold: the containers of A and B

+			// are siblings or descendants of sibling nodes. In this case, A is before B if

+			// the container of A is before the container of B in a pre-order traversal of the

+			// Ranges' context tree and A is after B otherwise.

+			cmnRoot = dom.findCommonAncestor(containerA, containerB);

+			childA = containerA;

+

+			while (childA && childA.parentNode != cmnRoot)

+				childA = childA.parentNode;

+

+			if (!childA)

+				childA = cmnRoot;

+

+			childB = containerB;

+			while (childB && childB.parentNode != cmnRoot)

+				childB = childB.parentNode;

+

+			if (!childB)

+				childB = cmnRoot;

+

+			if (childA == childB)

+				return 0; // equal

+

+			n = cmnRoot.firstChild;

+			while (n) {

+				if (n == childA)

+					return -1; // before

+

+				if (n == childB)

+					return 1; // after

+

+				n = n.nextSibling;

+			}

+		};

+

+		function _setEndPoint(st, n, o) {

+			var ec, sc;

+

+			if (st) {

+				t[START_CONTAINER] = n;

+				t[START_OFFSET] = o;

+			} else {

+				t[END_CONTAINER] = n;

+				t[END_OFFSET] = o;

+			}

+

+			// If one boundary-point of a Range is set to have a root container

+			// other than the current one for the Range, the Range is collapsed to

+			// the new position. This enforces the restriction that both boundary-

+			// points of a Range must have the same root container.

+			ec = t[END_CONTAINER];

+			while (ec.parentNode)

+				ec = ec.parentNode;

+

+			sc = t[START_CONTAINER];

+			while (sc.parentNode)

+				sc = sc.parentNode;

+

+			if (sc == ec) {

+				// The start position of a Range is guaranteed to never be after the

+				// end position. To enforce this restriction, if the start is set to

+				// be at a position after the end, the Range is collapsed to that

+				// position.

+				if (_compareBoundaryPoints(t[START_CONTAINER], t[START_OFFSET], t[END_CONTAINER], t[END_OFFSET]) > 0)

+					t.collapse(st);

+			} else

+				t.collapse(st);

+

+			t.collapsed = _isCollapsed();

+			t.commonAncestorContainer = dom.findCommonAncestor(t[START_CONTAINER], t[END_CONTAINER]);

+		};

+

+		function _traverse(how) {

+			var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep;

+

+			if (t[START_CONTAINER] == t[END_CONTAINER])

+				return _traverseSameContainer(how);

+

+			for (c = t[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {

+				if (p == t[START_CONTAINER])

+					return _traverseCommonStartContainer(c, how);

+

+				++endContainerDepth;

+			}

+

+			for (c = t[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {

+				if (p == t[END_CONTAINER])

+					return _traverseCommonEndContainer(c, how);

+

+				++startContainerDepth;

+			}

+

+			depthDiff = startContainerDepth - endContainerDepth;

+

+			startNode = t[START_CONTAINER];

+			while (depthDiff > 0) {

+				startNode = startNode.parentNode;

+				depthDiff--;

+			}

+

+			endNode = t[END_CONTAINER];

+			while (depthDiff < 0) {

+				endNode = endNode.parentNode;

+				depthDiff++;

+			}

+

+			// ascend the ancestor hierarchy until we have a common parent.

+			for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) {

+				startNode = sp;

+				endNode = ep;

+			}

+

+			return _traverseCommonAncestors(startNode, endNode, how);

+		};

+

+		 function _traverseSameContainer(how) {

+			var frag, s, sub, n, cnt, sibling, xferNode;

+

+			if (how != DELETE)

+				frag = doc.createDocumentFragment();

+

+			// If selection is empty, just return the fragment

+			if (t[START_OFFSET] == t[END_OFFSET])

+				return frag;

+

+			// Text node needs special case handling

+			if (t[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) {

+				// get the substring

+				s = t[START_CONTAINER].nodeValue;

+				sub = s.substring(t[START_OFFSET], t[END_OFFSET]);

+

+				// set the original text node to its new value

+				if (how != CLONE) {

+					t[START_CONTAINER].deleteData(t[START_OFFSET], t[END_OFFSET] - t[START_OFFSET]);

+

+					// Nothing is partially selected, so collapse to start point

+					t.collapse(TRUE);

+				}

+

+				if (how == DELETE)

+					return;

+

+				frag.appendChild(doc.createTextNode(sub));

+				return frag;

+			}

+

+			// Copy nodes between the start/end offsets.

+			n = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]);

+			cnt = t[END_OFFSET] - t[START_OFFSET];

+

+			while (cnt > 0) {

+				sibling = n.nextSibling;

+				xferNode = _traverseFullySelected(n, how);

+

+				if (frag)

+					frag.appendChild( xferNode );

+

+				--cnt;

+				n = sibling;

+			}

+

+			// Nothing is partially selected, so collapse to start point

+			if (how != CLONE)

+				t.collapse(TRUE);

+

+			return frag;

+		};

+

+		function _traverseCommonStartContainer(endAncestor, how) {

+			var frag, n, endIdx, cnt, sibling, xferNode;

+

+			if (how != DELETE)

+				frag = doc.createDocumentFragment();

+

+			n = _traverseRightBoundary(endAncestor, how);

+

+			if (frag)

+				frag.appendChild(n);

+

+			endIdx = nodeIndex(endAncestor);

+			cnt = endIdx - t[START_OFFSET];

+

+			if (cnt <= 0) {

+				// Collapse to just before the endAncestor, which

+				// is partially selected.

+				if (how != CLONE) {

+					t.setEndBefore(endAncestor);

+					t.collapse(FALSE);

+				}

+

+				return frag;

+			}

+

+			n = endAncestor.previousSibling;

+			while (cnt > 0) {

+				sibling = n.previousSibling;

+				xferNode = _traverseFullySelected(n, how);

+

+				if (frag)

+					frag.insertBefore(xferNode, frag.firstChild);

+

+				--cnt;

+				n = sibling;

+			}

+

+			// Collapse to just before the endAncestor, which

+			// is partially selected.

+			if (how != CLONE) {

+				t.setEndBefore(endAncestor);

+				t.collapse(FALSE);

+			}

+

+			return frag;

+		};

+

+		function _traverseCommonEndContainer(startAncestor, how) {

+			var frag, startIdx, n, cnt, sibling, xferNode;

+

+			if (how != DELETE)

+				frag = doc.createDocumentFragment();

+

+			n = _traverseLeftBoundary(startAncestor, how);

+			if (frag)

+				frag.appendChild(n);

+

+			startIdx = nodeIndex(startAncestor);

+			++startIdx; // Because we already traversed it

+

+			cnt = t[END_OFFSET] - startIdx;

+			n = startAncestor.nextSibling;

+			while (cnt > 0) {

+				sibling = n.nextSibling;

+				xferNode = _traverseFullySelected(n, how);

+

+				if (frag)

+					frag.appendChild(xferNode);

+

+				--cnt;

+				n = sibling;

+			}

+

+			if (how != CLONE) {

+				t.setStartAfter(startAncestor);

+				t.collapse(TRUE);

+			}

+

+			return frag;

+		};

+

+		function _traverseCommonAncestors(startAncestor, endAncestor, how) {

+			var n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling;

+

+			if (how != DELETE)

+				frag = doc.createDocumentFragment();

+

+			n = _traverseLeftBoundary(startAncestor, how);

+			if (frag)

+				frag.appendChild(n);

+

+			commonParent = startAncestor.parentNode;

+			startOffset = nodeIndex(startAncestor);

+			endOffset = nodeIndex(endAncestor);

+			++startOffset;

+

+			cnt = endOffset - startOffset;

+			sibling = startAncestor.nextSibling;

+

+			while (cnt > 0) {

+				nextSibling = sibling.nextSibling;

+				n = _traverseFullySelected(sibling, how);

+

+				if (frag)

+					frag.appendChild(n);

+

+				sibling = nextSibling;

+				--cnt;

+			}

+

+			n = _traverseRightBoundary(endAncestor, how);

+

+			if (frag)

+				frag.appendChild(n);

+

+			if (how != CLONE) {

+				t.setStartAfter(startAncestor);

+				t.collapse(TRUE);

+			}

+

+			return frag;

+		};

+

+		function _traverseRightBoundary(root, how) {

+			var next = _getSelectedNode(t[END_CONTAINER], t[END_OFFSET] - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != t[END_CONTAINER];

+

+			if (next == root)

+				return _traverseNode(next, isFullySelected, FALSE, how);

+

+			parent = next.parentNode;

+			clonedParent = _traverseNode(parent, FALSE, FALSE, how);

+

+			while (parent) {

+				while (next) {

+					prevSibling = next.previousSibling;

+					clonedChild = _traverseNode(next, isFullySelected, FALSE, how);

+

+					if (how != DELETE)

+						clonedParent.insertBefore(clonedChild, clonedParent.firstChild);

+

+					isFullySelected = TRUE;

+					next = prevSibling;

+				}

+

+				if (parent == root)

+					return clonedParent;

+

+				next = parent.previousSibling;

+				parent = parent.parentNode;

+

+				clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how);

+

+				if (how != DELETE)

+					clonedGrandParent.appendChild(clonedParent);

+

+				clonedParent = clonedGrandParent;

+			}

+		};

+

+		function _traverseLeftBoundary(root, how) {

+			var next = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]), isFullySelected = next != t[START_CONTAINER], parent, clonedParent, nextSibling, clonedChild, clonedGrandParent;

+

+			if (next == root)

+				return _traverseNode(next, isFullySelected, TRUE, how);

+

+			parent = next.parentNode;

+			clonedParent = _traverseNode(parent, FALSE, TRUE, how);

+

+			while (parent) {

+				while (next) {

+					nextSibling = next.nextSibling;

+					clonedChild = _traverseNode(next, isFullySelected, TRUE, how);

+

+					if (how != DELETE)

+						clonedParent.appendChild(clonedChild);

+

+					isFullySelected = TRUE;

+					next = nextSibling;

+				}

+

+				if (parent == root)

+					return clonedParent;

+

+				next = parent.nextSibling;

+				parent = parent.parentNode;

+

+				clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how);

+

+				if (how != DELETE)

+					clonedGrandParent.appendChild(clonedParent);

+

+				clonedParent = clonedGrandParent;

+			}

+		};

+

+		function _traverseNode(n, isFullySelected, isLeft, how) {

+			var txtValue, newNodeValue, oldNodeValue, offset, newNode;

+

+			if (isFullySelected)

+				return _traverseFullySelected(n, how);

+

+			if (n.nodeType == 3 /* TEXT_NODE */) {

+				txtValue = n.nodeValue;

+

+				if (isLeft) {

+					offset = t[START_OFFSET];

+					newNodeValue = txtValue.substring(offset);

+					oldNodeValue = txtValue.substring(0, offset);

+				} else {

+					offset = t[END_OFFSET];

+					newNodeValue = txtValue.substring(0, offset);

+					oldNodeValue = txtValue.substring(offset);

+				}

+

+				if (how != CLONE)

+					n.nodeValue = oldNodeValue;

+

+				if (how == DELETE)

+					return;

+

+				newNode = n.cloneNode(FALSE);

+				newNode.nodeValue = newNodeValue;

+

+				return newNode;

+			}

+

+			if (how == DELETE)

+				return;

+

+			return n.cloneNode(FALSE);

+		};

+

+		function _traverseFullySelected(n, how) {

+			if (how != DELETE)

+				return how == CLONE ? n.cloneNode(TRUE) : n;

+

+			n.parentNode.removeChild(n);

+		};

+	};

+

+	ns.Range = Range;

+})(tinymce.dom);

+

+(function() {

+	function Selection(selection) {

+		var self = this, dom = selection.dom, TRUE = true, FALSE = false;

+

+		function getPosition(rng, start) {

+			var checkRng, startIndex = 0, endIndex, inside,

+				children, child, offset, index, position = -1, parent;

+

+			// Setup test range, collapse it and get the parent

+			checkRng = rng.duplicate();

+			checkRng.collapse(start);

+			parent = checkRng.parentElement();

+

+			// Check if the selection is within the right document

+			if (parent.ownerDocument !== selection.dom.doc)

+				return;

+

+			// IE will report non editable elements as it's parent so look for an editable one

+			while (parent.contentEditable === "false") {

+				parent = parent.parentNode;

+			}

+

+			// If parent doesn't have any children then return that we are inside the element

+			if (!parent.hasChildNodes()) {

+				return {node : parent, inside : 1};

+			}

+

+			// Setup node list and endIndex

+			children = parent.children;

+			endIndex = children.length - 1;

+

+			// Perform a binary search for the position

+			while (startIndex <= endIndex) {

+				index = Math.floor((startIndex + endIndex) / 2);

+

+				// Move selection to node and compare the ranges

+				child = children[index];

+				checkRng.moveToElementText(child);

+				position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng);

+

+				// Before/after or an exact match

+				if (position > 0) {

+					endIndex = index - 1;

+				} else if (position < 0) {

+					startIndex = index + 1;

+				} else {

+					return {node : child};

+				}

+			}

+

+			// Check if child position is before or we didn't find a position

+			if (position < 0) {

+				// No element child was found use the parent element and the offset inside that

+				if (!child) {

+					checkRng.moveToElementText(parent);

+					checkRng.collapse(true);

+					child = parent;

+					inside = true;

+				} else

+					checkRng.collapse(false);

+

+				checkRng.setEndPoint(start ? 'EndToStart' : 'EndToEnd', rng);

+

+				// Fix for edge case: <div style="width: 100px; height:100px;"><table>..</table>ab|c</div>

+				if (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) > 0) {

+					checkRng = rng.duplicate();

+					checkRng.collapse(start);

+

+					offset = -1;

+					while (parent == checkRng.parentElement()) {

+						if (checkRng.move('character', -1) == 0)

+							break;

+

+						offset++;

+					}

+				}

+

+				offset = offset || checkRng.text.replace('\r\n', ' ').length;

+			} else {

+				// Child position is after the selection endpoint

+				checkRng.collapse(true);

+				checkRng.setEndPoint(start ? 'StartToStart' : 'StartToEnd', rng);

+

+				// Get the length of the text to find where the endpoint is relative to it's container

+				offset = checkRng.text.replace('\r\n', ' ').length;

+			}

+

+			return {node : child, position : position, offset : offset, inside : inside};

+		};

+

+		// Returns a W3C DOM compatible range object by using the IE Range API

+		function getRange() {

+			var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark, fail;

+

+			// If selection is outside the current document just return an empty range

+			element = ieRange.item ? ieRange.item(0) : ieRange.parentElement();

+			if (element.ownerDocument != dom.doc)

+				return domRange;

+

+			collapsed = selection.isCollapsed();

+

+			// Handle control selection

+			if (ieRange.item) {

+				domRange.setStart(element.parentNode, dom.nodeIndex(element));

+				domRange.setEnd(domRange.startContainer, domRange.startOffset + 1);

+

+				return domRange;

+			}

+

+			function findEndPoint(start) {

+				var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue;

+

+				container = endPoint.node;

+				offset = endPoint.offset;

+

+				if (endPoint.inside && !container.hasChildNodes()) {

+					domRange[start ? 'setStart' : 'setEnd'](container, 0);

+					return;

+				}

+

+				if (offset === undef) {

+					domRange[start ? 'setStartBefore' : 'setEndAfter'](container);

+					return;

+				}

+

+				if (endPoint.position < 0) {

+					sibling = endPoint.inside ? container.firstChild : container.nextSibling;

+

+					if (!sibling) {

+						domRange[start ? 'setStartAfter' : 'setEndAfter'](container);

+						return;

+					}

+

+					if (!offset) {

+						if (sibling.nodeType == 3)

+							domRange[start ? 'setStart' : 'setEnd'](sibling, 0);

+						else

+							domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling);

+

+						return;

+					}

+

+					// Find the text node and offset

+					while (sibling) {

+						nodeValue = sibling.nodeValue;

+						textNodeOffset += nodeValue.length;

+

+						// We are at or passed the position we where looking for

+						if (textNodeOffset >= offset) {

+							container = sibling;

+							textNodeOffset -= offset;

+							textNodeOffset = nodeValue.length - textNodeOffset;

+							break;

+						}

+

+						sibling = sibling.nextSibling;

+					}

+				} else {

+					// Find the text node and offset

+					sibling = container.previousSibling;

+

+					if (!sibling)

+						return domRange[start ? 'setStartBefore' : 'setEndBefore'](container);

+

+					// If there isn't any text to loop then use the first position

+					if (!offset) {

+						if (container.nodeType == 3)

+							domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length);

+						else

+							domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling);

+

+						return;

+					}

+

+					while (sibling) {

+						textNodeOffset += sibling.nodeValue.length;

+

+						// We are at or passed the position we where looking for

+						if (textNodeOffset >= offset) {

+							container = sibling;

+							textNodeOffset -= offset;

+							break;

+						}

+

+						sibling = sibling.previousSibling;

+					}

+				}

+

+				domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset);

+			};

+

+			try {

+				// Find start point

+				findEndPoint(true);

+

+				// Find end point if needed

+				if (!collapsed)

+					findEndPoint();

+			} catch (ex) {

+				// IE has a nasty bug where text nodes might throw "invalid argument" when you

+				// access the nodeValue or other properties of text nodes. This seems to happend when

+				// text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it.

+				if (ex.number == -2147024809) {

+					// Get the current selection

+					bookmark = self.getBookmark(2);

+

+					// Get start element

+					tmpRange = ieRange.duplicate();

+					tmpRange.collapse(true);

+					element = tmpRange.parentElement();

+

+					// Get end element

+					if (!collapsed) {

+						tmpRange = ieRange.duplicate();

+						tmpRange.collapse(false);

+						element2 = tmpRange.parentElement();

+						element2.innerHTML = element2.innerHTML;

+					}

+

+					// Remove the broken elements

+					element.innerHTML = element.innerHTML;

+

+					// Restore the selection

+					self.moveToBookmark(bookmark);

+

+					// Since the range has moved we need to re-get it

+					ieRange = selection.getRng();

+

+					// Find start point

+					findEndPoint(true);

+

+					// Find end point if needed

+					if (!collapsed)

+						findEndPoint();

+				} else

+					throw ex; // Throw other errors

+			}

+

+			return domRange;

+		};

+

+		this.getBookmark = function(type) {

+			var rng = selection.getRng(), start, end, bookmark = {};

+

+			function getIndexes(node) {

+				var node, parent, root, children, i, indexes = [];

+

+				parent = node.parentNode;

+				root = dom.getRoot().parentNode;

+

+				while (parent != root && parent.nodeType !== 9) {

+					children = parent.children;

+

+					i = children.length;

+					while (i--) {

+						if (node === children[i]) {

+							indexes.push(i);

+							break;

+						}

+					}

+

+					node = parent;

+					parent = parent.parentNode;

+				}

+

+				return indexes;

+			};

+

+			function getBookmarkEndPoint(start) {

+				var position;

+

+				position = getPosition(rng, start);

+				if (position) {

+					return {

+						position : position.position,

+						offset : position.offset,

+						indexes : getIndexes(position.node),

+						inside : position.inside

+					};

+				}

+			};

+

+			// Non ubstructive bookmark

+			if (type === 2) {

+				// Handle text selection

+				if (!rng.item) {

+					bookmark.start = getBookmarkEndPoint(true);

+

+					if (!selection.isCollapsed())

+						bookmark.end = getBookmarkEndPoint();

+				} else

+					bookmark.start = {ctrl : true, indexes : getIndexes(rng.item(0))};

+			}

+

+			return bookmark;

+		};

+

+		this.moveToBookmark = function(bookmark) {

+			var rng, body = dom.doc.body;

+

+			function resolveIndexes(indexes) {

+				var node, i, idx, children;

+

+				node = dom.getRoot();

+				for (i = indexes.length - 1; i >= 0; i--) {

+					children = node.children;

+					idx = indexes[i];

+

+					if (idx <= children.length - 1) {

+						node = children[idx];

+					}

+				}

+

+				return node;

+			};

+			

+			function setBookmarkEndPoint(start) {

+				var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef;

+

+				if (endPoint) {

+					moveLeft = endPoint.position > 0;

+

+					moveRng = body.createTextRange();

+					moveRng.moveToElementText(resolveIndexes(endPoint.indexes));

+

+					offset = endPoint.offset;

+					if (offset !== undef) {

+						moveRng.collapse(endPoint.inside || moveLeft);

+						moveRng.moveStart('character', moveLeft ? -offset : offset);

+					} else

+						moveRng.collapse(start);

+

+					rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng);

+

+					if (start)

+						rng.collapse(true);

+				}

+			};

+

+			if (bookmark.start) {

+				if (bookmark.start.ctrl) {

+					rng = body.createControlRange();

+					rng.addElement(resolveIndexes(bookmark.start.indexes));

+					rng.select();

+				} else {

+					rng = body.createTextRange();

+					setBookmarkEndPoint(true);

+					setBookmarkEndPoint();

+					rng.select();

+				}

+			}

+		};

+

+		this.addRange = function(rng) {

+			var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, doc = selection.dom.doc, body = doc.body;

+

+			function setEndPoint(start) {

+				var container, offset, marker, tmpRng, nodes;

+

+				marker = dom.create('a');

+				container = start ? startContainer : endContainer;

+				offset = start ? startOffset : endOffset;

+				tmpRng = ieRng.duplicate();

+

+				if (container == doc || container == doc.documentElement) {

+					container = body;

+					offset = 0;

+				}

+

+				if (container.nodeType == 3) {

+					container.parentNode.insertBefore(marker, container);

+					tmpRng.moveToElementText(marker);

+					tmpRng.moveStart('character', offset);

+					dom.remove(marker);

+					ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);

+				} else {

+					nodes = container.childNodes;

+

+					if (nodes.length) {

+						if (offset >= nodes.length) {

+							dom.insertAfter(marker, nodes[nodes.length - 1]);

+						} else {

+							container.insertBefore(marker, nodes[offset]);

+						}

+

+						tmpRng.moveToElementText(marker);

+					} else {

+						// Empty node selection for example <div>|</div>

+						marker = doc.createTextNode('\uFEFF');

+						container.appendChild(marker);

+						tmpRng.moveToElementText(marker.parentNode);

+						tmpRng.collapse(TRUE);

+					}

+

+					ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);

+					dom.remove(marker);

+				}

+			}

+

+			// Setup some shorter versions

+			startContainer = rng.startContainer;

+			startOffset = rng.startOffset;

+			endContainer = rng.endContainer;

+			endOffset = rng.endOffset;

+			ieRng = body.createTextRange();

+

+			// If single element selection then try making a control selection out of it

+			if (startContainer == endContainer && startContainer.nodeType == 1 && startOffset == endOffset - 1) {

+				if (startOffset == endOffset - 1) {

+					try {

+						ctrlRng = body.createControlRange();

+						ctrlRng.addElement(startContainer.childNodes[startOffset]);

+						ctrlRng.select();

+						return;

+					} catch (ex) {

+						// Ignore

+					}

+				}

+			}

+

+			// Set start/end point of selection

+			setEndPoint(true);

+			setEndPoint();

+

+			// Select the new range and scroll it into view

+			ieRng.select();

+		};

+

+		// Expose range method

+		this.getRangeAt = getRange;

+	};

+

+	// Expose the selection object

+	tinymce.dom.TridentSelection = Selection;

+})();

+

+

+/*

+ * Sizzle CSS Selector Engine - v1.0

+ *  Copyright 2009, The Dojo Foundation

+ *  Released under the MIT, BSD, and GPL Licenses.

+ *  More information: http://sizzlejs.com/

+ */

+(function(){

+

+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,

+	done = 0,

+	toString = Object.prototype.toString,

+	hasDuplicate = false,

+	baseHasDuplicate = true;

+

+// Here we check if the JavaScript engine is using some sort of

+// optimization where it does not always call our comparision

+// function. If that is the case, discard the hasDuplicate value.

+//   Thus far that includes Google Chrome.

+[0, 0].sort(function(){

+	baseHasDuplicate = false;

+	return 0;

+});

+

+var Sizzle = function(selector, context, results, seed) {

+	results = results || [];

+	context = context || document;

+

+	var origContext = context;

+

+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {

+		return [];

+	}

+	

+	if ( !selector || typeof selector !== "string" ) {

+		return results;

+	}

+

+	var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),

+		soFar = selector, ret, cur, pop, i;

+	

+	// Reset the position of the chunker regexp (start from head)

+	do {

+		chunker.exec("");

+		m = chunker.exec(soFar);

+

+		if ( m ) {

+			soFar = m[3];

+		

+			parts.push( m[1] );

+		

+			if ( m[2] ) {

+				extra = m[3];

+				break;

+			}

+		}

+	} while ( m );

+

+	if ( parts.length > 1 && origPOS.exec( selector ) ) {

+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {

+			set = posProcess( parts[0] + parts[1], context );

+		} else {

+			set = Expr.relative[ parts[0] ] ?

+				[ context ] :

+				Sizzle( parts.shift(), context );

+

+			while ( parts.length ) {

+				selector = parts.shift();

+

+				if ( Expr.relative[ selector ] ) {

+					selector += parts.shift();

+				}

+				

+				set = posProcess( selector, set );

+			}

+		}

+	} else {

+		// Take a shortcut and set the context if the root selector is an ID

+		// (but not if it'll be faster if the inner selector is an ID)

+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&

+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {

+			ret = Sizzle.find( parts.shift(), context, contextXML );

+			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];

+		}

+

+		if ( context ) {

+			ret = seed ?

+				{ expr: parts.pop(), set: makeArray(seed) } :

+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );

+			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;

+

+			if ( parts.length > 0 ) {

+				checkSet = makeArray(set);

+			} else {

+				prune = false;

+			}

+

+			while ( parts.length ) {

+				cur = parts.pop();

+				pop = cur;

+

+				if ( !Expr.relative[ cur ] ) {

+					cur = "";

+				} else {

+					pop = parts.pop();

+				}

+

+				if ( pop == null ) {

+					pop = context;

+				}

+

+				Expr.relative[ cur ]( checkSet, pop, contextXML );

+			}

+		} else {

+			checkSet = parts = [];

+		}

+	}

+

+	if ( !checkSet ) {

+		checkSet = set;

+	}

+

+	if ( !checkSet ) {

+		Sizzle.error( cur || selector );

+	}

+

+	if ( toString.call(checkSet) === "[object Array]" ) {

+		if ( !prune ) {

+			results.push.apply( results, checkSet );

+		} else if ( context && context.nodeType === 1 ) {

+			for ( i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {

+					results.push( set[i] );

+				}

+			}

+		} else {

+			for ( i = 0; checkSet[i] != null; i++ ) {

+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {

+					results.push( set[i] );

+				}

+			}

+		}

+	} else {

+		makeArray( checkSet, results );

+	}

+

+	if ( extra ) {

+		Sizzle( extra, origContext, results, seed );

+		Sizzle.uniqueSort( results );

+	}

+

+	return results;

+};

+

+Sizzle.uniqueSort = function(results){

+	if ( sortOrder ) {

+		hasDuplicate = baseHasDuplicate;

+		results.sort(sortOrder);

+

+		if ( hasDuplicate ) {

+			for ( var i = 1; i < results.length; i++ ) {

+				if ( results[i] === results[i-1] ) {

+					results.splice(i--, 1);

+				}

+			}

+		}

+	}

+

+	return results;

+};

+

+Sizzle.matches = function(expr, set){

+	return Sizzle(expr, null, null, set);

+};

+

+Sizzle.find = function(expr, context, isXML){

+	var set;

+

+	if ( !expr ) {

+		return [];

+	}

+

+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {

+		var type = Expr.order[i], match;

+		

+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {

+			var left = match[1];

+			match.splice(1,1);

+

+			if ( left.substr( left.length - 1 ) !== "\\" ) {

+				match[1] = (match[1] || "").replace(/\\/g, "");

+				set = Expr.find[ type ]( match, context, isXML );

+				if ( set != null ) {

+					expr = expr.replace( Expr.match[ type ], "" );

+					break;

+				}

+			}

+		}

+	}

+

+	if ( !set ) {

+		set = context.getElementsByTagName("*");

+	}

+

+	return {set: set, expr: expr};

+};

+

+Sizzle.filter = function(expr, set, inplace, not){

+	var old = expr, result = [], curLoop = set, match, anyFound,

+		isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);

+

+	while ( expr && set.length ) {

+		for ( var type in Expr.filter ) {

+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

+				var filter = Expr.filter[ type ], found, item, left = match[1];

+				anyFound = false;

+

+				match.splice(1,1);

+

+				if ( left.substr( left.length - 1 ) === "\\" ) {

+					continue;

+				}

+

+				if ( curLoop === result ) {

+					result = [];

+				}

+

+				if ( Expr.preFilter[ type ] ) {

+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

+

+					if ( !match ) {

+						anyFound = found = true;

+					} else if ( match === true ) {

+						continue;

+					}

+				}

+

+				if ( match ) {

+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {

+						if ( item ) {

+							found = filter( item, match, i, curLoop );

+							var pass = not ^ !!found;

+

+							if ( inplace && found != null ) {

+								if ( pass ) {

+									anyFound = true;

+								} else {

+									curLoop[i] = false;

+								}

+							} else if ( pass ) {

+								result.push( item );

+								anyFound = true;

+							}

+						}

+					}

+				}

+

+				if ( found !== undefined ) {

+					if ( !inplace ) {

+						curLoop = result;

+					}

+

+					expr = expr.replace( Expr.match[ type ], "" );

+

+					if ( !anyFound ) {

+						return [];

+					}

+

+					break;

+				}

+			}

+		}

+

+		// Improper expression

+		if ( expr === old ) {

+			if ( anyFound == null ) {

+				Sizzle.error( expr );

+			} else {

+				break;

+			}

+		}

+

+		old = expr;

+	}

+

+	return curLoop;

+};

+

+Sizzle.error = function( msg ) {

+	throw "Syntax error, unrecognized expression: " + msg;

+};

+

+var Expr = Sizzle.selectors = {

+	order: [ "ID", "NAME", "TAG" ],

+	match: {

+		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,

+		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,

+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,

+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,

+		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,

+		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,

+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,

+		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/

+	},

+	leftMatch: {},

+	attrMap: {

+		"class": "className",

+		"for": "htmlFor"

+	},

+	attrHandle: {

+		href: function(elem){

+			return elem.getAttribute("href");

+		}

+	},

+	relative: {

+		"+": function(checkSet, part){

+			var isPartStr = typeof part === "string",

+				isTag = isPartStr && !/\W/.test(part),

+				isPartStrNotTag = isPartStr && !isTag;

+

+			if ( isTag ) {

+				part = part.toLowerCase();

+			}

+

+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {

+				if ( (elem = checkSet[i]) ) {

+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

+

+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?

+						elem || false :

+						elem === part;

+				}

+			}

+

+			if ( isPartStrNotTag ) {

+				Sizzle.filter( part, checkSet, true );

+			}

+		},

+		">": function(checkSet, part){

+			var isPartStr = typeof part === "string",

+				elem, i = 0, l = checkSet.length;

+

+			if ( isPartStr && !/\W/.test(part) ) {

+				part = part.toLowerCase();

+

+				for ( ; i < l; i++ ) {

+					elem = checkSet[i];

+					if ( elem ) {

+						var parent = elem.parentNode;

+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;

+					}

+				}

+			} else {

+				for ( ; i < l; i++ ) {

+					elem = checkSet[i];

+					if ( elem ) {

+						checkSet[i] = isPartStr ?

+							elem.parentNode :

+							elem.parentNode === part;

+					}

+				}

+

+				if ( isPartStr ) {

+					Sizzle.filter( part, checkSet, true );

+				}

+			}

+		},

+		"": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck, nodeCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				part = part.toLowerCase();

+				nodeCheck = part;

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);

+		},

+		"~": function(checkSet, part, isXML){

+			var doneName = done++, checkFn = dirCheck, nodeCheck;

+

+			if ( typeof part === "string" && !/\W/.test(part) ) {

+				part = part.toLowerCase();

+				nodeCheck = part;

+				checkFn = dirNodeCheck;

+			}

+

+			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);

+		}

+	},

+	find: {

+		ID: function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? [m] : [];

+			}

+		},

+		NAME: function(match, context){

+			if ( typeof context.getElementsByName !== "undefined" ) {

+				var ret = [], results = context.getElementsByName(match[1]);

+

+				for ( var i = 0, l = results.length; i < l; i++ ) {

+					if ( results[i].getAttribute("name") === match[1] ) {

+						ret.push( results[i] );

+					}

+				}

+

+				return ret.length === 0 ? null : ret;

+			}

+		},

+		TAG: function(match, context){

+			return context.getElementsByTagName(match[1]);

+		}

+	},

+	preFilter: {

+		CLASS: function(match, curLoop, inplace, result, not, isXML){

+			match = " " + match[1].replace(/\\/g, "") + " ";

+

+			if ( isXML ) {

+				return match;

+			}

+

+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {

+				if ( elem ) {

+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {

+						if ( !inplace ) {

+							result.push( elem );

+						}

+					} else if ( inplace ) {

+						curLoop[i] = false;

+					}

+				}

+			}

+

+			return false;

+		},

+		ID: function(match){

+			return match[1].replace(/\\/g, "");

+		},

+		TAG: function(match, curLoop){

+			return match[1].toLowerCase();

+		},

+		CHILD: function(match){

+			if ( match[1] === "nth" ) {

+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'

+				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(

+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||

+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

+

+				// calculate the numbers (first)n+(last) including if they are negative

+				match[2] = (test[1] + (test[2] || 1)) - 0;

+				match[3] = test[3] - 0;

+			}

+

+			// TODO: Move to normal caching system

+			match[0] = done++;

+

+			return match;

+		},

+		ATTR: function(match, curLoop, inplace, result, not, isXML){

+			var name = match[1].replace(/\\/g, "");

+			

+			if ( !isXML && Expr.attrMap[name] ) {

+				match[1] = Expr.attrMap[name];

+			}

+

+			if ( match[2] === "~=" ) {

+				match[4] = " " + match[4] + " ";

+			}

+

+			return match;

+		},

+		PSEUDO: function(match, curLoop, inplace, result, not){

+			if ( match[1] === "not" ) {

+				// If we're dealing with a complex expression, or a simple one

+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {

+					match[3] = Sizzle(match[3], null, null, curLoop);

+				} else {

+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);

+					if ( !inplace ) {

+						result.push.apply( result, ret );

+					}

+					return false;

+				}

+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {

+				return true;

+			}

+			

+			return match;

+		},

+		POS: function(match){

+			match.unshift( true );

+			return match;

+		}

+	},

+	filters: {

+		enabled: function(elem){

+			return elem.disabled === false && elem.type !== "hidden";

+		},

+		disabled: function(elem){

+			return elem.disabled === true;

+		},

+		checked: function(elem){

+			return elem.checked === true;

+		},

+		selected: function(elem){

+			// Accessing this property makes selected-by-default

+			// options in Safari work properly

+			elem.parentNode.selectedIndex;

+			return elem.selected === true;

+		},

+		parent: function(elem){

+			return !!elem.firstChild;

+		},

+		empty: function(elem){

+			return !elem.firstChild;

+		},

+		has: function(elem, i, match){

+			return !!Sizzle( match[3], elem ).length;

+		},

+		header: function(elem){

+			return (/h\d/i).test( elem.nodeName );

+		},

+		text: function(elem){

+			return "text" === elem.type;

+		},

+		radio: function(elem){

+			return "radio" === elem.type;

+		},

+		checkbox: function(elem){

+			return "checkbox" === elem.type;

+		},

+		file: function(elem){

+			return "file" === elem.type;

+		},

+		password: function(elem){

+			return "password" === elem.type;

+		},

+		submit: function(elem){

+			return "submit" === elem.type;

+		},

+		image: function(elem){

+			return "image" === elem.type;

+		},

+		reset: function(elem){

+			return "reset" === elem.type;

+		},

+		button: function(elem){

+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";

+		},

+		input: function(elem){

+			return (/input|select|textarea|button/i).test(elem.nodeName);

+		}

+	},

+	setFilters: {

+		first: function(elem, i){

+			return i === 0;

+		},

+		last: function(elem, i, match, array){

+			return i === array.length - 1;

+		},

+		even: function(elem, i){

+			return i % 2 === 0;

+		},

+		odd: function(elem, i){

+			return i % 2 === 1;

+		},

+		lt: function(elem, i, match){

+			return i < match[3] - 0;

+		},

+		gt: function(elem, i, match){

+			return i > match[3] - 0;

+		},

+		nth: function(elem, i, match){

+			return match[3] - 0 === i;

+		},

+		eq: function(elem, i, match){

+			return match[3] - 0 === i;

+		}

+	},

+	filter: {

+		PSEUDO: function(elem, match, i, array){

+			var name = match[1], filter = Expr.filters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			} else if ( name === "contains" ) {

+				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;

+			} else if ( name === "not" ) {

+				var not = match[3];

+

+				for ( var j = 0, l = not.length; j < l; j++ ) {

+					if ( not[j] === elem ) {

+						return false;

+					}

+				}

+

+				return true;

+			} else {

+				Sizzle.error( "Syntax error, unrecognized expression: " + name );

+			}

+		},

+		CHILD: function(elem, match){

+			var type = match[1], node = elem;

+			switch (type) {

+				case 'only':

+				case 'first':

+					while ( (node = node.previousSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					if ( type === "first" ) { 

+						return true; 

+					}

+					node = elem;

+				case 'last':

+					while ( (node = node.nextSibling) )	 {

+						if ( node.nodeType === 1 ) { 

+							return false; 

+						}

+					}

+					return true;

+				case 'nth':

+					var first = match[2], last = match[3];

+

+					if ( first === 1 && last === 0 ) {

+						return true;

+					}

+					

+					var doneName = match[0],

+						parent = elem.parentNode;

+	

+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {

+						var count = 0;

+						for ( node = parent.firstChild; node; node = node.nextSibling ) {

+							if ( node.nodeType === 1 ) {

+								node.nodeIndex = ++count;

+							}

+						} 

+						parent.sizcache = doneName;

+					}

+					

+					var diff = elem.nodeIndex - last;

+					if ( first === 0 ) {

+						return diff === 0;

+					} else {

+						return ( diff % first === 0 && diff / first >= 0 );

+					}

+			}

+		},

+		ID: function(elem, match){

+			return elem.nodeType === 1 && elem.getAttribute("id") === match;

+		},

+		TAG: function(elem, match){

+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;

+		},

+		CLASS: function(elem, match){

+			return (" " + (elem.className || elem.getAttribute("class")) + " ")

+				.indexOf( match ) > -1;

+		},

+		ATTR: function(elem, match){

+			var name = match[1],

+				result = Expr.attrHandle[ name ] ?

+					Expr.attrHandle[ name ]( elem ) :

+					elem[ name ] != null ?

+						elem[ name ] :

+						elem.getAttribute( name ),

+				value = result + "",

+				type = match[2],

+				check = match[4];

+

+			return result == null ?

+				type === "!=" :

+				type === "=" ?

+				value === check :

+				type === "*=" ?

+				value.indexOf(check) >= 0 :

+				type === "~=" ?

+				(" " + value + " ").indexOf(check) >= 0 :

+				!check ?

+				value && result !== false :

+				type === "!=" ?

+				value !== check :

+				type === "^=" ?

+				value.indexOf(check) === 0 :

+				type === "$=" ?

+				value.substr(value.length - check.length) === check :

+				type === "|=" ?

+				value === check || value.substr(0, check.length + 1) === check + "-" :

+				false;

+		},

+		POS: function(elem, match, i, array){

+			var name = match[2], filter = Expr.setFilters[ name ];

+

+			if ( filter ) {

+				return filter( elem, i, match, array );

+			}

+		}

+	}

+};

+

+var origPOS = Expr.match.POS,

+	fescape = function(all, num){

+		return "\\" + (num - 0 + 1);

+	};

+

+for ( var type in Expr.match ) {

+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );

+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );

+}

+

+var makeArray = function(array, results) {

+	array = Array.prototype.slice.call( array, 0 );

+

+	if ( results ) {

+		results.push.apply( results, array );

+		return results;

+	}

+	

+	return array;

+};

+

+// Perform a simple check to determine if the browser is capable of

+// converting a NodeList to an array using builtin methods.

+// Also verifies that the returned array holds DOM nodes

+// (which is not the case in the Blackberry browser)

+try {

+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;

+

+// Provide a fallback method if it does not work

+} catch(e){

+	makeArray = function(array, results) {

+		var ret = results || [], i = 0;

+

+		if ( toString.call(array) === "[object Array]" ) {

+			Array.prototype.push.apply( ret, array );

+		} else {

+			if ( typeof array.length === "number" ) {

+				for ( var l = array.length; i < l; i++ ) {

+					ret.push( array[i] );

+				}

+			} else {

+				for ( ; array[i]; i++ ) {

+					ret.push( array[i] );

+				}

+			}

+		}

+

+		return ret;

+	};

+}

+

+var sortOrder;

+

+if ( document.documentElement.compareDocumentPosition ) {

+	sortOrder = function( a, b ) {

+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.compareDocumentPosition ? -1 : 1;

+		}

+

+		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( "sourceIndex" in document.documentElement ) {

+	sortOrder = function( a, b ) {

+		if ( !a.sourceIndex || !b.sourceIndex ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.sourceIndex ? -1 : 1;

+		}

+

+		var ret = a.sourceIndex - b.sourceIndex;

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+} else if ( document.createRange ) {

+	sortOrder = function( a, b ) {

+		if ( !a.ownerDocument || !b.ownerDocument ) {

+			if ( a == b ) {

+				hasDuplicate = true;

+			}

+			return a.ownerDocument ? -1 : 1;

+		}

+

+		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();

+		aRange.setStart(a, 0);

+		aRange.setEnd(a, 0);

+		bRange.setStart(b, 0);

+		bRange.setEnd(b, 0);

+		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);

+		if ( ret === 0 ) {

+			hasDuplicate = true;

+		}

+		return ret;

+	};

+}

+

+// Utility function for retreiving the text value of an array of DOM nodes

+Sizzle.getText = function( elems ) {

+	var ret = "", elem;

+

+	for ( var i = 0; elems[i]; i++ ) {

+		elem = elems[i];

+

+		// Get the text from text nodes and CDATA nodes

+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {

+			ret += elem.nodeValue;

+

+		// Traverse everything else, except comment nodes

+		} else if ( elem.nodeType !== 8 ) {

+			ret += Sizzle.getText( elem.childNodes );

+		}

+	}

+

+	return ret;

+};

+

+// Check to see if the browser returns elements by name when

+// querying by getElementById (and provide a workaround)

+(function(){

+	// We're going to inject a fake input element with a specified name

+	var form = document.createElement("div"),

+		id = "script" + (new Date()).getTime();

+	form.innerHTML = "<a name='" + id + "'/>";

+

+	// Inject it into the root element, check its status, and remove it quickly

+	var root = document.documentElement;

+	root.insertBefore( form, root.firstChild );

+

+	// The workaround has to do additional checks after a getElementById

+	// Which slows things down for other browsers (hence the branching)

+	if ( document.getElementById( id ) ) {

+		Expr.find.ID = function(match, context, isXML){

+			if ( typeof context.getElementById !== "undefined" && !isXML ) {

+				var m = context.getElementById(match[1]);

+				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];

+			}

+		};

+

+		Expr.filter.ID = function(elem, match){

+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");

+			return elem.nodeType === 1 && node && node.nodeValue === match;

+		};

+	}

+

+	root.removeChild( form );

+	root = form = null; // release memory in IE

+})();

+

+(function(){

+	// Check to see if the browser returns only elements

+	// when doing getElementsByTagName("*")

+

+	// Create a fake element

+	var div = document.createElement("div");

+	div.appendChild( document.createComment("") );

+

+	// Make sure no comments are found

+	if ( div.getElementsByTagName("*").length > 0 ) {

+		Expr.find.TAG = function(match, context){

+			var results = context.getElementsByTagName(match[1]);

+

+			// Filter out possible comments

+			if ( match[1] === "*" ) {

+				var tmp = [];

+

+				for ( var i = 0; results[i]; i++ ) {

+					if ( results[i].nodeType === 1 ) {

+						tmp.push( results[i] );

+					}

+				}

+

+				results = tmp;

+			}

+

+			return results;

+		};

+	}

+

+	// Check to see if an attribute returns normalized href attributes

+	div.innerHTML = "<a href='#'></a>";

+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&

+			div.firstChild.getAttribute("href") !== "#" ) {

+		Expr.attrHandle.href = function(elem){

+			return elem.getAttribute("href", 2);

+		};

+	}

+

+	div = null; // release memory in IE

+})();

+

+if ( document.querySelectorAll ) {

+	(function(){

+		var oldSizzle = Sizzle, div = document.createElement("div");

+		div.innerHTML = "<p class='TEST'></p>";

+

+		// Safari can't handle uppercase or unicode characters when

+		// in quirks mode.

+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {

+			return;

+		}

+	

+		Sizzle = function(query, context, extra, seed){

+			context = context || document;

+

+			// Only use querySelectorAll on non-XML documents

+			// (ID selectors don't work in non-HTML documents)

+			if ( !seed && context.nodeType === 9 && !Sizzle.isXML(context) ) {

+				try {

+					return makeArray( context.querySelectorAll(query), extra );

+				} catch(e){}

+			}

+		

+			return oldSizzle(query, context, extra, seed);

+		};

+

+		for ( var prop in oldSizzle ) {

+			Sizzle[ prop ] = oldSizzle[ prop ];

+		}

+

+		div = null; // release memory in IE

+	})();

+}

+

+(function(){

+	var div = document.createElement("div");

+

+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

+

+	// Opera can't find a second classname (in 9.6)

+	// Also, make sure that getElementsByClassName actually exists

+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {

+		return;

+	}

+

+	// Safari caches class attributes, doesn't catch changes (in 3.2)

+	div.lastChild.className = "e";

+

+	if ( div.getElementsByClassName("e").length === 1 ) {

+		return;

+	}

+	

+	Expr.order.splice(1, 0, "CLASS");

+	Expr.find.CLASS = function(match, context, isXML) {

+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {

+			return context.getElementsByClassName(match[1]);

+		}

+	};

+

+	div = null; // release memory in IE

+})();

+

+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 && !isXML ){

+					elem.sizcache = doneName;

+					elem.sizset = i;

+				}

+

+				if ( elem.nodeName.toLowerCase() === cur ) {

+					match = elem;

+					break;

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {

+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {

+		var elem = checkSet[i];

+		if ( elem ) {

+			elem = elem[dir];

+			var match = false;

+

+			while ( elem ) {

+				if ( elem.sizcache === doneName ) {

+					match = checkSet[elem.sizset];

+					break;

+				}

+

+				if ( elem.nodeType === 1 ) {

+					if ( !isXML ) {

+						elem.sizcache = doneName;

+						elem.sizset = i;

+					}

+					if ( typeof cur !== "string" ) {

+						if ( elem === cur ) {

+							match = true;

+							break;

+						}

+

+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {

+						match = elem;

+						break;

+					}

+				}

+

+				elem = elem[dir];

+			}

+

+			checkSet[i] = match;

+		}

+	}

+}

+

+Sizzle.contains = document.compareDocumentPosition ? function(a, b){

+	return !!(a.compareDocumentPosition(b) & 16);

+} : function(a, b){

+	return a !== b && (a.contains ? a.contains(b) : true);

+};

+

+Sizzle.isXML = function(elem){

+	// documentElement is verified for cases where it doesn't yet exist

+	// (such as loading iframes in IE - #4833) 

+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;

+	return documentElement ? documentElement.nodeName !== "HTML" : false;

+};

+

+var posProcess = function(selector, context){

+	var tmpSet = [], later = "", match,

+		root = context.nodeType ? [context] : context;

+

+	// Position selectors must be done after the filter

+	// And so must :not(positional) so we move all PSEUDOs to the end

+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {

+		later += match[0];

+		selector = selector.replace( Expr.match.PSEUDO, "" );

+	}

+

+	selector = Expr.relative[selector] ? selector + "*" : selector;

+

+	for ( var i = 0, l = root.length; i < l; i++ ) {

+		Sizzle( selector, root[i], tmpSet );

+	}

+

+	return Sizzle.filter( later, tmpSet );

+};

+

+// EXPOSE

+

+window.tinymce.dom.Sizzle = Sizzle;

+

+})();

+

+

+(function(tinymce) {

+	// Shorten names

+	var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;

+

+	tinymce.create('tinymce.dom.EventUtils', {

+		EventUtils : function() {

+			this.inits = [];

+			this.events = [];

+		},

+

+		add : function(o, n, f, s) {

+			var cb, t = this, el = t.events, r;

+

+			if (n instanceof Array) {

+				r = [];

+

+				each(n, function(n) {

+					r.push(t.add(o, n, f, s));

+				});

+

+				return r;

+			}

+

+			// Handle array

+			if (o && o.hasOwnProperty && o instanceof Array) {

+				r = [];

+

+				each(o, function(o) {

+					o = DOM.get(o);

+					r.push(t.add(o, n, f, s));

+				});

+

+				return r;

+			}

+

+			o = DOM.get(o);

+

+			if (!o)

+				return;

+

+			// Setup event callback

+			cb = function(e) {

+				// Is all events disabled

+				if (t.disabled)

+					return;

+

+				e = e || window.event;

+

+				// Patch in target, preventDefault and stopPropagation in IE it's W3C valid

+				if (e && isIE) {

+					if (!e.target)

+						e.target = e.srcElement;

+

+					// Patch in preventDefault, stopPropagation methods for W3C compatibility

+					tinymce.extend(e, t._stoppers);

+				}

+

+				if (!s)

+					return f(e);

+

+				return f.call(s, e);

+			};

+

+			if (n == 'unload') {

+				tinymce.unloads.unshift({func : cb});

+				return cb;

+			}

+

+			if (n == 'init') {

+				if (t.domLoaded)

+					cb();

+				else

+					t.inits.push(cb);

+

+				return cb;

+			}

+

+			// Store away listener reference

+			el.push({

+				obj : o,

+				name : n,

+				func : f,

+				cfunc : cb,

+				scope : s

+			});

+

+			t._add(o, n, cb);

+

+			return f;

+		},

+

+		remove : function(o, n, f) {

+			var t = this, a = t.events, s = false, r;

+

+			// Handle array

+			if (o && o.hasOwnProperty && o instanceof Array) {

+				r = [];

+

+				each(o, function(o) {

+					o = DOM.get(o);

+					r.push(t.remove(o, n, f));

+				});

+

+				return r;

+			}

+

+			o = DOM.get(o);

+

+			each(a, function(e, i) {

+				if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {

+					a.splice(i, 1);

+					t._remove(o, n, e.cfunc);

+					s = true;

+					return false;

+				}

+			});

+

+			return s;

+		},

+

+		clear : function(o) {

+			var t = this, a = t.events, i, e;

+

+			if (o) {

+				o = DOM.get(o);

+

+				for (i = a.length - 1; i >= 0; i--) {

+					e = a[i];

+

+					if (e.obj === o) {

+						t._remove(e.obj, e.name, e.cfunc);

+						e.obj = e.cfunc = null;

+						a.splice(i, 1);

+					}

+				}

+			}

+		},

+

+		cancel : function(e) {

+			if (!e)

+				return false;

+

+			this.stop(e);

+

+			return this.prevent(e);

+		},

+

+		stop : function(e) {

+			if (e.stopPropagation)

+				e.stopPropagation();

+			else

+				e.cancelBubble = true;

+

+			return false;

+		},

+

+		prevent : function(e) {

+			if (e.preventDefault)

+				e.preventDefault();

+			else

+				e.returnValue = false;

+

+			return false;

+		},

+

+		destroy : function() {

+			var t = this;

+

+			each(t.events, function(e, i) {

+				t._remove(e.obj, e.name, e.cfunc);

+				e.obj = e.cfunc = null;

+			});

+

+			t.events = [];

+			t = null;

+		},

+

+		_add : function(o, n, f) {

+			if (o.attachEvent)

+				o.attachEvent('on' + n, f);

+			else if (o.addEventListener)

+				o.addEventListener(n, f, false);

+			else

+				o['on' + n] = f;

+		},

+

+		_remove : function(o, n, f) {

+			if (o) {

+				try {

+					if (o.detachEvent)

+						o.detachEvent('on' + n, f);

+					else if (o.removeEventListener)

+						o.removeEventListener(n, f, false);

+					else

+						o['on' + n] = null;

+				} catch (ex) {

+					// Might fail with permission denined on IE so we just ignore that

+				}

+			}

+		},

+

+		_pageInit : function(win) {

+			var t = this;

+

+			// Keep it from running more than once

+			if (t.domLoaded)

+				return;

+

+			t.domLoaded = true;

+

+			each(t.inits, function(c) {

+				c();

+			});

+

+			t.inits = [];

+		},

+

+		_wait : function(win) {

+			var t = this, doc = win.document;

+

+			// No need since the document is already loaded

+			if (win.tinyMCE_GZ && tinyMCE_GZ.loaded) {

+				t.domLoaded = 1;

+				return;

+			}

+

+			// Use IE method

+			if (doc.attachEvent) {

+				doc.attachEvent("onreadystatechange", function() {

+					if (doc.readyState === "complete") {

+						doc.detachEvent("onreadystatechange", arguments.callee);

+						t._pageInit(win);

+					}

+				});

+

+				if (doc.documentElement.doScroll && win == win.top) {

+					(function() {

+						if (t.domLoaded)

+							return;

+

+						try {

+							// If IE is used, use the trick by Diego Perini licensed under MIT by request to the author.

+							// http://javascript.nwbox.com/IEContentLoaded/

+							doc.documentElement.doScroll("left");

+						} catch (ex) {

+							setTimeout(arguments.callee, 0);

+							return;

+						}

+

+						t._pageInit(win);

+					})();

+				}

+			} else if (doc.addEventListener) {

+				t._add(win, 'DOMContentLoaded', function() {

+					t._pageInit(win);

+				});

+			}

+

+			t._add(win, 'load', function() {

+				t._pageInit(win);

+			});

+		},

+

+		_stoppers : {

+			preventDefault : function() {

+				this.returnValue = false;

+			},

+

+			stopPropagation : function() {

+				this.cancelBubble = true;

+			}

+		}

+	});

+

+	Event = tinymce.dom.Event = new tinymce.dom.EventUtils();

+

+	// Dispatch DOM content loaded event for IE and Safari

+	Event._wait(window);

+

+	tinymce.addUnload(function() {

+		Event.destroy();

+	});

+})(tinymce);

+

+(function(tinymce) {

+	tinymce.dom.Element = function(id, settings) {

+		var t = this, dom, el;

+

+		t.settings = settings = settings || {};

+		t.id = id;

+		t.dom = dom = settings.dom || tinymce.DOM;

+

+		// Only IE leaks DOM references, this is a lot faster

+		if (!tinymce.isIE)

+			el = dom.get(t.id);

+

+		tinymce.each(

+				('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' + 

+				'setAttrib,setAttribs,getAttrib,addClass,removeClass,' + 

+				'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' + 

+				'isHidden,setHTML,get').split(/,/)

+			, function(k) {

+				t[k] = function() {

+					var a = [id], i;

+

+					for (i = 0; i < arguments.length; i++)

+						a.push(arguments[i]);

+

+					a = dom[k].apply(dom, a);

+					t.update(k);

+

+					return a;

+				};

+		});

+

+		tinymce.extend(t, {

+			on : function(n, f, s) {

+				return tinymce.dom.Event.add(t.id, n, f, s);

+			},

+

+			getXY : function() {

+				return {

+					x : parseInt(t.getStyle('left')),

+					y : parseInt(t.getStyle('top'))

+				};

+			},

+

+			getSize : function() {

+				var n = dom.get(t.id);

+

+				return {

+					w : parseInt(t.getStyle('width') || n.clientWidth),

+					h : parseInt(t.getStyle('height') || n.clientHeight)

+				};

+			},

+

+			moveTo : function(x, y) {

+				t.setStyles({left : x, top : y});

+			},

+

+			moveBy : function(x, y) {

+				var p = t.getXY();

+

+				t.moveTo(p.x + x, p.y + y);

+			},

+

+			resizeTo : function(w, h) {

+				t.setStyles({width : w, height : h});

+			},

+

+			resizeBy : function(w, h) {

+				var s = t.getSize();

+

+				t.resizeTo(s.w + w, s.h + h);

+			},

+

+			update : function(k) {

+				var b;

+

+				if (tinymce.isIE6 && settings.blocker) {

+					k = k || '';

+

+					// Ignore getters

+					if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)

+						return;

+

+					// Remove blocker on remove

+					if (k == 'remove') {

+						dom.remove(t.blocker);

+						return;

+					}

+

+					if (!t.blocker) {

+						t.blocker = dom.uniqueId();

+						b = dom.add(settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});

+						dom.setStyle(b, 'opacity', 0);

+					} else

+						b = dom.get(t.blocker);

+

+					dom.setStyles(b, {

+						left : t.getStyle('left', 1),

+						top : t.getStyle('top', 1),

+						width : t.getStyle('width', 1),

+						height : t.getStyle('height', 1),

+						display : t.getStyle('display', 1),

+						zIndex : parseInt(t.getStyle('zIndex', 1) || 0) - 1

+					});

+				}

+			}

+		});

+	};

+})(tinymce);

+

+(function(tinymce) {

+	function trimNl(s) {

+		return s.replace(/[\n\r]+/g, '');

+	};

+

+	// Shorten names

+	var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;

+

+	tinymce.create('tinymce.dom.Selection', {

+		Selection : function(dom, win, serializer) {

+			var t = this;

+

+			t.dom = dom;

+			t.win = win;

+			t.serializer = serializer;

+

+			// Add events

+			each([

+				'onBeforeSetContent',

+

+				'onBeforeGetContent',

+

+				'onSetContent',

+

+				'onGetContent'

+			], function(e) {

+				t[e] = new tinymce.util.Dispatcher(t);

+			});

+

+			// No W3C Range support

+			if (!t.win.getSelection)

+				t.tridentSel = new tinymce.dom.TridentSelection(t);

+

+			if (tinymce.isIE && dom.boxModel)

+				this._fixIESelection();

+

+			// Prevent leaks

+			tinymce.addUnload(t.destroy, t);

+		},

+

+		setCursorLocation: function(node, offset) {

+			var t = this; var r = t.dom.createRng();

+			r.setStart(node, offset);

+			r.setEnd(node, offset);

+			t.setRng(r);

+			t.collapse(false);

+		},

+		getContent : function(s) {

+			var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;

+

+			s = s || {};

+			wb = wa = '';

+			s.get = true;

+			s.format = s.format || 'html';

+			s.forced_root_block = '';

+			t.onBeforeGetContent.dispatch(t, s);

+

+			if (s.format == 'text')

+				return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));

+

+			if (r.cloneContents) {

+				n = r.cloneContents();

+

+				if (n)

+					e.appendChild(n);

+			} else if (is(r.item) || is(r.htmlText)) {

+				// IE will produce invalid markup if elements are present that

+				// it doesn't understand like custom elements or HTML5 elements.

+				// Adding a BR in front of the contents and then remoiving it seems to fix it though.

+				e.innerHTML = '<br>' + (r.item ? r.item(0).outerHTML : r.htmlText);

+				e.removeChild(e.firstChild);

+			} else

+				e.innerHTML = r.toString();

+

+			// Keep whitespace before and after

+			if (/^\s/.test(e.innerHTML))

+				wb = ' ';

+

+			if (/\s+$/.test(e.innerHTML))

+				wa = ' ';

+

+			s.getInner = true;

+

+			s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;

+			t.onGetContent.dispatch(t, s);

+

+			return s.content;

+		},

+

+		setContent : function(content, args) {

+			var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp;

+

+			args = args || {format : 'html'};

+			args.set = true;

+			content = args.content = content;

+

+			// Dispatch before set content event

+			if (!args.no_events)

+				self.onBeforeSetContent.dispatch(self, args);

+

+			content = args.content;

+

+			if (rng.insertNode) {

+				// Make caret marker since insertNode places the caret in the beginning of text after insert

+				content += '<span id="__caret">_</span>';

+

+				// Delete and insert new node

+				if (rng.startContainer == doc && rng.endContainer == doc) {

+					// WebKit will fail if the body is empty since the range is then invalid and it can't insert contents

+					doc.body.innerHTML = content;

+				} else {

+					rng.deleteContents();

+

+					if (doc.body.childNodes.length == 0) {

+						doc.body.innerHTML = content;

+					} else {

+						// createContextualFragment doesn't exists in IE 9 DOMRanges

+						if (rng.createContextualFragment) {

+							rng.insertNode(rng.createContextualFragment(content));

+						} else {

+							// Fake createContextualFragment call in IE 9

+							frag = doc.createDocumentFragment();

+							temp = doc.createElement('div');

+

+							frag.appendChild(temp);

+							temp.outerHTML = content;

+

+							rng.insertNode(frag);

+						}

+					}

+				}

+

+				// Move to caret marker

+				caretNode = self.dom.get('__caret');

+

+				// Make sure we wrap it compleatly, Opera fails with a simple select call

+				rng = doc.createRange();

+				rng.setStartBefore(caretNode);

+				rng.setEndBefore(caretNode);

+				self.setRng(rng);

+

+				// Remove the caret position

+				self.dom.remove('__caret');

+

+				try {

+					self.setRng(rng);

+				} catch (ex) {

+					// Might fail on Opera for some odd reason

+				}

+			} else {

+				if (rng.item) {

+					// Delete content and get caret text selection

+					doc.execCommand('Delete', false, null);

+					rng = self.getRng();

+				}

+

+				// Explorer removes spaces from the beginning of pasted contents

+				if (/^\s+/.test(content)) {

+					rng.pasteHTML('<span id="__mce_tmp">_</span>' + content);

+					self.dom.remove('__mce_tmp');

+				} else

+					rng.pasteHTML(content);

+			}

+

+			// Dispatch set content event

+			if (!args.no_events)

+				self.onSetContent.dispatch(self, args);

+		},

+

+		getStart : function() {

+			var rng = this.getRng(), startElement, parentElement, checkRng, node;

+

+			if (rng.duplicate || rng.item) {

+				// Control selection, return first item

+				if (rng.item)

+					return rng.item(0);

+

+				// Get start element

+				checkRng = rng.duplicate();

+				checkRng.collapse(1);

+				startElement = checkRng.parentElement();

+

+				// Check if range parent is inside the start element, then return the inner parent element

+				// This will fix issues when a single element is selected, IE would otherwise return the wrong start element

+				parentElement = node = rng.parentElement();

+				while (node = node.parentNode) {

+					if (node == startElement) {

+						startElement = parentElement;

+						break;

+					}

+				}

+

+				return startElement;

+			} else {

+				startElement = rng.startContainer;

+

+				if (startElement.nodeType == 1 && startElement.hasChildNodes())

+					startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];

+

+				if (startElement && startElement.nodeType == 3)

+					return startElement.parentNode;

+

+				return startElement;

+			}

+		},

+

+		getEnd : function() {

+			var t = this, r = t.getRng(), e, eo;

+

+			if (r.duplicate || r.item) {

+				if (r.item)

+					return r.item(0);

+

+				r = r.duplicate();

+				r.collapse(0);

+				e = r.parentElement();

+

+				if (e && e.nodeName == 'BODY')

+					return e.lastChild || e;

+

+				return e;

+			} else {

+				e = r.endContainer;

+				eo = r.endOffset;

+

+				if (e.nodeType == 1 && e.hasChildNodes())

+					e = e.childNodes[eo > 0 ? eo - 1 : eo];

+

+				if (e && e.nodeType == 3)

+					return e.parentNode;

+

+				return e;

+			}

+		},

+

+		getBookmark : function(type, normalized) {

+			var t = this, dom = t.dom, rng, rng2, id, collapsed, name, element, index, chr = '\uFEFF', styles;

+

+			function findIndex(name, element) {

+				var index = 0;

+

+				each(dom.select(name), function(node, i) {

+					if (node == element)

+						index = i;

+				});

+

+				return index;

+			};

+

+			if (type == 2) {

+				function getLocation() {

+					var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};

+

+					function getPoint(rng, start) {

+						var container = rng[start ? 'startContainer' : 'endContainer'],

+							offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;

+

+						if (container.nodeType == 3) {

+							if (normalized) {

+								for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)

+									offset += node.nodeValue.length;

+							}

+

+							point.push(offset);

+						} else {

+							childNodes = container.childNodes;

+

+							if (offset >= childNodes.length && childNodes.length) {

+								after = 1;

+								offset = Math.max(0, childNodes.length - 1);

+							}

+

+							point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);

+						}

+

+						for (; container && container != root; container = container.parentNode)

+							point.push(t.dom.nodeIndex(container, normalized));

+

+						return point;

+					};

+

+					bookmark.start = getPoint(rng, true);

+

+					if (!t.isCollapsed())

+						bookmark.end = getPoint(rng);

+

+					return bookmark;

+				};

+

+				if (t.tridentSel)

+					return t.tridentSel.getBookmark(type);

+

+				return getLocation();

+			}

+

+			// Handle simple range

+			if (type)

+				return {rng : t.getRng()};

+

+			rng = t.getRng();

+			id = dom.uniqueId();

+			collapsed = tinyMCE.activeEditor.selection.isCollapsed();

+			styles = 'overflow:hidden;line-height:0px';

+

+			// Explorer method

+			if (rng.duplicate || rng.item) {

+				// Text selection

+				if (!rng.item) {

+					rng2 = rng.duplicate();

+

+					try {

+						// Insert start marker

+						rng.collapse();

+						rng.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_start" style="' + styles + '">' + chr + '</span>');

+

+						// Insert end marker

+						if (!collapsed) {

+							rng2.collapse(false);

+

+							// Detect the empty space after block elements in IE and move the end back one character <p></p>] becomes <p>]</p>

+							rng.moveToElementText(rng2.parentElement());

+							if (rng.compareEndPoints('StartToEnd', rng2) == 0)

+								rng2.move('character', -1);

+

+							rng2.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_end" style="' + styles + '">' + chr + '</span>');

+						}

+					} catch (ex) {

+						// IE might throw unspecified error so lets ignore it

+						return null;

+					}

+				} else {

+					// Control selection

+					element = rng.item(0);

+					name = element.nodeName;

+

+					return {name : name, index : findIndex(name, element)};

+				}

+			} else {

+				element = t.getNode();

+				name = element.nodeName;

+				if (name == 'IMG')

+					return {name : name, index : findIndex(name, element)};

+

+				// W3C method

+				rng2 = rng.cloneRange();

+

+				// Insert end marker

+				if (!collapsed) {

+					rng2.collapse(false);

+					rng2.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_end', style : styles}, chr));

+				}

+

+				rng.collapse(true);

+				rng.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_start', style : styles}, chr));

+			}

+

+			t.moveToBookmark({id : id, keep : 1});

+

+			return {id : id};

+		},

+

+		moveToBookmark : function(bookmark) {

+			var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;

+

+			if (bookmark) {

+				if (bookmark.start) {

+					rng = dom.createRng();

+					root = dom.getRoot();

+

+					function setEndPoint(start) {

+						var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;

+

+						if (point) {

+							offset = point[0];

+

+							// Find container node

+							for (node = root, i = point.length - 1; i >= 1; i--) {

+								children = node.childNodes;

+

+								if (point[i] > children.length - 1)

+									return;

+

+								node = children[point[i]];

+							}

+

+							// Move text offset to best suitable location

+							if (node.nodeType === 3)

+								offset = Math.min(point[0], node.nodeValue.length);

+

+							// Move element offset to best suitable location

+							if (node.nodeType === 1)

+								offset = Math.min(point[0], node.childNodes.length);

+

+							// Set offset within container node

+							if (start)

+								rng.setStart(node, offset);

+							else

+								rng.setEnd(node, offset);

+						}

+

+						return true;

+					};

+

+					if (t.tridentSel)

+						return t.tridentSel.moveToBookmark(bookmark);

+

+					if (setEndPoint(true) && setEndPoint()) {

+						t.setRng(rng);

+					}

+				} else if (bookmark.id) {

+					function restoreEndPoint(suffix) {

+						var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;

+

+						if (marker) {

+							node = marker.parentNode;

+

+							if (suffix == 'start') {

+								if (!keep) {

+									idx = dom.nodeIndex(marker);

+								} else {

+									node = marker.firstChild;

+									idx = 1;

+								}

+

+								startContainer = endContainer = node;

+								startOffset = endOffset = idx;

+							} else {

+								if (!keep) {

+									idx = dom.nodeIndex(marker);

+								} else {

+									node = marker.firstChild;

+									idx = 1;

+								}

+

+								endContainer = node;

+								endOffset = idx;

+							}

+

+							if (!keep) {

+								prev = marker.previousSibling;

+								next = marker.nextSibling;

+

+								// Remove all marker text nodes

+								each(tinymce.grep(marker.childNodes), function(node) {

+									if (node.nodeType == 3)

+										node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');

+								});

+

+								// Remove marker but keep children if for example contents where inserted into the marker

+								// Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature

+								while (marker = dom.get(bookmark.id + '_' + suffix))

+									dom.remove(marker, 1);

+

+								// If siblings are text nodes then merge them unless it's Opera since it some how removes the node

+								// and we are sniffing since adding a lot of detection code for a browser with 3% of the market isn't worth the effort. Sorry, Opera but it's just a fact

+								if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) {

+									idx = prev.nodeValue.length;

+									prev.appendData(next.nodeValue);

+									dom.remove(next);

+

+									if (suffix == 'start') {

+										startContainer = endContainer = prev;

+										startOffset = endOffset = idx;

+									} else {

+										endContainer = prev;

+										endOffset = idx;

+									}

+								}

+							}

+						}

+					};

+

+					function addBogus(node) {

+						// Adds a bogus BR element for empty block elements or just a space on IE since it renders BR elements incorrectly

+						if (dom.isBlock(node) && !node.innerHTML)

+							node.innerHTML = !isIE ? '<br data-mce-bogus="1" />' : ' ';

+

+						return node;

+					};

+

+					// Restore start/end points

+					restoreEndPoint('start');

+					restoreEndPoint('end');

+

+					if (startContainer) {

+						rng = dom.createRng();

+						rng.setStart(addBogus(startContainer), startOffset);

+						rng.setEnd(addBogus(endContainer), endOffset);

+						t.setRng(rng);

+					}

+				} else if (bookmark.name) {

+					t.select(dom.select(bookmark.name)[bookmark.index]);

+				} else if (bookmark.rng)

+					t.setRng(bookmark.rng);

+			}

+		},

+

+		select : function(node, content) {

+			var t = this, dom = t.dom, rng = dom.createRng(), idx;

+

+			if (node) {

+				idx = dom.nodeIndex(node);

+				rng.setStart(node.parentNode, idx);

+				rng.setEnd(node.parentNode, idx + 1);

+

+				// Find first/last text node or BR element

+				if (content) {

+					function setPoint(node, start) {

+						var walker = new tinymce.dom.TreeWalker(node, node);

+

+						do {

+							// Text node

+							if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {

+								if (start)

+									rng.setStart(node, 0);

+								else

+									rng.setEnd(node, node.nodeValue.length);

+

+								return;

+							}

+

+							// BR element

+							if (node.nodeName == 'BR') {

+								if (start)

+									rng.setStartBefore(node);

+								else

+									rng.setEndBefore(node);

+

+								return;

+							}

+						} while (node = (start ? walker.next() : walker.prev()));

+					};

+

+					setPoint(node, 1);

+					setPoint(node);

+				}

+

+				t.setRng(rng);

+			}

+

+			return node;

+		},

+

+		isCollapsed : function() {

+			var t = this, r = t.getRng(), s = t.getSel();

+

+			if (!r || r.item)

+				return false;

+

+			if (r.compareEndPoints)

+				return r.compareEndPoints('StartToEnd', r) === 0;

+

+			return !s || r.collapsed;

+		},

+

+		collapse : function(to_start) {

+			var self = this, rng = self.getRng(), node;

+

+			// Control range on IE

+			if (rng.item) {

+				node = rng.item(0);

+				rng = self.win.document.body.createTextRange();

+				rng.moveToElementText(node);

+			}

+

+			rng.collapse(!!to_start);

+			self.setRng(rng);

+		},

+

+		getSel : function() {

+			var t = this, w = this.win;

+

+			return w.getSelection ? w.getSelection() : w.document.selection;

+		},

+

+		getRng : function(w3c) {

+			var t = this, s, r, elm, doc = t.win.document;

+

+			// Found tridentSel object then we need to use that one

+			if (w3c && t.tridentSel)

+				return t.tridentSel.getRangeAt(0);

+

+			try {

+				if (s = t.getSel())

+					r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : doc.createRange());

+			} catch (ex) {

+				// IE throws unspecified error here if TinyMCE is placed in a frame/iframe

+			}

+

+			// We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet

+			if (tinymce.isIE && r && r.setStart && doc.selection.createRange().item) {

+				elm = doc.selection.createRange().item(0);

+				r = doc.createRange();

+				r.setStartBefore(elm);

+				r.setEndAfter(elm);

+			}

+

+			// No range found then create an empty one

+			// This can occur when the editor is placed in a hidden container element on Gecko

+			// Or on IE when there was an exception

+			if (!r)

+				r = doc.createRange ? doc.createRange() : doc.body.createTextRange();

+

+			if (t.selectedRange && t.explicitRange) {

+				if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) {

+					// Safari, Opera and Chrome only ever select text which causes the range to change.

+					// This lets us use the originally set range if the selection hasn't been changed by the user.

+					r = t.explicitRange;

+				} else {

+					t.selectedRange = null;

+					t.explicitRange = null;

+				}

+			}

+

+			return r;

+		},

+

+		setRng : function(r) {

+			var s, t = this;

+			

+			if (!t.tridentSel) {

+				s = t.getSel();

+

+				if (s) {

+					t.explicitRange = r;

+

+					try {

+						s.removeAllRanges();

+					} catch (ex) {

+						// IE9 might throw errors here don't know why

+					}

+

+					s.addRange(r);

+					// adding range isn't always successful so we need to check range count otherwise an exception can occur

+					t.selectedRange = s.rangeCount > 0 ? s.getRangeAt(0) : null;

+				}

+			} else {

+				// Is W3C Range

+				if (r.cloneRange) {

+					t.tridentSel.addRange(r);

+					return;

+				}

+

+				// Is IE specific range

+				try {

+					r.select();

+				} catch (ex) {

+					// Needed for some odd IE bug #1843306

+				}

+			}

+		},

+

+		setNode : function(n) {

+			var t = this;

+

+			t.setContent(t.dom.getOuterHTML(n));

+

+			return n;

+		},

+

+		getNode : function() {

+			var t = this, rng = t.getRng(), sel = t.getSel(), elm, start = rng.startContainer, end = rng.endContainer;

+

+			// Range maybe lost after the editor is made visible again

+			if (!rng)

+				return t.dom.getRoot();

+

+			if (rng.setStart) {

+				elm = rng.commonAncestorContainer;

+

+				// Handle selection a image or other control like element such as anchors

+				if (!rng.collapsed) {

+					if (rng.startContainer == rng.endContainer) {

+						if (rng.endOffset - rng.startOffset < 2) {

+							if (rng.startContainer.hasChildNodes())

+								elm = rng.startContainer.childNodes[rng.startOffset];

+						}

+					}

+

+					// If the anchor node is a element instead of a text node then return this element

+					//if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) 

+					//	return sel.anchorNode.childNodes[sel.anchorOffset];

+

+					// Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent.

+					// This happens when you double click an underlined word in FireFox.

+					if (start.nodeType === 3 && end.nodeType === 3) {

+						function skipEmptyTextNodes(n, forwards) {

+							var orig = n;

+							while (n && n.nodeType === 3 && n.length === 0) {

+								n = forwards ? n.nextSibling : n.previousSibling;

+							}

+							return n || orig;

+						}

+						if (start.length === rng.startOffset) {

+							start = skipEmptyTextNodes(start.nextSibling, true);

+						} else {

+							start = start.parentNode;

+						}

+						if (rng.endOffset === 0) {

+							end = skipEmptyTextNodes(end.previousSibling, false);

+						} else {

+							end = end.parentNode;

+						}

+

+						if (start && start === end)

+							return start;

+					}

+				}

+

+				if (elm && elm.nodeType == 3)

+					return elm.parentNode;

+

+				return elm;

+			}

+

+			return rng.item ? rng.item(0) : rng.parentElement();

+		},

+

+		getSelectedBlocks : function(st, en) {

+			var t = this, dom = t.dom, sb, eb, n, bl = [];

+

+			sb = dom.getParent(st || t.getStart(), dom.isBlock);

+			eb = dom.getParent(en || t.getEnd(), dom.isBlock);

+

+			if (sb)

+				bl.push(sb);

+

+			if (sb && eb && sb != eb) {

+				n = sb;

+

+				var walker = new tinymce.dom.TreeWalker(sb, dom.getRoot());

+				while ((n = walker.next()) && n != eb) {

+					if (dom.isBlock(n))

+						bl.push(n);

+				}

+			}

+

+			if (eb && sb != eb)

+				bl.push(eb);

+

+			return bl;

+		},

+

+		normalize : function() {

+			var self = this, rng, normalized;

+

+			// TODO:

+			// Retain selection direction.

+			// Lean left/right on Gecko for inline elements.

+			// Run this on mouse up/key up when the user manually moves the selection

+			

+			// Normalize only on non IE browsers for now

+			if (tinymce.isIE)

+				return;

+

+			function normalizeEndPoint(start) {

+				var container, offset, walker, dom = self.dom, body = dom.getRoot(), node;

+

+				container = rng[(start ? 'start' : 'end') + 'Container'];

+				offset = rng[(start ? 'start' : 'end') + 'Offset'];

+

+				// If the container is a document move it to the body element

+				if (container.nodeType === 9) {

+					container = container.body;

+					offset = 0;

+				}

+

+				// If the container is body try move it into the closest text node or position

+				// TODO: Add more logic here to handle element selection cases

+				if (container === body) {

+					// Resolve the index

+					if (container.hasChildNodes()) {

+						container = container.childNodes[Math.min(!start && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1)];

+						offset = 0;

+

+						// Don't walk into elements that doesn't have any child nodes like a IMG

+						if (container.hasChildNodes()) {

+							// Walk the DOM to find a text node to place the caret at or a BR

+							node = container;

+							walker = new tinymce.dom.TreeWalker(container, body);

+							do {

+								// Found a text node use that position

+								if (node.nodeType === 3) {

+									offset = start ? 0 : node.nodeValue.length - 1;

+									container = node;

+									normalized = true;

+									break;

+								}

+

+								// Found a BR/IMG element that we can place the caret before

+								if (/^(BR|IMG)$/.test(node.nodeName)) {

+									offset = dom.nodeIndex(node);

+									container = node.parentNode;

+

+									// Put caret after image when moving the end point

+									if (node.nodeName ==  "IMG" && !start) {

+										offset++;

+									}

+

+									normalized = true;

+									break;

+								}

+							} while (node = (start ? walker.next() : walker.prev()));

+						}

+					}

+				}

+

+				// Set endpoint if it was normalized

+				if (normalized)

+					rng['set' + (start ? 'Start' : 'End')](container, offset);

+			};

+

+			rng = self.getRng();

+

+			// Normalize the end points

+			normalizeEndPoint(true);

+			

+			if (!rng.collapsed)

+				normalizeEndPoint();

+

+			// Set the selection if it was normalized

+			if (normalized) {

+				//console.log(self.dom.dumpRng(rng));

+				self.setRng(rng);

+			}

+		},

+

+		destroy : function(s) {

+			var t = this;

+

+			t.win = null;

+

+			// Manual destroy then remove unload handler

+			if (!s)

+				tinymce.removeUnload(t.destroy);

+		},

+

+		// IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode

+		_fixIESelection : function() {

+			var dom = this.dom, doc = dom.doc, body = doc.body, started, startRng, htmlElm;

+

+			// Make HTML element unselectable since we are going to handle selection by hand

+			doc.documentElement.unselectable = true;

+

+			// Return range from point or null if it failed

+			function rngFromPoint(x, y) {

+				var rng = body.createTextRange();

+

+				try {

+					rng.moveToPoint(x, y);

+				} catch (ex) {

+					// IE sometimes throws and exception, so lets just ignore it

+					rng = null;

+				}

+

+				return rng;

+			};

+

+			// Fires while the selection is changing

+			function selectionChange(e) {

+				var pointRng;

+

+				// Check if the button is down or not

+				if (e.button) {

+					// Create range from mouse position

+					pointRng = rngFromPoint(e.x, e.y);

+

+					if (pointRng) {

+						// Check if pointRange is before/after selection then change the endPoint

+						if (pointRng.compareEndPoints('StartToStart', startRng) > 0)

+							pointRng.setEndPoint('StartToStart', startRng);

+						else

+							pointRng.setEndPoint('EndToEnd', startRng);

+

+						pointRng.select();

+					}

+				} else

+					endSelection();

+			}

+

+			// Removes listeners

+			function endSelection() {

+				var rng = doc.selection.createRange();

+

+				// If the range is collapsed then use the last start range

+				if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0)

+					startRng.select();

+

+				dom.unbind(doc, 'mouseup', endSelection);

+				dom.unbind(doc, 'mousemove', selectionChange);

+				startRng = started = 0;

+			};

+

+			// Detect when user selects outside BODY

+			dom.bind(doc, ['mousedown', 'contextmenu'], function(e) {

+				if (e.target.nodeName === 'HTML') {

+					if (started)

+						endSelection();

+

+					// Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML

+					htmlElm = doc.documentElement;

+					if (htmlElm.scrollHeight > htmlElm.clientHeight)

+						return;

+

+					started = 1;

+					// Setup start position

+					startRng = rngFromPoint(e.x, e.y);

+					if (startRng) {

+						// Listen for selection change events

+						dom.bind(doc, 'mouseup', endSelection);

+						dom.bind(doc, 'mousemove', selectionChange);

+

+						dom.win.focus();

+						startRng.select();

+					}

+				}

+			});

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	tinymce.dom.Serializer = function(settings, dom, schema) {

+		var onPreProcess, onPostProcess, isIE = tinymce.isIE, each = tinymce.each, htmlParser;

+

+		// Support the old apply_source_formatting option

+		if (!settings.apply_source_formatting)

+			settings.indent = false;

+

+		// Default DOM and Schema if they are undefined

+		dom = dom || tinymce.DOM;

+		schema = schema || new tinymce.html.Schema(settings);

+		settings.entity_encoding = settings.entity_encoding || 'named';

+		settings.remove_trailing_brs = "remove_trailing_brs" in settings ? settings.remove_trailing_brs : true;

+

+		onPreProcess = new tinymce.util.Dispatcher(self);

+

+		onPostProcess = new tinymce.util.Dispatcher(self);

+

+		htmlParser = new tinymce.html.DomParser(settings, schema);

+

+		// Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed

+		htmlParser.addAttributeFilter('src,href,style', function(nodes, name) {

+			var i = nodes.length, node, value, internalName = 'data-mce-' + name, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef;

+

+			while (i--) {

+				node = nodes[i];

+

+				value = node.attributes.map[internalName];

+				if (value !== undef) {

+					// Set external name to internal value and remove internal

+					node.attr(name, value.length > 0 ? value : null);

+					node.attr(internalName, null);

+				} else {

+					// No internal attribute found then convert the value we have in the DOM

+					value = node.attributes.map[name];

+

+					if (name === "style")

+						value = dom.serializeStyle(dom.parseStyle(value), node.name);

+					else if (urlConverter)

+						value = urlConverter.call(urlConverterScope, value, name, node.name);

+

+					node.attr(name, value.length > 0 ? value : null);

+				}

+			}

+		});

+

+		// Remove internal classes mceItem<..>

+		htmlParser.addAttributeFilter('class', function(nodes, name) {

+			var i = nodes.length, node, value;

+

+			while (i--) {

+				node = nodes[i];

+				value = node.attr('class').replace(/\s*mce(Item\w+|Selected)\s*/g, '');

+				node.attr('class', value.length > 0 ? value : null);

+			}

+		});

+

+		// Remove bookmark elements

+		htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) {

+			var i = nodes.length, node;

+

+			while (i--) {

+				node = nodes[i];

+

+				if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup)

+					node.remove();

+			}

+		});

+

+		// Force script into CDATA sections and remove the mce- prefix also add comments around styles

+		htmlParser.addNodeFilter('script,style', function(nodes, name) {

+			var i = nodes.length, node, value;

+

+			function trim(value) {

+				return value.replace(/(<!--\[CDATA\[|\]\]-->)/g, '\n')

+						.replace(/^[\r\n]*|[\r\n]*$/g, '')

+						.replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi, '')

+						.replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g, '');

+			};

+

+			while (i--) {

+				node = nodes[i];

+				value = node.firstChild ? node.firstChild.value : '';

+

+				if (name === "script") {

+					// Remove mce- prefix from script elements

+					node.attr('type', (node.attr('type') || 'text/javascript').replace(/^mce\-/, ''));

+

+					if (value.length > 0)

+						node.firstChild.value = '// <![CDATA[\n' + trim(value) + '\n// ]]>';

+				} else {

+					if (value.length > 0)

+						node.firstChild.value = '<!--\n' + trim(value) + '\n-->';

+				}

+			}

+		});

+

+		// Convert comments to cdata and handle protected comments

+		htmlParser.addNodeFilter('#comment', function(nodes, name) {

+			var i = nodes.length, node;

+

+			while (i--) {

+				node = nodes[i];

+

+				if (node.value.indexOf('[CDATA[') === 0) {

+					node.name = '#cdata';

+					node.type = 4;

+					node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, '');

+				} else if (node.value.indexOf('mce:protected ') === 0) {

+					node.name = "#text";

+					node.type = 3;

+					node.raw = true;

+					node.value = unescape(node.value).substr(14);

+				}

+			}

+		});

+

+		htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) {

+			var i = nodes.length, node;

+

+			while (i--) {

+				node = nodes[i];

+				if (node.type === 7)

+					node.remove();

+				else if (node.type === 1) {

+					if (name === "input" && !("type" in node.attributes.map))

+						node.attr('type', 'text');

+				}

+			}

+		});

+

+		// Fix list elements, TODO: Replace this later

+		if (settings.fix_list_elements) {

+			htmlParser.addNodeFilter('ul,ol', function(nodes, name) {

+				var i = nodes.length, node, parentNode;

+

+				while (i--) {

+					node = nodes[i];

+					parentNode = node.parent;

+

+					if (parentNode.name === 'ul' || parentNode.name === 'ol') {

+						if (node.prev && node.prev.name === 'li') {

+							node.prev.append(node);

+						}

+					}

+				}

+			});

+		}

+

+		// Remove internal data attributes

+		htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style', function(nodes, name) {

+			var i = nodes.length;

+

+			while (i--) {

+				nodes[i].attr(name, null);

+			}

+		});

+

+		// Return public methods

+		return {

+			schema : schema,

+

+			addNodeFilter : htmlParser.addNodeFilter,

+

+			addAttributeFilter : htmlParser.addAttributeFilter,

+

+			onPreProcess : onPreProcess,

+

+			onPostProcess : onPostProcess,

+

+			serialize : function(node, args) {

+				var impl, doc, oldDoc, htmlSerializer, content;

+

+				// Explorer won't clone contents of script and style and the

+				// selected index of select elements are cleared on a clone operation.

+				if (isIE && dom.select('script,style,select,map').length > 0) {

+					content = node.innerHTML;

+					node = node.cloneNode(false);

+					dom.setHTML(node, content);

+				} else

+					node = node.cloneNode(true);

+

+				// Nodes needs to be attached to something in WebKit/Opera

+				// Older builds of Opera crashes if you attach the node to an document created dynamically

+				// and since we can't feature detect a crash we need to sniff the acutal build number

+				// This fix will make DOM ranges and make Sizzle happy!

+				impl = node.ownerDocument.implementation;

+				if (impl.createHTMLDocument) {

+					// Create an empty HTML document

+					doc = impl.createHTMLDocument("");

+

+					// Add the element or it's children if it's a body element to the new document

+					each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) {

+						doc.body.appendChild(doc.importNode(node, true));

+					});

+

+					// Grab first child or body element for serialization

+					if (node.nodeName != 'BODY')

+						node = doc.body.firstChild;

+					else

+						node = doc.body;

+

+					// set the new document in DOMUtils so createElement etc works

+					oldDoc = dom.doc;

+					dom.doc = doc;

+				}

+

+				args = args || {};

+				args.format = args.format || 'html';

+

+				// Pre process

+				if (!args.no_events) {

+					args.node = node;

+					onPreProcess.dispatch(self, args);

+				}

+

+				// Setup serializer

+				htmlSerializer = new tinymce.html.Serializer(settings, schema);

+

+				// Parse and serialize HTML

+				args.content = htmlSerializer.serialize(

+					htmlParser.parse(args.getInner ? node.innerHTML : tinymce.trim(dom.getOuterHTML(node), args), args)

+				);

+

+				// Replace all BOM characters for now until we can find a better solution

+				if (!args.cleanup)

+					args.content = args.content.replace(/\uFEFF|\u200B/g, '');

+

+				// Post process

+				if (!args.no_events)

+					onPostProcess.dispatch(self, args);

+

+				// Restore the old document if it was changed

+				if (oldDoc)

+					dom.doc = oldDoc;

+

+				args.node = null;

+

+				return args.content;

+			},

+

+			addRules : function(rules) {

+				schema.addValidElements(rules);

+			},

+

+			setRules : function(rules) {

+				schema.setValidElements(rules);

+			}

+		};

+	};

+})(tinymce);

+(function(tinymce) {

+	tinymce.dom.ScriptLoader = function(settings) {

+		var QUEUED = 0,

+			LOADING = 1,

+			LOADED = 2,

+			states = {},

+			queue = [],

+			scriptLoadedCallbacks = {},

+			queueLoadedCallbacks = [],

+			loading = 0,

+			undefined;

+

+		function loadScript(url, callback) {

+			var t = this, dom = tinymce.DOM, elm, uri, loc, id;

+

+			// Execute callback when script is loaded

+			function done() {

+				dom.remove(id);

+

+				if (elm)

+					elm.onreadystatechange = elm.onload = elm = null;

+

+				callback();

+			};

+			

+			function error() {

+				// Report the error so it's easier for people to spot loading errors

+				if (typeof(console) !== "undefined" && console.log)

+					console.log("Failed to load: " + url);

+

+				// We can't mark it as done if there is a load error since

+				// A) We don't want to produce 404 errors on the server and

+				// B) the onerror event won't fire on all browsers.

+				// done();

+			};

+

+			id = dom.uniqueId();

+

+			if (tinymce.isIE6) {

+				uri = new tinymce.util.URI(url);

+				loc = location;

+

+				// If script is from same domain and we

+				// use IE 6 then use XHR since it's more reliable

+				if (uri.host == loc.hostname && uri.port == loc.port && (uri.protocol + ':') == loc.protocol && uri.protocol.toLowerCase() != 'file') {

+					tinymce.util.XHR.send({

+						url : tinymce._addVer(uri.getURI()),

+						success : function(content) {

+							// Create new temp script element

+							var script = dom.create('script', {

+								type : 'text/javascript'

+							});

+

+							// Evaluate script in global scope

+							script.text = content;

+							document.getElementsByTagName('head')[0].appendChild(script);

+							dom.remove(script);

+

+							done();

+						},

+						

+						error : error

+					});

+

+					return;

+				}

+			}

+

+			// Create new script element

+			elm = dom.create('script', {

+				id : id,

+				type : 'text/javascript',

+				src : tinymce._addVer(url)

+			});

+

+			// Add onload listener for non IE browsers since IE9

+			// fires onload event before the script is parsed and executed

+			if (!tinymce.isIE)

+				elm.onload = done;

+

+			// Add onerror event will get fired on some browsers but not all of them

+			elm.onerror = error;

+

+			// Opera 9.60 doesn't seem to fire the onreadystate event at correctly

+			if (!tinymce.isOpera) {

+				elm.onreadystatechange = function() {

+					var state = elm.readyState;

+

+					// Loaded state is passed on IE 6 however there

+					// are known issues with this method but we can't use

+					// XHR in a cross domain loading

+					if (state == 'complete' || state == 'loaded')

+						done();

+				};

+			}

+

+			// Most browsers support this feature so we report errors

+			// for those at least to help users track their missing plugins etc

+			// todo: Removed since it produced error if the document is unloaded by navigating away, re-add it as an option

+			/*elm.onerror = function() {

+				alert('Failed to load: ' + url);

+			};*/

+

+			// Add script to document

+			(document.getElementsByTagName('head')[0] || document.body).appendChild(elm);

+		};

+

+		this.isDone = function(url) {

+			return states[url] == LOADED;

+		};

+

+		this.markDone = function(url) {

+			states[url] = LOADED;

+		};

+

+		this.add = this.load = function(url, callback, scope) {

+			var item, state = states[url];

+

+			// Add url to load queue

+			if (state == undefined) {

+				queue.push(url);

+				states[url] = QUEUED;

+			}

+

+			if (callback) {

+				// Store away callback for later execution

+				if (!scriptLoadedCallbacks[url])

+					scriptLoadedCallbacks[url] = [];

+

+				scriptLoadedCallbacks[url].push({

+					func : callback,

+					scope : scope || this

+				});

+			}

+		};

+

+		this.loadQueue = function(callback, scope) {

+			this.loadScripts(queue, callback, scope);

+		};

+

+		this.loadScripts = function(scripts, callback, scope) {

+			var loadScripts;

+

+			function execScriptLoadedCallbacks(url) {

+				// Execute URL callback functions

+				tinymce.each(scriptLoadedCallbacks[url], function(callback) {

+					callback.func.call(callback.scope);

+				});

+

+				scriptLoadedCallbacks[url] = undefined;

+			};

+

+			queueLoadedCallbacks.push({

+				func : callback,

+				scope : scope || this

+			});

+

+			loadScripts = function() {

+				var loadingScripts = tinymce.grep(scripts);

+

+				// Current scripts has been handled

+				scripts.length = 0;

+

+				// Load scripts that needs to be loaded

+				tinymce.each(loadingScripts, function(url) {

+					// Script is already loaded then execute script callbacks directly

+					if (states[url] == LOADED) {

+						execScriptLoadedCallbacks(url);

+						return;

+					}

+

+					// Is script not loading then start loading it

+					if (states[url] != LOADING) {

+						states[url] = LOADING;

+						loading++;

+

+						loadScript(url, function() {

+							states[url] = LOADED;

+							loading--;

+

+							execScriptLoadedCallbacks(url);

+

+							// Load more scripts if they where added by the recently loaded script

+							loadScripts();

+						});

+					}

+				});

+

+				// No scripts are currently loading then execute all pending queue loaded callbacks

+				if (!loading) {

+					tinymce.each(queueLoadedCallbacks, function(callback) {

+						callback.func.call(callback.scope);

+					});

+

+					queueLoadedCallbacks.length = 0;

+				}

+			};

+

+			loadScripts();

+		};

+	};

+

+	// Global script loader

+	tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();

+})(tinymce);

+

+tinymce.dom.TreeWalker = function(start_node, root_node) {

+	var node = start_node;

+

+	function findSibling(node, start_name, sibling_name, shallow) {

+		var sibling, parent;

+

+		if (node) {

+			// Walk into nodes if it has a start

+			if (!shallow && node[start_name])

+				return node[start_name];

+

+			// Return the sibling if it has one

+			if (node != root_node) {

+				sibling = node[sibling_name];

+				if (sibling)

+					return sibling;

+

+				// Walk up the parents to look for siblings

+				for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {

+					sibling = parent[sibling_name];

+					if (sibling)

+						return sibling;

+				}

+			}

+		}

+	};

+

+	this.current = function() {

+		return node;

+	};

+

+	this.next = function(shallow) {

+		return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));

+	};

+

+	this.prev = function(shallow) {

+		return (node = findSibling(node, 'lastChild', 'previousSibling', shallow));

+	};

+};

+

+(function(tinymce) {

+	tinymce.dom.RangeUtils = function(dom) {

+		var INVISIBLE_CHAR = '\uFEFF';

+

+		this.walk = function(rng, callback) {

+			var startContainer = rng.startContainer,

+				startOffset = rng.startOffset,

+				endContainer = rng.endContainer,

+				endOffset = rng.endOffset,

+				ancestor, startPoint,

+				endPoint, node, parent, siblings, nodes;

+

+			// Handle table cell selection the table plugin enables

+			// you to fake select table cells and perform formatting actions on them

+			nodes = dom.select('td.mceSelected,th.mceSelected');

+			if (nodes.length > 0) {

+				tinymce.each(nodes, function(node) {

+					callback([node]);

+				});

+

+				return;

+			}

+

+			function exclude(nodes) {

+				var node;

+

+				// First node is excluded

+				node = nodes[0];

+				if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {

+					nodes.splice(0, 1);

+				}

+

+				// Last node is excluded

+				node = nodes[nodes.length - 1];

+				if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {

+					nodes.splice(nodes.length - 1, 1);

+				}

+

+				return nodes;

+			};

+

+			function collectSiblings(node, name, end_node) {

+				var siblings = [];

+

+				for (; node && node != end_node; node = node[name])

+					siblings.push(node);

+

+				return siblings;

+			};

+

+			function findEndPoint(node, root) {

+				do {

+					if (node.parentNode == root)

+						return node;

+

+					node = node.parentNode;

+				} while(node);

+			};

+

+			function walkBoundary(start_node, end_node, next) {

+				var siblingName = next ? 'nextSibling' : 'previousSibling';

+

+				for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) {

+					parent = node.parentNode;

+					siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName);

+

+					if (siblings.length) {

+						if (!next)

+							siblings.reverse();

+

+						callback(exclude(siblings));

+					}

+				}

+			};

+

+			// If index based start position then resolve it

+			if (startContainer.nodeType == 1 && startContainer.hasChildNodes())

+				startContainer = startContainer.childNodes[startOffset];

+

+			// If index based end position then resolve it

+			if (endContainer.nodeType == 1 && endContainer.hasChildNodes())

+				endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)];

+

+			// Same container

+			if (startContainer == endContainer)

+				return callback(exclude([startContainer]));

+

+			// Find common ancestor and end points

+			ancestor = dom.findCommonAncestor(startContainer, endContainer);

+				

+			// Process left side

+			for (node = startContainer; node; node = node.parentNode) {

+				if (node === endContainer)

+					return walkBoundary(startContainer, ancestor, true);

+

+				if (node === ancestor)

+					break;

+			}

+

+			// Process right side

+			for (node = endContainer; node; node = node.parentNode) {

+				if (node === startContainer)

+					return walkBoundary(endContainer, ancestor);

+

+				if (node === ancestor)

+					break;

+			}

+

+			// Find start/end point

+			startPoint = findEndPoint(startContainer, ancestor) || startContainer;

+			endPoint = findEndPoint(endContainer, ancestor) || endContainer;

+

+			// Walk left leaf

+			walkBoundary(startContainer, startPoint, true);

+

+			// Walk the middle from start to end point

+			siblings = collectSiblings(

+				startPoint == startContainer ? startPoint : startPoint.nextSibling,

+				'nextSibling',

+				endPoint == endContainer ? endPoint.nextSibling : endPoint

+			);

+

+			if (siblings.length)

+				callback(exclude(siblings));

+

+			// Walk right leaf

+			walkBoundary(endContainer, endPoint);

+		};

+

+		this.split = function(rng) {

+			var startContainer = rng.startContainer,

+				startOffset = rng.startOffset,

+				endContainer = rng.endContainer,

+				endOffset = rng.endOffset;

+

+			function splitText(node, offset) {

+				return node.splitText(offset);

+			};

+

+			// Handle single text node

+			if (startContainer == endContainer && startContainer.nodeType == 3) {

+				if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {

+					endContainer = splitText(startContainer, startOffset);

+					startContainer = endContainer.previousSibling;

+

+					if (endOffset > startOffset) {

+						endOffset = endOffset - startOffset;

+						startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;

+						endOffset = endContainer.nodeValue.length;

+						startOffset = 0;

+					} else {

+						endOffset = 0;

+					}

+				}

+			} else {

+				// Split startContainer text node if needed

+				if (startContainer.nodeType == 3 && startOffset > 0 && startOffset < startContainer.nodeValue.length) {

+					startContainer = splitText(startContainer, startOffset);

+					startOffset = 0;

+				}

+

+				// Split endContainer text node if needed

+				if (endContainer.nodeType == 3 && endOffset > 0 && endOffset < endContainer.nodeValue.length) {

+					endContainer = splitText(endContainer, endOffset).previousSibling;

+					endOffset = endContainer.nodeValue.length;

+				}

+			}

+

+			return {

+				startContainer : startContainer,

+				startOffset : startOffset,

+				endContainer : endContainer,

+				endOffset : endOffset

+			};

+		};

+

+	};

+

+	tinymce.dom.RangeUtils.compareRanges = function(rng1, rng2) {

+		if (rng1 && rng2) {

+			// Compare native IE ranges

+			if (rng1.item || rng1.duplicate) {

+				// Both are control ranges and the selected element matches

+				if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0))

+					return true;

+

+				// Both are text ranges and the range matches

+				if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1))

+					return true;

+			} else {

+				// Compare w3c ranges

+				return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset;

+			}

+		}

+

+		return false;

+	};

+})(tinymce);

+

+(function(tinymce) {

+	var Event = tinymce.dom.Event, each = tinymce.each;

+

+	tinymce.create('tinymce.ui.KeyboardNavigation', {

+		KeyboardNavigation: function(settings, dom) {

+			var t = this, root = settings.root, items = settings.items,

+					enableUpDown = settings.enableUpDown, enableLeftRight = settings.enableLeftRight || !settings.enableUpDown,

+					excludeFromTabOrder = settings.excludeFromTabOrder,

+					itemFocussed, itemBlurred, rootKeydown, rootFocussed, focussedId;

+

+			dom = dom || tinymce.DOM;

+

+			itemFocussed = function(evt) {

+				focussedId = evt.target.id;

+			};

+			

+			itemBlurred = function(evt) {

+				dom.setAttrib(evt.target.id, 'tabindex', '-1');

+			};

+			

+			rootFocussed = function(evt) {

+				var item = dom.get(focussedId);

+				dom.setAttrib(item, 'tabindex', '0');

+				item.focus();

+			};

+			

+			t.focus = function() {

+				dom.get(focussedId).focus();

+			};

+

+			t.destroy = function() {

+				each(items, function(item) {

+					dom.unbind(dom.get(item.id), 'focus', itemFocussed);

+					dom.unbind(dom.get(item.id), 'blur', itemBlurred);

+				});

+

+				dom.unbind(dom.get(root), 'focus', rootFocussed);

+				dom.unbind(dom.get(root), 'keydown', rootKeydown);

+

+				items = dom = root = t.focus = itemFocussed = itemBlurred = rootKeydown = rootFocussed = null;

+				t.destroy = function() {};

+			};

+			

+			t.moveFocus = function(dir, evt) {

+				var idx = -1, controls = t.controls, newFocus;

+

+				if (!focussedId)

+					return;

+

+				each(items, function(item, index) {

+					if (item.id === focussedId) {

+						idx = index;

+						return false;

+					}

+				});

+

+				idx += dir;

+				if (idx < 0) {

+					idx = items.length - 1;

+				} else if (idx >= items.length) {

+					idx = 0;

+				}

+				

+				newFocus = items[idx];

+				dom.setAttrib(focussedId, 'tabindex', '-1');

+				dom.setAttrib(newFocus.id, 'tabindex', '0');

+				dom.get(newFocus.id).focus();

+

+				if (settings.actOnFocus) {

+					settings.onAction(newFocus.id);

+				}

+

+				if (evt)

+					Event.cancel(evt);

+			};

+			

+			rootKeydown = function(evt) {

+				var DOM_VK_LEFT = 37, DOM_VK_RIGHT = 39, DOM_VK_UP = 38, DOM_VK_DOWN = 40, DOM_VK_ESCAPE = 27, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_SPACE = 32;

+				

+				switch (evt.keyCode) {

+					case DOM_VK_LEFT:

+						if (enableLeftRight) t.moveFocus(-1);

+						break;

+	

+					case DOM_VK_RIGHT:

+						if (enableLeftRight) t.moveFocus(1);

+						break;

+	

+					case DOM_VK_UP:

+						if (enableUpDown) t.moveFocus(-1);

+						break;

+

+					case DOM_VK_DOWN:

+						if (enableUpDown) t.moveFocus(1);

+						break;

+

+					case DOM_VK_ESCAPE:

+						if (settings.onCancel) {

+							settings.onCancel();

+							Event.cancel(evt);

+						}

+						break;

+

+					case DOM_VK_ENTER:

+					case DOM_VK_RETURN:

+					case DOM_VK_SPACE:

+						if (settings.onAction) {

+							settings.onAction(focussedId);

+							Event.cancel(evt);

+						}

+						break;

+				}

+			};

+

+			// Set up state and listeners for each item.

+			each(items, function(item, idx) {

+				var tabindex;

+

+				if (!item.id) {

+					item.id = dom.uniqueId('_mce_item_');

+				}

+

+				if (excludeFromTabOrder) {

+					dom.bind(item.id, 'blur', itemBlurred);

+					tabindex = '-1';

+				} else {

+					tabindex = (idx === 0 ? '0' : '-1');

+				}

+

+				dom.setAttrib(item.id, 'tabindex', tabindex);

+				dom.bind(dom.get(item.id), 'focus', itemFocussed);

+			});

+			

+			// Setup initial state for root element.

+			if (items[0]){

+				focussedId = items[0].id;

+			}

+

+			dom.setAttrib(root, 'tabindex', '-1');

+			

+			// Setup listeners for root element.

+			dom.bind(dom.get(root), 'focus', rootFocussed);

+			dom.bind(dom.get(root), 'keydown', rootKeydown);

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	// Shorten class names

+	var DOM = tinymce.DOM, is = tinymce.is;

+

+	tinymce.create('tinymce.ui.Control', {

+		Control : function(id, s, editor) {

+			this.id = id;

+			this.settings = s = s || {};

+			this.rendered = false;

+			this.onRender = new tinymce.util.Dispatcher(this);

+			this.classPrefix = '';

+			this.scope = s.scope || this;

+			this.disabled = 0;

+			this.active = 0;

+			this.editor = editor;

+		},

+		

+		setAriaProperty : function(property, value) {

+			var element = DOM.get(this.id + '_aria') || DOM.get(this.id);

+			if (element) {

+				DOM.setAttrib(element, 'aria-' + property, !!value);

+			}

+		},

+		

+		focus : function() {

+			DOM.get(this.id).focus();

+		},

+

+		setDisabled : function(s) {

+			if (s != this.disabled) {

+				this.setAriaProperty('disabled', s);

+

+				this.setState('Disabled', s);

+				this.setState('Enabled', !s);

+				this.disabled = s;

+			}

+		},

+

+		isDisabled : function() {

+			return this.disabled;

+		},

+

+		setActive : function(s) {

+			if (s != this.active) {

+				this.setState('Active', s);

+				this.active = s;

+				this.setAriaProperty('pressed', s);

+			}

+		},

+

+		isActive : function() {

+			return this.active;

+		},

+

+		setState : function(c, s) {

+			var n = DOM.get(this.id);

+

+			c = this.classPrefix + c;

+

+			if (s)

+				DOM.addClass(n, c);

+			else

+				DOM.removeClass(n, c);

+		},

+

+		isRendered : function() {

+			return this.rendered;

+		},

+

+		renderHTML : function() {

+		},

+

+		renderTo : function(n) {

+			DOM.setHTML(n, this.renderHTML());

+		},

+

+		postRender : function() {

+			var t = this, b;

+

+			// Set pending states

+			if (is(t.disabled)) {

+				b = t.disabled;

+				t.disabled = -1;

+				t.setDisabled(b);

+			}

+

+			if (is(t.active)) {

+				b = t.active;

+				t.active = -1;

+				t.setActive(b);

+			}

+		},

+

+		remove : function() {

+			DOM.remove(this.id);

+			this.destroy();

+		},

+

+		destroy : function() {

+			tinymce.dom.Event.clear(this.id);

+		}

+	});

+})(tinymce);

+tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {

+	Container : function(id, s, editor) {

+		this.parent(id, s, editor);

+

+		this.controls = [];

+

+		this.lookup = {};

+	},

+

+	add : function(c) {

+		this.lookup[c.id] = c;

+		this.controls.push(c);

+

+		return c;

+	},

+

+	get : function(n) {

+		return this.lookup[n];

+	}

+});

+

+

+tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {

+	Separator : function(id, s) {

+		this.parent(id, s);

+		this.classPrefix = 'mceSeparator';

+		this.setDisabled(true);

+	},

+

+	renderHTML : function() {

+		return tinymce.DOM.createHTML('span', {'class' : this.classPrefix, role : 'separator', 'aria-orientation' : 'vertical', tabindex : '-1'});

+	}

+});

+

+(function(tinymce) {

+	var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;

+

+	tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {

+		MenuItem : function(id, s) {

+			this.parent(id, s);

+			this.classPrefix = 'mceMenuItem';

+		},

+

+		setSelected : function(s) {

+			this.setState('Selected', s);

+			this.setAriaProperty('checked', !!s);

+			this.selected = s;

+		},

+

+		isSelected : function() {

+			return this.selected;

+		},

+

+		postRender : function() {

+			var t = this;

+			

+			t.parent();

+

+			// Set pending state

+			if (is(t.selected))

+				t.setSelected(t.selected);

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;

+

+	tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {

+		Menu : function(id, s) {

+			var t = this;

+

+			t.parent(id, s);

+			t.items = {};

+			t.collapsed = false;

+			t.menuCount = 0;

+			t.onAddItem = new tinymce.util.Dispatcher(this);

+		},

+

+		expand : function(d) {

+			var t = this;

+

+			if (d) {

+				walk(t, function(o) {

+					if (o.expand)

+						o.expand();

+				}, 'items', t);

+			}

+

+			t.collapsed = false;

+		},

+

+		collapse : function(d) {

+			var t = this;

+

+			if (d) {

+				walk(t, function(o) {

+					if (o.collapse)

+						o.collapse();

+				}, 'items', t);

+			}

+

+			t.collapsed = true;

+		},

+

+		isCollapsed : function() {

+			return this.collapsed;

+		},

+

+		add : function(o) {

+			if (!o.settings)

+				o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o);

+

+			this.onAddItem.dispatch(this, o);

+

+			return this.items[o.id] = o;

+		},

+

+		addSeparator : function() {

+			return this.add({separator : true});

+		},

+

+		addMenu : function(o) {

+			if (!o.collapse)

+				o = this.createMenu(o);

+

+			this.menuCount++;

+

+			return this.add(o);

+		},

+

+		hasMenus : function() {

+			return this.menuCount !== 0;

+		},

+

+		remove : function(o) {

+			delete this.items[o.id];

+		},

+

+		removeAll : function() {

+			var t = this;

+

+			walk(t, function(o) {

+				if (o.removeAll)

+					o.removeAll();

+				else

+					o.remove();

+

+				o.destroy();

+			}, 'items', t);

+

+			t.items = {};

+		},

+

+		createMenu : function(o) {

+			var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o);

+

+			m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);

+

+			return m;

+		}

+	});

+})(tinymce);

+(function(tinymce) {

+	var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;

+

+	tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {

+		DropMenu : function(id, s) {

+			s = s || {};

+			s.container = s.container || DOM.doc.body;

+			s.offset_x = s.offset_x || 0;

+			s.offset_y = s.offset_y || 0;

+			s.vp_offset_x = s.vp_offset_x || 0;

+			s.vp_offset_y = s.vp_offset_y || 0;

+

+			if (is(s.icons) && !s.icons)

+				s['class'] += ' mceNoIcons';

+

+			this.parent(id, s);

+			this.onShowMenu = new tinymce.util.Dispatcher(this);

+			this.onHideMenu = new tinymce.util.Dispatcher(this);

+			this.classPrefix = 'mceMenu';

+		},

+

+		createMenu : function(s) {

+			var t = this, cs = t.settings, m;

+

+			s.container = s.container || cs.container;

+			s.parent = t;

+			s.constrain = s.constrain || cs.constrain;

+			s['class'] = s['class'] || cs['class'];

+			s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x;

+			s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y;

+			s.keyboard_focus = cs.keyboard_focus;

+			m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s);

+

+			m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem);

+

+			return m;

+		},

+		

+		focus : function() {

+			var t = this;

+			if (t.keyboardNav) {

+				t.keyboardNav.focus();

+			}

+		},

+

+		update : function() {

+			var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th;

+

+			tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth;

+			th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight;

+

+			if (!DOM.boxModel)

+				t.element.setStyles({width : tw + 2, height : th + 2});

+			else

+				t.element.setStyles({width : tw, height : th});

+

+			if (s.max_width)

+				DOM.setStyle(co, 'width', tw);

+

+			if (s.max_height) {

+				DOM.setStyle(co, 'height', th);

+

+				if (tb.clientHeight < s.max_height)

+					DOM.setStyle(co, 'overflow', 'hidden');

+			}

+		},

+

+		showMenu : function(x, y, px) {

+			var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix;

+

+			t.collapse(1);

+

+			if (t.isMenuVisible)

+				return;

+

+			if (!t.rendered) {

+				co = DOM.add(t.settings.container, t.renderNode());

+

+				each(t.items, function(o) {

+					o.postRender();

+				});

+

+				t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});

+			} else

+				co = DOM.get('menu_' + t.id);

+

+			// Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug

+			if (!tinymce.isOpera)

+				DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF});

+

+			DOM.show(co);

+			t.update();

+

+			x += s.offset_x || 0;

+			y += s.offset_y || 0;

+			vp.w -= 4;

+			vp.h -= 4;

+

+			// Move inside viewport if not submenu

+			if (s.constrain) {

+				w = co.clientWidth - ot;

+				h = co.clientHeight - ot;

+				mx = vp.x + vp.w;

+				my = vp.y + vp.h;

+

+				if ((x + s.vp_offset_x + w) > mx)

+					x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w);

+

+				if ((y + s.vp_offset_y + h) > my)

+					y = Math.max(0, (my - s.vp_offset_y) - h);

+			}

+

+			DOM.setStyles(co, {left : x , top : y});

+			t.element.update();

+

+			t.isMenuVisible = 1;

+			t.mouseClickFunc = Event.add(co, 'click', function(e) {

+				var m;

+

+				e = e.target;

+

+				if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) {

+					m = t.items[e.id];

+

+					if (m.isDisabled())

+						return;

+

+					dm = t;

+

+					while (dm) {

+						if (dm.hideMenu)

+							dm.hideMenu();

+

+						dm = dm.settings.parent;

+					}

+

+					if (m.settings.onclick)

+						m.settings.onclick(e);

+

+					return Event.cancel(e); // Cancel to fix onbeforeunload problem

+				}

+			});

+

+			if (t.hasMenus()) {

+				t.mouseOverFunc = Event.add(co, 'mouseover', function(e) {

+					var m, r, mi;

+

+					e = e.target;

+					if (e && (e = DOM.getParent(e, 'tr'))) {

+						m = t.items[e.id];

+

+						if (t.lastMenu)

+							t.lastMenu.collapse(1);

+

+						if (m.isDisabled())

+							return;

+

+						if (e && DOM.hasClass(e, cp + 'ItemSub')) {

+							//p = DOM.getPos(s.container);

+							r = DOM.getRect(e);

+							m.showMenu((r.x + r.w - ot), r.y - ot, r.x);

+							t.lastMenu = m;

+							DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive');

+						}

+					}

+				});

+			}

+			

+			Event.add(co, 'keydown', t._keyHandler, t);

+

+			t.onShowMenu.dispatch(t);

+

+			if (s.keyboard_focus) { 

+				t._setupKeyboardNav(); 

+			}

+		},

+

+		hideMenu : function(c) {

+			var t = this, co = DOM.get('menu_' + t.id), e;

+

+			if (!t.isMenuVisible)

+				return;

+

+			if (t.keyboardNav) t.keyboardNav.destroy();

+			Event.remove(co, 'mouseover', t.mouseOverFunc);

+			Event.remove(co, 'click', t.mouseClickFunc);

+			Event.remove(co, 'keydown', t._keyHandler);

+			DOM.hide(co);

+			t.isMenuVisible = 0;

+

+			if (!c)

+				t.collapse(1);

+

+			if (t.element)

+				t.element.hide();

+

+			if (e = DOM.get(t.id))

+				DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive');

+

+			t.onHideMenu.dispatch(t);

+		},

+

+		add : function(o) {

+			var t = this, co;

+

+			o = t.parent(o);

+

+			if (t.isRendered && (co = DOM.get('menu_' + t.id)))

+				t._add(DOM.select('tbody', co)[0], o);

+

+			return o;

+		},

+

+		collapse : function(d) {

+			this.parent(d);

+			this.hideMenu(1);

+		},

+

+		remove : function(o) {

+			DOM.remove(o.id);

+			this.destroy();

+

+			return this.parent(o);

+		},

+

+		destroy : function() {

+			var t = this, co = DOM.get('menu_' + t.id);

+

+			if (t.keyboardNav) t.keyboardNav.destroy();

+			Event.remove(co, 'mouseover', t.mouseOverFunc);

+			Event.remove(DOM.select('a', co), 'focus', t.mouseOverFunc);

+			Event.remove(co, 'click', t.mouseClickFunc);

+			Event.remove(co, 'keydown', t._keyHandler);

+

+			if (t.element)

+				t.element.remove();

+

+			DOM.remove(co);

+		},

+

+		renderNode : function() {

+			var t = this, s = t.settings, n, tb, co, w;

+

+			w = DOM.create('div', {role: 'listbox', id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000;outline:0'});

+			if (t.settings.parent) {

+				DOM.setAttrib(w, 'aria-parent', 'menu_' + t.settings.parent.id);

+			}

+			co = DOM.add(w, 'div', {role: 'presentation', id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')});

+			t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});

+

+			if (s.menu_line)

+				DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'});

+

+//			n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'});

+			n = DOM.add(co, 'table', {role: 'presentation', id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0});

+			tb = DOM.add(n, 'tbody');

+

+			each(t.items, function(o) {

+				t._add(tb, o);

+			});

+

+			t.rendered = true;

+

+			return w;

+		},

+

+		// Internal functions

+		_setupKeyboardNav : function(){

+			var contextMenu, menuItems, t=this; 

+			contextMenu = DOM.get('menu_' + t.id);

+			menuItems = DOM.select('a[role=option]', 'menu_' + t.id);

+			menuItems.splice(0,0,contextMenu);

+			t.keyboardNav = new tinymce.ui.KeyboardNavigation({

+				root: 'menu_' + t.id,

+				items: menuItems,

+				onCancel: function() {

+					t.hideMenu();

+				},

+				enableUpDown: true

+			});

+			contextMenu.focus();

+		},

+

+		_keyHandler : function(evt) {

+			var t = this, e;

+			switch (evt.keyCode) {

+				case 37: // Left

+					if (t.settings.parent) {

+						t.hideMenu();

+						t.settings.parent.focus();

+						Event.cancel(evt);

+					}

+					break;

+				case 39: // Right

+					if (t.mouseOverFunc)

+						t.mouseOverFunc(evt);

+					break;

+			}

+		},

+

+		_add : function(tb, o) {

+			var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic;

+

+			if (s.separator) {

+				ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'});

+				DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'});

+

+				if (n = ro.previousSibling)

+					DOM.addClass(n, 'mceLast');

+

+				return;

+			}

+

+			n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'});

+			n = it = DOM.add(n, s.titleItem ? 'th' : 'td');

+			n = a = DOM.add(n, 'a', {id: o.id + '_aria',  role: s.titleItem ? 'presentation' : 'option', href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'});

+

+			if (s.parent) {

+				DOM.setAttrib(a, 'aria-haspopup', 'true');

+				DOM.setAttrib(a, 'aria-owns', 'menu_' + o.id);

+			}

+

+			DOM.addClass(it, s['class']);

+//			n = DOM.add(n, 'span', {'class' : 'item'});

+

+			ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')});

+

+			if (s.icon_src)

+				DOM.add(ic, 'img', {src : s.icon_src});

+

+			n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title);

+

+			if (o.settings.style)

+				DOM.setAttrib(n, 'style', o.settings.style);

+

+			if (tb.childNodes.length == 1)

+				DOM.addClass(ro, 'mceFirst');

+

+			if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator'))

+				DOM.addClass(ro, 'mceFirst');

+

+			if (o.collapse)

+				DOM.addClass(ro, cp + 'ItemSub');

+

+			if (n = ro.previousSibling)

+				DOM.removeClass(n, 'mceLast');

+

+			DOM.addClass(ro, 'mceLast');

+		}

+	});

+})(tinymce);

+(function(tinymce) {

+	var DOM = tinymce.DOM;

+

+	tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {

+		Button : function(id, s, ed) {

+			this.parent(id, s, ed);

+			this.classPrefix = 'mceButton';

+		},

+

+		renderHTML : function() {

+			var cp = this.classPrefix, s = this.settings, h, l;

+

+			l = DOM.encode(s.label || '');

+			h = '<a role="button" id="' + this.id + '" href="javascript:;" class="' + cp + ' ' + cp + 'Enabled ' + s['class'] + (l ? ' ' + cp + 'Labeled' : '') +'" onmousedown="return false;" onclick="return false;" aria-labelledby="' + this.id + '_voice" title="' + DOM.encode(s.title) + '">';

+			if (s.image && !(this.editor  &&this.editor.forcedHighContrastMode) )

+				h += '<img class="mceIcon" src="' + s.image + '" alt="' + DOM.encode(s.title) + '" />' + l;

+			else

+				h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '');

+

+			h += '<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="' + this.id + '_voice">' + s.title + '</span>'; 

+			h += '</a>';

+			return h;

+		},

+

+		postRender : function() {

+			var t = this, s = t.settings, bookmark;

+

+			// In IE a large image that occupies the entire editor area will be deselected when a button is clicked, so

+			// need to keep the selection in case the selection is lost

+			if (tinymce.isIE && t.editor) {

+				tinymce.dom.Event.add(t.id, 'mousedown', function(e) {

+					bookmark = t.editor.selection.getBookmark();

+				});

+			}

+			tinymce.dom.Event.add(t.id, 'click', function(e) {

+				if (!t.isDisabled()) {

+					// restore the selection in case the selection is lost in IE

+					if (tinymce.isIE && t.editor && bookmark) {

+						tinymce.activeEditor.selection.moveToBookmark(bookmark);

+					}

+					return s.onclick.call(s.scope, e);

+				}

+			});

+			tinymce.dom.Event.add(t.id, 'keyup', function(e) {

+				if (!t.isDisabled() && e.keyCode==tinymce.VK.SPACEBAR)

+					return s.onclick.call(s.scope, e);

+			});

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;

+

+	tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {

+		ListBox : function(id, s, ed) {

+			var t = this;

+

+			t.parent(id, s, ed);

+

+			t.items = [];

+

+			t.onChange = new Dispatcher(t);

+

+			t.onPostRender = new Dispatcher(t);

+

+			t.onAdd = new Dispatcher(t);

+

+			t.onRenderMenu = new tinymce.util.Dispatcher(this);

+

+			t.classPrefix = 'mceListBox';

+		},

+

+		select : function(va) {

+			var t = this, fv, f;

+

+			if (va == undefined)

+				return t.selectByIndex(-1);

+

+			// Is string or number make function selector

+			if (va && va.call)

+				f = va;

+			else {

+				f = function(v) {

+					return v == va;

+				};

+			}

+

+			// Do we need to do something?

+			if (va != t.selectedValue) {

+				// Find item

+				each(t.items, function(o, i) {

+					if (f(o.value)) {

+						fv = 1;

+						t.selectByIndex(i);

+						return false;

+					}

+				});

+

+				if (!fv)

+					t.selectByIndex(-1);

+			}

+		},

+

+		selectByIndex : function(idx) {

+			var t = this, e, o, label;

+

+			if (idx != t.selectedIndex) {

+				e = DOM.get(t.id + '_text');

+				label = DOM.get(t.id + '_voiceDesc');

+				o = t.items[idx];

+

+				if (o) {

+					t.selectedValue = o.value;

+					t.selectedIndex = idx;

+					DOM.setHTML(e, DOM.encode(o.title));

+					DOM.setHTML(label, t.settings.title + " - " + o.title);

+					DOM.removeClass(e, 'mceTitle');

+					DOM.setAttrib(t.id, 'aria-valuenow', o.title);

+				} else {

+					DOM.setHTML(e, DOM.encode(t.settings.title));

+					DOM.setHTML(label, DOM.encode(t.settings.title));

+					DOM.addClass(e, 'mceTitle');

+					t.selectedValue = t.selectedIndex = null;

+					DOM.setAttrib(t.id, 'aria-valuenow', t.settings.title);

+				}

+				e = 0;

+			}

+		},

+

+		add : function(n, v, o) {

+			var t = this;

+

+			o = o || {};

+			o = tinymce.extend(o, {

+				title : n,

+				value : v

+			});

+

+			t.items.push(o);

+			t.onAdd.dispatch(t, o);

+		},

+

+		getLength : function() {

+			return this.items.length;

+		},

+

+		renderHTML : function() {

+			var h = '', t = this, s = t.settings, cp = t.classPrefix;

+

+			h = '<span role="listbox" aria-haspopup="true" aria-labelledby="' + t.id +'_voiceDesc" aria-describedby="' + t.id + '_voiceDesc"><table role="presentation" tabindex="0" id="' + t.id + '" cellpadding="0" cellspacing="0" class="' + cp + ' ' + cp + 'Enabled' + (s['class'] ? (' ' + s['class']) : '') + '"><tbody><tr>';

+			h += '<td>' + DOM.createHTML('span', {id: t.id + '_voiceDesc', 'class': 'voiceLabel', style:'display:none;'}, t.settings.title); 

+			h += DOM.createHTML('a', {id : t.id + '_text', tabindex : -1, href : 'javascript:;', 'class' : 'mceText', onclick : "return false;", onmousedown : 'return false;'}, DOM.encode(t.settings.title)) + '</td>';

+			h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', tabindex : -1, href : 'javascript:;', 'class' : 'mceOpen', onclick : "return false;", onmousedown : 'return false;'}, '<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>') + '</td>';

+			h += '</tr></tbody></table></span>';

+

+			return h;

+		},

+

+		showMenu : function() {

+			var t = this, p2, e = DOM.get(this.id), m;

+

+			if (t.isDisabled() || t.items.length == 0)

+				return;

+

+			if (t.menu && t.menu.isMenuVisible)

+				return t.hideMenu();

+

+			if (!t.isMenuRendered) {

+				t.renderMenu();

+				t.isMenuRendered = true;

+			}

+

+			p2 = DOM.getPos(e);

+

+			m = t.menu;

+			m.settings.offset_x = p2.x;

+			m.settings.offset_y = p2.y;

+			m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus

+

+			// Select in menu

+			if (t.oldID)

+				m.items[t.oldID].setSelected(0);

+

+			each(t.items, function(o) {

+				if (o.value === t.selectedValue) {

+					m.items[o.id].setSelected(1);

+					t.oldID = o.id;

+				}

+			});

+

+			m.showMenu(0, e.clientHeight);

+

+			Event.add(DOM.doc, 'mousedown', t.hideMenu, t);

+			DOM.addClass(t.id, t.classPrefix + 'Selected');

+

+			//DOM.get(t.id + '_text').focus();

+		},

+

+		hideMenu : function(e) {

+			var t = this;

+

+			if (t.menu && t.menu.isMenuVisible) {

+				DOM.removeClass(t.id, t.classPrefix + 'Selected');

+

+				// Prevent double toogles by canceling the mouse click event to the button

+				if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))

+					return;

+

+				if (!e || !DOM.getParent(e.target, '.mceMenu')) {

+					DOM.removeClass(t.id, t.classPrefix + 'Selected');

+					Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);

+					t.menu.hideMenu();

+				}

+			}

+		},

+

+		renderMenu : function() {

+			var t = this, m;

+

+			m = t.settings.control_manager.createDropMenu(t.id + '_menu', {

+				menu_line : 1,

+				'class' : t.classPrefix + 'Menu mceNoIcons',

+				max_width : 150,

+				max_height : 150

+			});

+

+			m.onHideMenu.add(function() {

+				t.hideMenu();

+				t.focus();

+			});

+

+			m.add({

+				title : t.settings.title,

+				'class' : 'mceMenuItemTitle',

+				onclick : function() {

+					if (t.settings.onselect('') !== false)

+						t.select(''); // Must be runned after

+				}

+			});

+

+			each(t.items, function(o) {

+				// No value then treat it as a title

+				if (o.value === undefined) {

+					m.add({

+						title : o.title,

+						role : "option",

+						'class' : 'mceMenuItemTitle',

+						onclick : function() {

+							if (t.settings.onselect('') !== false)

+								t.select(''); // Must be runned after

+						}

+					});

+				} else {

+					o.id = DOM.uniqueId();

+					o.role= "option";

+					o.onclick = function() {

+						if (t.settings.onselect(o.value) !== false)

+							t.select(o.value); // Must be runned after

+					};

+

+					m.add(o);

+				}

+			});

+

+			t.onRenderMenu.dispatch(t, m);

+			t.menu = m;

+		},

+

+		postRender : function() {

+			var t = this, cp = t.classPrefix;

+

+			Event.add(t.id, 'click', t.showMenu, t);

+			Event.add(t.id, 'keydown', function(evt) {

+				if (evt.keyCode == 32) { // Space

+					t.showMenu(evt);

+					Event.cancel(evt);

+				}

+			});

+			Event.add(t.id, 'focus', function() {

+				if (!t._focused) {

+					t.keyDownHandler = Event.add(t.id, 'keydown', function(e) {

+						if (e.keyCode == 40) {

+							t.showMenu();

+							Event.cancel(e);

+						}

+					});

+					t.keyPressHandler = Event.add(t.id, 'keypress', function(e) {

+						var v;

+						if (e.keyCode == 13) {

+							// Fake select on enter

+							v = t.selectedValue;

+							t.selectedValue = null; // Needs to be null to fake change

+							Event.cancel(e);

+							t.settings.onselect(v);

+						}

+					});

+				}

+

+				t._focused = 1;

+			});

+			Event.add(t.id, 'blur', function() {

+				Event.remove(t.id, 'keydown', t.keyDownHandler);

+				Event.remove(t.id, 'keypress', t.keyPressHandler);

+				t._focused = 0;

+			});

+

+			// Old IE doesn't have hover on all elements

+			if (tinymce.isIE6 || !DOM.boxModel) {

+				Event.add(t.id, 'mouseover', function() {

+					if (!DOM.hasClass(t.id, cp + 'Disabled'))

+						DOM.addClass(t.id, cp + 'Hover');

+				});

+

+				Event.add(t.id, 'mouseout', function() {

+					if (!DOM.hasClass(t.id, cp + 'Disabled'))

+						DOM.removeClass(t.id, cp + 'Hover');

+				});

+			}

+

+			t.onPostRender.dispatch(t, DOM.get(t.id));

+		},

+

+		destroy : function() {

+			this.parent();

+

+			Event.clear(this.id + '_text');

+			Event.clear(this.id + '_open');

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;

+

+	tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {

+		NativeListBox : function(id, s) {

+			this.parent(id, s);

+			this.classPrefix = 'mceNativeListBox';

+		},

+

+		setDisabled : function(s) {

+			DOM.get(this.id).disabled = s;

+			this.setAriaProperty('disabled', s);

+		},

+

+		isDisabled : function() {

+			return DOM.get(this.id).disabled;

+		},

+

+		select : function(va) {

+			var t = this, fv, f;

+

+			if (va == undefined)

+				return t.selectByIndex(-1);

+

+			// Is string or number make function selector

+			if (va && va.call)

+				f = va;

+			else {

+				f = function(v) {

+					return v == va;

+				};

+			}

+

+			// Do we need to do something?

+			if (va != t.selectedValue) {

+				// Find item

+				each(t.items, function(o, i) {

+					if (f(o.value)) {

+						fv = 1;

+						t.selectByIndex(i);

+						return false;

+					}

+				});

+

+				if (!fv)

+					t.selectByIndex(-1);

+			}

+		},

+

+		selectByIndex : function(idx) {

+			DOM.get(this.id).selectedIndex = idx + 1;

+			this.selectedValue = this.items[idx] ? this.items[idx].value : null;

+		},

+

+		add : function(n, v, a) {

+			var o, t = this;

+

+			a = a || {};

+			a.value = v;

+

+			if (t.isRendered())

+				DOM.add(DOM.get(this.id), 'option', a, n);

+

+			o = {

+				title : n,

+				value : v,

+				attribs : a

+			};

+

+			t.items.push(o);

+			t.onAdd.dispatch(t, o);

+		},

+

+		getLength : function() {

+			return this.items.length;

+		},

+

+		renderHTML : function() {

+			var h, t = this;

+

+			h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --');

+

+			each(t.items, function(it) {

+				h += DOM.createHTML('option', {value : it.value}, it.title);

+			});

+

+			h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox', 'aria-labelledby': t.id + '_aria'}, h);

+			h += DOM.createHTML('span', {id : t.id + '_aria', 'style': 'display: none'}, t.settings.title);

+			return h;

+		},

+

+		postRender : function() {

+			var t = this, ch, changeListenerAdded = true;

+

+			t.rendered = true;

+

+			function onChange(e) {

+				var v = t.items[e.target.selectedIndex - 1];

+

+				if (v && (v = v.value)) {

+					t.onChange.dispatch(t, v);

+

+					if (t.settings.onselect)

+						t.settings.onselect(v);

+				}

+			};

+

+			Event.add(t.id, 'change', onChange);

+

+			// Accessibility keyhandler

+			Event.add(t.id, 'keydown', function(e) {

+				var bf;

+

+				Event.remove(t.id, 'change', ch);

+				changeListenerAdded = false;

+

+				bf = Event.add(t.id, 'blur', function() {

+					if (changeListenerAdded) return;

+					changeListenerAdded = true;

+					Event.add(t.id, 'change', onChange);

+					Event.remove(t.id, 'blur', bf);

+				});

+

+				//prevent default left and right keys on chrome - so that the keyboard navigation is used.

+				if (tinymce.isWebKit && (e.keyCode==37 ||e.keyCode==39)) {

+					return Event.prevent(e);

+				}

+				

+				if (e.keyCode == 13 || e.keyCode == 32) {

+					onChange(e);

+					return Event.cancel(e);

+				}

+			});

+

+			t.onPostRender.dispatch(t, DOM.get(t.id));

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;

+

+	tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {

+		MenuButton : function(id, s, ed) {

+			this.parent(id, s, ed);

+

+			this.onRenderMenu = new tinymce.util.Dispatcher(this);

+

+			s.menu_container = s.menu_container || DOM.doc.body;

+		},

+

+		showMenu : function() {

+			var t = this, p1, p2, e = DOM.get(t.id), m;

+

+			if (t.isDisabled())

+				return;

+

+			if (!t.isMenuRendered) {

+				t.renderMenu();

+				t.isMenuRendered = true;

+			}

+

+			if (t.isMenuVisible)

+				return t.hideMenu();

+

+			p1 = DOM.getPos(t.settings.menu_container);

+			p2 = DOM.getPos(e);

+

+			m = t.menu;

+			m.settings.offset_x = p2.x;

+			m.settings.offset_y = p2.y;

+			m.settings.vp_offset_x = p2.x;

+			m.settings.vp_offset_y = p2.y;

+			m.settings.keyboard_focus = t._focused;

+			m.showMenu(0, e.clientHeight);

+

+			Event.add(DOM.doc, 'mousedown', t.hideMenu, t);

+			t.setState('Selected', 1);

+

+			t.isMenuVisible = 1;

+		},

+

+		renderMenu : function() {

+			var t = this, m;

+

+			m = t.settings.control_manager.createDropMenu(t.id + '_menu', {

+				menu_line : 1,

+				'class' : this.classPrefix + 'Menu',

+				icons : t.settings.icons

+			});

+

+			m.onHideMenu.add(function() {

+				t.hideMenu();

+				t.focus();

+			});

+

+			t.onRenderMenu.dispatch(t, m);

+			t.menu = m;

+		},

+

+		hideMenu : function(e) {

+			var t = this;

+

+			// Prevent double toogles by canceling the mouse click event to the button

+			if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';}))

+				return;

+

+			if (!e || !DOM.getParent(e.target, '.mceMenu')) {

+				t.setState('Selected', 0);

+				Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);

+				if (t.menu)

+					t.menu.hideMenu();

+			}

+

+			t.isMenuVisible = 0;

+		},

+

+		postRender : function() {

+			var t = this, s = t.settings;

+

+			Event.add(t.id, 'click', function() {

+				if (!t.isDisabled()) {

+					if (s.onclick)

+						s.onclick(t.value);

+

+					t.showMenu();

+				}

+			});

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;

+

+	tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {

+		SplitButton : function(id, s, ed) {

+			this.parent(id, s, ed);

+			this.classPrefix = 'mceSplitButton';

+		},

+

+		renderHTML : function() {

+			var h, t = this, s = t.settings, h1;

+

+			h = '<tbody><tr>';

+

+			if (s.image)

+				h1 = DOM.createHTML('img ', {src : s.image, role: 'presentation', 'class' : 'mceAction ' + s['class']});

+			else

+				h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, '');

+

+			h1 += DOM.createHTML('span', {'class': 'mceVoiceLabel mceIconOnly', id: t.id + '_voice', style: 'display:none;'}, s.title);

+			h += '<td >' + DOM.createHTML('a', {role: 'button', id : t.id + '_action', tabindex: '-1', href : 'javascript:;', 'class' : 'mceAction ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';

+	

+			h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']}, '<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');

+			h += '<td >' + DOM.createHTML('a', {role: 'button', id : t.id + '_open', tabindex: '-1', href : 'javascript:;', 'class' : 'mceOpen ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';

+

+			h += '</tr></tbody>';

+			h = DOM.createHTML('table', { role: 'presentation',   'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', title : s.title}, h);

+			return DOM.createHTML('div', {id : t.id, role: 'button', tabindex: '0', 'aria-labelledby': t.id + '_voice', 'aria-haspopup': 'true'}, h);

+		},

+

+		postRender : function() {

+			var t = this, s = t.settings, activate;

+

+			if (s.onclick) {

+				activate = function(evt) {

+					if (!t.isDisabled()) {

+						s.onclick(t.value);

+						Event.cancel(evt);

+					}

+				};

+				Event.add(t.id + '_action', 'click', activate);

+				Event.add(t.id, ['click', 'keydown'], function(evt) {

+					var DOM_VK_SPACE = 32, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_UP = 38, DOM_VK_DOWN = 40;

+					if ((evt.keyCode === 32 || evt.keyCode === 13 || evt.keyCode === 14) && !evt.altKey && !evt.ctrlKey && !evt.metaKey) {

+						activate();

+						Event.cancel(evt);

+					} else if (evt.type === 'click' || evt.keyCode === DOM_VK_DOWN) {

+						t.showMenu();

+						Event.cancel(evt);

+					}

+				});

+			}

+

+			Event.add(t.id + '_open', 'click', function (evt) {

+				t.showMenu();

+				Event.cancel(evt);

+			});

+			Event.add([t.id, t.id + '_open'], 'focus', function() {t._focused = 1;});

+			Event.add([t.id, t.id + '_open'], 'blur', function() {t._focused = 0;});

+

+			// Old IE doesn't have hover on all elements

+			if (tinymce.isIE6 || !DOM.boxModel) {

+				Event.add(t.id, 'mouseover', function() {

+					if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))

+						DOM.addClass(t.id, 'mceSplitButtonHover');

+				});

+

+				Event.add(t.id, 'mouseout', function() {

+					if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))

+						DOM.removeClass(t.id, 'mceSplitButtonHover');

+				});

+			}

+		},

+

+		destroy : function() {

+			this.parent();

+

+			Event.clear(this.id + '_action');

+			Event.clear(this.id + '_open');

+			Event.clear(this.id);

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;

+

+	tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {

+		ColorSplitButton : function(id, s, ed) {

+			var t = this;

+

+			t.parent(id, s, ed);

+

+			t.settings = s = tinymce.extend({

+				colors : '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',

+				grid_width : 8,

+				default_color : '#888888'

+			}, t.settings);

+

+			t.onShowMenu = new tinymce.util.Dispatcher(t);

+

+			t.onHideMenu = new tinymce.util.Dispatcher(t);

+

+			t.value = s.default_color;

+		},

+

+		showMenu : function() {

+			var t = this, r, p, e, p2;

+

+			if (t.isDisabled())

+				return;

+

+			if (!t.isMenuRendered) {

+				t.renderMenu();

+				t.isMenuRendered = true;

+			}

+

+			if (t.isMenuVisible)

+				return t.hideMenu();

+

+			e = DOM.get(t.id);

+			DOM.show(t.id + '_menu');

+			DOM.addClass(e, 'mceSplitButtonSelected');

+			p2 = DOM.getPos(e);

+			DOM.setStyles(t.id + '_menu', {

+				left : p2.x,

+				top : p2.y + e.clientHeight,

+				zIndex : 200000

+			});

+			e = 0;

+

+			Event.add(DOM.doc, 'mousedown', t.hideMenu, t);

+			t.onShowMenu.dispatch(t);

+

+			if (t._focused) {

+				t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {

+					if (e.keyCode == 27)

+						t.hideMenu();

+				});

+

+				DOM.select('a', t.id + '_menu')[0].focus(); // Select first link

+			}

+

+			t.isMenuVisible = 1;

+		},

+

+		hideMenu : function(e) {

+			var t = this;

+

+			if (t.isMenuVisible) {

+				// Prevent double toogles by canceling the mouse click event to the button

+				if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';}))

+					return;

+

+				if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) {

+					DOM.removeClass(t.id, 'mceSplitButtonSelected');

+					Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);

+					Event.remove(t.id + '_menu', 'keydown', t._keyHandler);

+					DOM.hide(t.id + '_menu');

+				}

+

+				t.isMenuVisible = 0;

+				t.onHideMenu.dispatch();

+			}

+		},

+

+		renderMenu : function() {

+			var t = this, m, i = 0, s = t.settings, n, tb, tr, w, context;

+

+			w = DOM.add(s.menu_container, 'div', {role: 'listbox', id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'});

+			m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'});

+			DOM.add(m, 'span', {'class' : 'mceMenuLine'});

+

+			n = DOM.add(m, 'table', {role: 'presentation', 'class' : 'mceColorSplitMenu'});

+			tb = DOM.add(n, 'tbody');

+

+			// Generate color grid

+			i = 0;

+			each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) {

+				c = c.replace(/^#/, '');

+

+				if (!i--) {

+					tr = DOM.add(tb, 'tr');

+					i = s.grid_width - 1;

+				}

+

+				n = DOM.add(tr, 'td');

+				var settings = {

+					href : 'javascript:;',

+					style : {

+						backgroundColor : '#' + c

+					},

+					'title': t.editor.getLang('colors.' + c, c),

+					'data-mce-color' : '#' + c

+				};

+

+				// adding a proper ARIA role = button causes JAWS to read things incorrectly on IE.

+				if (!tinymce.isIE ) {

+					settings['role']= 'option';

+				}

+

+				n = DOM.add(n, 'a', settings);

+

+				if (t.editor.forcedHighContrastMode) {

+					n = DOM.add(n, 'canvas', { width: 16, height: 16, 'aria-hidden': 'true' });

+					if (n.getContext && (context = n.getContext("2d"))) {

+						context.fillStyle = '#' + c;

+						context.fillRect(0, 0, 16, 16);

+					} else {

+						// No point leaving a canvas element around if it's not supported for drawing on anyway.

+						DOM.remove(n);

+					}

+				}

+			});

+

+			if (s.more_colors_func) {

+				n = DOM.add(tb, 'tr');

+				n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'});

+				n = DOM.add(n, 'a', {role: 'option', id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title);

+

+				Event.add(n, 'click', function(e) {

+					s.more_colors_func.call(s.more_colors_scope || this);

+					return Event.cancel(e); // Cancel to fix onbeforeunload problem

+				});

+			}

+

+			DOM.addClass(m, 'mceColorSplitMenu');

+			

+			new tinymce.ui.KeyboardNavigation({

+				root: t.id + '_menu',

+				items: DOM.select('a', t.id + '_menu'),

+				onCancel: function() {

+					t.hideMenu();

+					t.focus();

+				}

+			});

+

+			// Prevent IE from scrolling and hindering click to occur #4019

+			Event.add(t.id + '_menu', 'mousedown', function(e) {return Event.cancel(e);});

+

+			Event.add(t.id + '_menu', 'click', function(e) {

+				var c;

+

+				e = DOM.getParent(e.target, 'a', tb);

+

+				if (e && e.nodeName.toLowerCase() == 'a' && (c = e.getAttribute('data-mce-color')))

+					t.setColor(c);

+

+				return Event.cancel(e); // Prevent IE auto save warning

+			});

+

+			return w;

+		},

+

+		setColor : function(c) {

+			this.displayColor(c);

+			this.hideMenu();

+			this.settings.onselect(c);

+		},

+		

+		displayColor : function(c) {

+			var t = this;

+

+			DOM.setStyle(t.id + '_preview', 'backgroundColor', c);

+

+			t.value = c;

+		},

+

+		postRender : function() {

+			var t = this, id = t.id;

+

+			t.parent();

+			DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'});

+			DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value);

+		},

+

+		destroy : function() {

+			this.parent();

+

+			Event.clear(this.id + '_menu');

+			Event.clear(this.id + '_more');

+			DOM.remove(this.id + '_menu');

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+// Shorten class names

+var dom = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event;

+tinymce.create('tinymce.ui.ToolbarGroup:tinymce.ui.Container', {

+	renderHTML : function() {

+		var t = this, h = [], controls = t.controls, each = tinymce.each, settings = t.settings;

+

+		h.push('<div id="' + t.id + '" role="group" aria-labelledby="' + t.id + '_voice">');

+		//TODO: ACC test this out - adding a role = application for getting the landmarks working well.

+		h.push("<span role='application'>");

+		h.push('<span id="' + t.id + '_voice" class="mceVoiceLabel" style="display:none;">' + dom.encode(settings.name) + '</span>');

+		each(controls, function(toolbar) {

+			h.push(toolbar.renderHTML());

+		});

+		h.push("</span>");

+		h.push('</div>');

+

+		return h.join('');

+	},

+	

+	focus : function() {

+		var t = this;

+		dom.get(t.id).focus();

+	},

+	

+	postRender : function() {

+		var t = this, items = [];

+

+		each(t.controls, function(toolbar) {

+			each (toolbar.controls, function(control) {

+				if (control.id) {

+					items.push(control);

+				}

+			});

+		});

+

+		t.keyNav = new tinymce.ui.KeyboardNavigation({

+			root: t.id,

+			items: items,

+			onCancel: function() {

+				//Move focus if webkit so that navigation back will read the item.

+				if (tinymce.isWebKit) {

+					dom.get(t.editor.id+"_ifr").focus();

+				}

+				t.editor.focus();

+			},

+			excludeFromTabOrder: !t.settings.tab_focus_toolbar

+		});

+	},

+	

+	destroy : function() {

+		var self = this;

+

+		self.parent();

+		self.keyNav.destroy();

+		Event.clear(self.id);

+	}

+});

+})(tinymce);

+

+(function(tinymce) {

+// Shorten class names

+var dom = tinymce.DOM, each = tinymce.each;

+tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {

+	renderHTML : function() {

+		var t = this, h = '', c, co, s = t.settings, i, pr, nx, cl;

+

+		cl = t.controls;

+		for (i=0; i<cl.length; i++) {

+			// Get current control, prev control, next control and if the control is a list box or not

+			co = cl[i];

+			pr = cl[i - 1];

+			nx = cl[i + 1];

+

+			// Add toolbar start

+			if (i === 0) {

+				c = 'mceToolbarStart';

+

+				if (co.Button)

+					c += ' mceToolbarStartButton';

+				else if (co.SplitButton)

+					c += ' mceToolbarStartSplitButton';

+				else if (co.ListBox)

+					c += ' mceToolbarStartListBox';

+

+				h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));

+			}

+

+			// Add toolbar end before list box and after the previous button

+			// This is to fix the o2k7 editor skins

+			if (pr && co.ListBox) {

+				if (pr.Button || pr.SplitButton)

+					h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->'));

+			}

+

+			// Render control HTML

+

+			// IE 8 quick fix, needed to propertly generate a hit area for anchors

+			if (dom.stdMode)

+				h += '<td style="position: relative">' + co.renderHTML() + '</td>';

+			else

+				h += '<td>' + co.renderHTML() + '</td>';

+

+			// Add toolbar start after list box and before the next button

+			// This is to fix the o2k7 editor skins

+			if (nx && co.ListBox) {

+				if (nx.Button || nx.SplitButton)

+					h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->'));

+			}

+		}

+

+		c = 'mceToolbarEnd';

+

+		if (co.Button)

+			c += ' mceToolbarEndButton';

+		else if (co.SplitButton)

+			c += ' mceToolbarEndSplitButton';

+		else if (co.ListBox)

+			c += ' mceToolbarEndListBox';

+

+		h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));

+

+		return dom.createHTML('table', {id : t.id, 'class' : 'mceToolbar' + (s['class'] ? ' ' + s['class'] : ''), cellpadding : '0', cellspacing : '0', align : t.settings.align || '', role: 'presentation', tabindex: '-1'}, '<tbody><tr>' + h + '</tr></tbody>');

+	}

+});

+})(tinymce);

+

+(function(tinymce) {

+	var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;

+

+	tinymce.create('tinymce.AddOnManager', {

+		AddOnManager : function() {

+			var self = this;

+

+			self.items = [];

+			self.urls = {};

+			self.lookup = {};

+			self.onAdd = new Dispatcher(self);

+		},

+

+		get : function(n) {

+			if (this.lookup[n]) {

+				return this.lookup[n].instance;

+			} else {

+				return undefined;

+			}

+		},

+

+		dependencies : function(n) {

+			var result;

+			if (this.lookup[n]) {

+				result = this.lookup[n].dependencies;

+			}

+			return result || [];

+		},

+

+		requireLangPack : function(n) {

+			var s = tinymce.settings;

+

+			if (s && s.language && s.language_load !== false)

+				tinymce.ScriptLoader.add(this.urls[n] + '/langs/' + s.language + '.js');

+		},

+

+		add : function(id, o, dependencies) {

+			this.items.push(o);

+			this.lookup[id] = {instance:o, dependencies:dependencies};

+			this.onAdd.dispatch(this, id, o);

+

+			return o;

+		},

+		createUrl: function(baseUrl, dep) {

+			if (typeof dep === "object") {

+				return dep

+			} else {

+				return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};

+			}

+		},

+

+		addComponents: function(pluginName, scripts) {

+			var pluginUrl = this.urls[pluginName];

+			tinymce.each(scripts, function(script){

+				tinymce.ScriptLoader.add(pluginUrl+"/"+script);	

+			});

+		},

+

+		load : function(n, u, cb, s) {

+			var t = this, url = u;

+

+			function loadDependencies() {

+				var dependencies = t.dependencies(n);

+				tinymce.each(dependencies, function(dep) {

+					var newUrl = t.createUrl(u, dep);

+					t.load(newUrl.resource, newUrl, undefined, undefined);

+				});

+				if (cb) {

+					if (s) {

+						cb.call(s);

+					} else {

+						cb.call(tinymce.ScriptLoader);

+					}

+				}

+			}

+

+			if (t.urls[n])

+				return;

+			if (typeof u === "object")

+				url = u.prefix + u.resource + u.suffix;

+

+			if (url.indexOf('/') != 0 && url.indexOf('://') == -1)

+				url = tinymce.baseURL + '/' + url;

+

+			t.urls[n] = url.substring(0, url.lastIndexOf('/'));

+

+			if (t.lookup[n]) {

+				loadDependencies();

+			} else {

+				tinymce.ScriptLoader.add(url, loadDependencies, s);

+			}

+		}

+	});

+

+	// Create plugin and theme managers

+	tinymce.PluginManager = new tinymce.AddOnManager();

+	tinymce.ThemeManager = new tinymce.AddOnManager();

+}(tinymce));

+

+(function(tinymce) {

+	// Shorten names

+	var each = tinymce.each, extend = tinymce.extend,

+		DOM = tinymce.DOM, Event = tinymce.dom.Event,

+		ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,

+		explode = tinymce.explode,

+		Dispatcher = tinymce.util.Dispatcher, undefined, instanceCounter = 0;

+

+	// Setup some URLs where the editor API is located and where the document is

+	tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');

+	if (!/[\/\\]$/.test(tinymce.documentBaseURL))

+		tinymce.documentBaseURL += '/';

+

+	tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);

+

+	tinymce.baseURI = new tinymce.util.URI(tinymce.baseURL);

+

+	// Add before unload listener

+	// This was required since IE was leaking memory if you added and removed beforeunload listeners

+	// with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event

+	tinymce.onBeforeUnload = new Dispatcher(tinymce);

+

+	// Must be on window or IE will leak if the editor is placed in frame or iframe

+	Event.add(window, 'beforeunload', function(e) {

+		tinymce.onBeforeUnload.dispatch(tinymce, e);

+	});

+

+	tinymce.onAddEditor = new Dispatcher(tinymce);

+

+	tinymce.onRemoveEditor = new Dispatcher(tinymce);

+

+	tinymce.EditorManager = extend(tinymce, {

+		editors : [],

+

+		i18n : {},

+

+		activeEditor : null,

+

+		init : function(s) {

+			var t = this, pl, sl = tinymce.ScriptLoader, e, el = [], ed;

+

+			function execCallback(se, n, s) {

+				var f = se[n];

+

+				if (!f)

+					return;

+

+				if (tinymce.is(f, 'string')) {

+					s = f.replace(/\.\w+$/, '');

+					s = s ? tinymce.resolve(s) : 0;

+					f = tinymce.resolve(f);

+				}

+

+				return f.apply(s || this, Array.prototype.slice.call(arguments, 2));

+			};

+

+			s = extend({

+				theme : "simple",

+				language : "en"

+			}, s);

+

+			t.settings = s;

+

+			// Legacy call

+			Event.add(document, 'init', function() {

+				var l, co;

+

+				execCallback(s, 'onpageload');

+

+				switch (s.mode) {

+					case "exact":

+						l = s.elements || '';

+

+						if(l.length > 0) {

+							each(explode(l), function(v) {

+								if (DOM.get(v)) {

+									ed = new tinymce.Editor(v, s);

+									el.push(ed);

+									ed.render(1);

+								} else {

+									each(document.forms, function(f) {

+										each(f.elements, function(e) {

+											if (e.name === v) {

+												v = 'mce_editor_' + instanceCounter++;

+												DOM.setAttrib(e, 'id', v);

+

+												ed = new tinymce.Editor(v, s);

+												el.push(ed);

+												ed.render(1);

+											}

+										});

+									});

+								}

+							});

+						}

+						break;

+

+					case "textareas":

+					case "specific_textareas":

+						function hasClass(n, c) {

+							return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);

+						};

+

+						each(DOM.select('textarea'), function(v) {

+							if (s.editor_deselector && hasClass(v, s.editor_deselector))

+								return;

+

+							if (!s.editor_selector || hasClass(v, s.editor_selector)) {

+								// Can we use the name

+								e = DOM.get(v.name);

+								if (!v.id && !e)

+									v.id = v.name;

+

+								// Generate unique name if missing or already exists

+								if (!v.id || t.get(v.id))

+									v.id = DOM.uniqueId();

+

+								ed = new tinymce.Editor(v.id, s);

+								el.push(ed);

+								ed.render(1);

+							}

+						});

+						break;

+				}

+

+				// Call onInit when all editors are initialized

+				if (s.oninit) {

+					l = co = 0;

+

+					each(el, function(ed) {

+						co++;

+

+						if (!ed.initialized) {

+							// Wait for it

+							ed.onInit.add(function() {

+								l++;

+

+								// All done

+								if (l == co)

+									execCallback(s, 'oninit');

+							});

+						} else

+							l++;

+

+						// All done

+						if (l == co)

+							execCallback(s, 'oninit');					

+					});

+				}

+			});

+		},

+

+		get : function(id) {

+			if (id === undefined)

+				return this.editors;

+

+			return this.editors[id];

+		},

+

+		getInstanceById : function(id) {

+			return this.get(id);

+		},

+

+		add : function(editor) {

+			var self = this, editors = self.editors;

+

+			// Add named and index editor instance

+			editors[editor.id] = editor;

+			editors.push(editor);

+

+			self._setActive(editor);

+			self.onAddEditor.dispatch(self, editor);

+

+

+			return editor;

+		},

+

+		remove : function(editor) {

+			var t = this, i, editors = t.editors;

+

+			// Not in the collection

+			if (!editors[editor.id])

+				return null;

+

+			delete editors[editor.id];

+

+			for (i = 0; i < editors.length; i++) {

+				if (editors[i] == editor) {

+					editors.splice(i, 1);

+					break;

+				}

+			}

+

+			// Select another editor since the active one was removed

+			if (t.activeEditor == editor)

+				t._setActive(editors[0]);

+

+			editor.destroy();

+			t.onRemoveEditor.dispatch(t, editor);

+

+			return editor;

+		},

+

+		execCommand : function(c, u, v) {

+			var t = this, ed = t.get(v), w;

+

+			// Manager commands

+			switch (c) {

+				case "mceFocus":

+					ed.focus();

+					return true;

+

+				case "mceAddEditor":

+				case "mceAddControl":

+					if (!t.get(v))

+						new tinymce.Editor(v, t.settings).render();

+

+					return true;

+

+				case "mceAddFrameControl":

+					w = v.window;

+

+					// Add tinyMCE global instance and tinymce namespace to specified window

+					w.tinyMCE = tinyMCE;

+					w.tinymce = tinymce;

+

+					tinymce.DOM.doc = w.document;

+					tinymce.DOM.win = w;

+

+					ed = new tinymce.Editor(v.element_id, v);

+					ed.render();

+

+					// Fix IE memory leaks

+					if (tinymce.isIE) {

+						function clr() {

+							ed.destroy();

+							w.detachEvent('onunload', clr);

+							w = w.tinyMCE = w.tinymce = null; // IE leak

+						};

+

+						w.attachEvent('onunload', clr);

+					}

+

+					v.page_window = null;

+

+					return true;

+

+				case "mceRemoveEditor":

+				case "mceRemoveControl":

+					if (ed)

+						ed.remove();

+

+					return true;

+

+				case 'mceToggleEditor':

+					if (!ed) {

+						t.execCommand('mceAddControl', 0, v);

+						return true;

+					}

+

+					if (ed.isHidden())

+						ed.show();

+					else

+						ed.hide();

+

+					return true;

+			}

+

+			// Run command on active editor

+			if (t.activeEditor)

+				return t.activeEditor.execCommand(c, u, v);

+

+			return false;

+		},

+

+		execInstanceCommand : function(id, c, u, v) {

+			var ed = this.get(id);

+

+			if (ed)

+				return ed.execCommand(c, u, v);

+

+			return false;

+		},

+

+		triggerSave : function() {

+			each(this.editors, function(e) {

+				e.save();

+			});

+		},

+

+		addI18n : function(p, o) {

+			var lo, i18n = this.i18n;

+

+			if (!tinymce.is(p, 'string')) {

+				each(p, function(o, lc) {

+					each(o, function(o, g) {

+						each(o, function(o, k) {

+							if (g === 'common')

+								i18n[lc + '.' + k] = o;

+							else

+								i18n[lc + '.' + g + '.' + k] = o;

+						});

+					});

+				});

+			} else {

+				each(o, function(o, k) {

+					i18n[p + '.' + k] = o;

+				});

+			}

+		},

+

+		// Private methods

+

+		_setActive : function(editor) {

+			this.selectedInstance = this.activeEditor = editor;

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	// Shorten these names

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend,

+		Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isGecko = tinymce.isGecko,

+		isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,

+		ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,

+		inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode, VK = tinymce.VK;

+

+	tinymce.create('tinymce.Editor', {

+		Editor : function(id, s) {

+			var t = this;

+

+			t.id = t.editorId = id;

+

+			t.execCommands = {};

+			t.queryStateCommands = {};

+			t.queryValueCommands = {};

+

+			t.isNotDirty = false;

+

+			t.plugins = {};

+

+			// Add events to the editor

+			each([

+				'onPreInit',

+

+				'onBeforeRenderUI',

+

+				'onPostRender',

+

+				'onLoad',

+

+				'onInit',

+

+				'onRemove',

+

+				'onActivate',

+

+				'onDeactivate',

+

+				'onClick',

+

+				'onEvent',

+

+				'onMouseUp',

+

+				'onMouseDown',

+

+				'onDblClick',

+

+				'onKeyDown',

+

+				'onKeyUp',

+

+				'onKeyPress',

+

+				'onContextMenu',

+

+				'onSubmit',

+

+				'onReset',

+

+				'onPaste',

+

+				'onPreProcess',

+

+				'onPostProcess',

+

+				'onBeforeSetContent',

+

+				'onBeforeGetContent',

+

+				'onSetContent',

+

+				'onGetContent',

+

+				'onLoadContent',

+

+				'onSaveContent',

+

+				'onNodeChange',

+

+				'onChange',

+

+				'onBeforeExecCommand',

+

+				'onExecCommand',

+

+				'onUndo',

+

+				'onRedo',

+

+				'onVisualAid',

+

+				'onSetProgressState',

+

+				'onSetAttrib'

+			], function(e) {

+				t[e] = new Dispatcher(t);

+			});

+

+			t.settings = s = extend({

+				id : id,

+				language : 'en',

+				docs_language : 'en',

+				theme : 'simple',

+				skin : 'default',

+				delta_width : 0,

+				delta_height : 0,

+				popup_css : '',

+				plugins : '',

+				document_base_url : tinymce.documentBaseURL,

+				add_form_submit_trigger : 1,

+				submit_patch : 1,

+				add_unload_trigger : 1,

+				convert_urls : 1,

+				relative_urls : 1,

+				remove_script_host : 1,

+				table_inline_editing : 0,

+				object_resizing : 1,

+				cleanup : 1,

+				accessibility_focus : 1,

+				custom_shortcuts : 1,

+				custom_undo_redo_keyboard_shortcuts : 1,

+				custom_undo_redo_restore_selection : 1,

+				custom_undo_redo : 1,

+				doctype : tinymce.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : '<!DOCTYPE>', // Use old doctype on IE 6 to avoid horizontal scroll

+				visual_table_class : 'mceItemTable',

+				visual : 1,

+				font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',

+				font_size_legacy_values : 'xx-small,small,medium,large,x-large,xx-large,300%', // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size

+				apply_source_formatting : 1,

+				directionality : 'ltr',

+				forced_root_block : 'p',

+				hidden_input : 1,

+				padd_empty_editor : 1,

+				render_ui : 1,

+				init_theme : 1,

+				force_p_newlines : 1,

+				indentation : '30px',

+				keep_styles : 1,

+				fix_table_elements : 1,

+				inline_styles : 1,

+				convert_fonts_to_spans : true,

+				indent : 'simple',

+				indent_before : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr',

+				indent_after : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr',

+				validate : true,

+				entity_encoding : 'named',

+				url_converter : t.convertURL,

+				url_converter_scope : t,

+				ie7_compat : true

+			}, s);

+

+			t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {

+				base_uri : tinyMCE.baseURI

+			});

+

+			t.baseURI = tinymce.baseURI;

+

+			t.contentCSS = [];

+

+			// Call setup

+			t.execCallback('setup', t);

+		},

+

+		render : function(nst) {

+			var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader;

+

+			// Page is not loaded yet, wait for it

+			if (!Event.domLoaded) {

+				Event.add(document, 'init', function() {

+					t.render();

+				});

+				return;

+			}

+

+			tinyMCE.settings = s;

+

+			// Element not found, then skip initialization

+			if (!t.getElement())

+				return;

+

+			// Is a iPad/iPhone and not on iOS5, then skip initialization. We need to sniff 

+			// here since the browser says it has contentEditable support but there is no visible

+			// caret We will remove this check ones Apple implements full contentEditable support

+			if (tinymce.isIDevice && !tinymce.isIOS5)

+				return;

+

+			// Add hidden input for non input elements inside form elements

+			if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))

+				DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);

+

+			if (tinymce.WindowManager)

+				t.windowManager = new tinymce.WindowManager(t);

+

+			if (s.encoding == 'xml') {

+				t.onGetContent.add(function(ed, o) {

+					if (o.save)

+						o.content = DOM.encode(o.content);

+				});

+			}

+

+			if (s.add_form_submit_trigger) {

+				t.onSubmit.addToTop(function() {

+					if (t.initialized) {

+						t.save();

+						t.isNotDirty = 1;

+					}

+				});

+			}

+

+			if (s.add_unload_trigger) {

+				t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {

+					if (t.initialized && !t.destroyed && !t.isHidden())

+						t.save({format : 'raw', no_events : true});

+				});

+			}

+

+			tinymce.addUnload(t.destroy, t);

+

+			if (s.submit_patch) {

+				t.onBeforeRenderUI.add(function() {

+					var n = t.getElement().form;

+

+					if (!n)

+						return;

+

+					// Already patched

+					if (n._mceOldSubmit)

+						return;

+

+					// Check page uses id="submit" or name="submit" for it's submit button

+					if (!n.submit.nodeType && !n.submit.length) {

+						t.formElement = n;

+						n._mceOldSubmit = n.submit;

+						n.submit = function() {

+							// Save all instances

+							tinymce.triggerSave();

+							t.isNotDirty = 1;

+

+							return t.formElement._mceOldSubmit(t.formElement);

+						};

+					}

+

+					n = null;

+				});

+			}

+

+			// Load scripts

+			function loadScripts() {

+				if (s.language && s.language_load !== false)

+					sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');

+

+				if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])

+					ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');

+

+				each(explode(s.plugins), function(p) {

+					if (p &&!PluginManager.urls[p]) {

+						if (p.charAt(0) == '-') {

+							p = p.substr(1, p.length);

+							var dependencies = PluginManager.dependencies(p);

+							each(dependencies, function(dep) {

+								var defaultSettings = {prefix:'plugins/', resource: dep, suffix:'/editor_plugin' + tinymce.suffix + '.js'};

+								var dep = PluginManager.createUrl(defaultSettings, dep);

+								PluginManager.load(dep.resource, dep);

+								

+							});

+						} else {

+							// Skip safari plugin, since it is removed as of 3.3b1

+							if (p == 'safari') {

+								return;

+							}

+							PluginManager.load(p, {prefix:'plugins/', resource: p, suffix:'/editor_plugin' + tinymce.suffix + '.js'});

+						}

+					}

+				});

+

+				// Init when que is loaded

+				sl.loadQueue(function() {

+					if (!t.removed)

+						t.init();

+				});

+			};

+

+			loadScripts();

+		},

+

+		init : function() {

+			var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re, i, initializedPlugins = [];

+

+			tinymce.add(t);

+

+			s.aria_label = s.aria_label || DOM.getAttrib(e, 'aria-label', t.getLang('aria.rich_text_area'));

+

+			if (s.theme) {

+				s.theme = s.theme.replace(/-/, '');

+				o = ThemeManager.get(s.theme);

+				t.theme = new o();

+

+				if (t.theme.init && s.init_theme)

+					t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));

+			}

+			function initPlugin(p) {

+				var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po;

+				if (c && tinymce.inArray(initializedPlugins,p) === -1) {

+					each(PluginManager.dependencies(p), function(dep){

+						initPlugin(dep);

+					});

+					po = new c(t, u);

+

+					t.plugins[p] = po;

+

+					if (po.init) {

+						po.init(t, u);

+						initializedPlugins.push(p);

+					}

+				}

+			}

+			

+			// Create all plugins

+			each(explode(s.plugins.replace(/\-/g, '')), initPlugin);

+

+			// Setup popup CSS path(s)

+			if (s.popup_css !== false) {

+				if (s.popup_css)

+					s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css);

+				else

+					s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css");

+			}

+

+			if (s.popup_css_add)

+				s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);

+

+			t.controlManager = new tinymce.ControlManager(t);

+

+			if (s.custom_undo_redo) {

+				t.onBeforeExecCommand.add(function(ed, cmd, ui, val, a) {

+					if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))

+						t.undoManager.beforeChange();

+				});

+

+				t.onExecCommand.add(function(ed, cmd, ui, val, a) {

+					if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))

+						t.undoManager.add();

+				});

+			}

+

+			t.onExecCommand.add(function(ed, c) {

+				// Don't refresh the select lists until caret move

+				if (!/^(FontName|FontSize)$/.test(c))

+					t.nodeChanged();

+			});

+

+			// Remove ghost selections on images and tables in Gecko

+			if (isGecko) {

+				function repaint(a, o) {

+					if (!o || !o.initial)

+						t.execCommand('mceRepaint');

+				};

+

+				t.onUndo.add(repaint);

+				t.onRedo.add(repaint);

+				t.onSetContent.add(repaint);

+			}

+

+			// Enables users to override the control factory

+			t.onBeforeRenderUI.dispatch(t, t.controlManager);

+

+			// Measure box

+			if (s.render_ui) {

+				w = s.width || e.style.width || e.offsetWidth;

+				h = s.height || e.style.height || e.offsetHeight;

+				t.orgDisplay = e.style.display;

+				re = /^[0-9\.]+(|px)$/i;

+

+				if (re.test('' + w))

+					w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);

+

+				if (re.test('' + h))

+					h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);

+

+				// Render UI

+				o = t.theme.renderUI({

+					targetNode : e,

+					width : w,

+					height : h,

+					deltaWidth : s.delta_width,

+					deltaHeight : s.delta_height

+				});

+

+				t.editorContainer = o.editorContainer;

+			}

+

+

+			// User specified a document.domain value

+			if (document.domain && location.hostname != document.domain)

+				tinymce.relaxedDomain = document.domain;

+

+			// Resize editor

+			DOM.setStyles(o.sizeContainer || o.editorContainer, {

+				width : w,

+				height : h

+			});

+

+			// Load specified content CSS last

+			if (s.content_css) {

+				tinymce.each(explode(s.content_css), function(u) {

+					t.contentCSS.push(t.documentBaseURI.toAbsolute(u));

+				});

+			}

+

+			h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');

+			if (h < 100)

+				h = 100;

+

+			t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';

+

+			// We only need to override paths if we have to

+			// IE has a bug where it remove site absolute urls to relative ones if this is specified

+			if (s.document_base_url != tinymce.documentBaseURL)

+				t.iframeHTML += '<base href="' + t.documentBaseURI.getURI() + '" />';

+

+			// IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode.

+			if (s.ie7_compat)

+				t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" />';

+			else

+				t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=edge" />';

+

+			t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';

+

+			// Load the CSS by injecting them into the HTML this will reduce "flicker"

+			for (i = 0; i < t.contentCSS.length; i++) {

+				t.iframeHTML += '<link type="text/css" rel="stylesheet" href="' + t.contentCSS[i] + '" />';

+			}

+

+			bi = s.body_id || 'tinymce';

+			if (bi.indexOf('=') != -1) {

+				bi = t.getParam('body_id', '', 'hash');

+				bi = bi[t.id] || bi;

+			}

+

+			bc = s.body_class || '';

+			if (bc.indexOf('=') != -1) {

+				bc = t.getParam('body_class', '', 'hash');

+				bc = bc[t.id] || '';

+			}

+

+			t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '" onload="window.parent.tinyMCE.get(\'' + t.id + '\').onLoad.dispatch();"><br></body></html>';

+

+			// Domain relaxing enabled, then set document domain

+			if (tinymce.relaxedDomain && (isIE || (tinymce.isOpera && parseFloat(opera.version()) < 11))) {

+				// We need to write the contents here in IE since multiple writes messes up refresh button and back button

+				u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';

+			}

+

+			// Create iframe

+			// TODO: ACC add the appropriate description on this.

+			n = DOM.add(o.iframeContainer, 'iframe', { 

+				id : t.id + "_ifr",

+				src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7

+				frameBorder : '0',

+				allowTransparency : "true",

+				title : s.aria_label,

+				style : {

+					width : '100%',

+					height : h,

+					display : 'block' // Important for Gecko to render the iframe correctly

+				}

+			});

+

+			t.contentAreaContainer = o.iframeContainer;

+			DOM.get(o.editorContainer).style.display = t.orgDisplay;

+			DOM.get(t.id).style.display = 'none';

+			DOM.setAttrib(t.id, 'aria-hidden', true);

+

+			if (!tinymce.relaxedDomain || !u)

+				t.setupIframe();

+

+			e = n = o = null; // Cleanup

+		},

+

+		setupIframe : function() {

+			var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;

+

+			// Setup iframe body

+			if (!isIE || !tinymce.relaxedDomain) {

+				d.open();

+				d.write(t.iframeHTML);

+				d.close();

+

+				if (tinymce.relaxedDomain)

+					d.domain = tinymce.relaxedDomain;

+			}

+

+			// It will not steal focus while setting contentEditable

+			b = t.getBody();

+			b.disabled = true;

+

+			if (!s.readonly)

+				b.contentEditable = true;

+

+			b.disabled = false;

+

+			t.schema = new tinymce.html.Schema(s);

+

+			t.dom = new tinymce.dom.DOMUtils(t.getDoc(), {

+				keep_values : true,

+				url_converter : t.convertURL,

+				url_converter_scope : t,

+				hex_colors : s.force_hex_style_colors,

+				class_filter : s.class_filter,

+				update_styles : 1,

+				fix_ie_paragraphs : 1,

+				schema : t.schema

+			});

+

+			t.parser = new tinymce.html.DomParser(s, t.schema);

+

+			// Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included.

+			if (!t.settings.allow_html_in_named_anchor) {

+				t.parser.addAttributeFilter('name', function(nodes, name) {

+					var i = nodes.length, sibling, prevSibling, parent, node;

+	

+					while (i--) {

+						node = nodes[i];

+						if (node.name === 'a' && node.firstChild) {

+							parent = node.parent;

+	

+							// Move children after current node

+							sibling = node.lastChild;

+							do {

+								prevSibling = sibling.prev;

+								parent.insert(sibling, node);

+								sibling = prevSibling;

+							} while (sibling);

+						}

+					}

+				});

+			}

+

+			// Convert src and href into data-mce-src, data-mce-href and data-mce-style

+			t.parser.addAttributeFilter('src,href,style', function(nodes, name) {

+				var i = nodes.length, node, dom = t.dom, value, internalName;

+

+				while (i--) {

+					node = nodes[i];

+					value = node.attr(name);

+					internalName = 'data-mce-' + name;

+

+					// Add internal attribute if we need to we don't on a refresh of the document

+					if (!node.attributes.map[internalName]) {	

+						if (name === "style")

+							node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name));

+						else

+							node.attr(internalName, t.convertURL(value, name, node.name));

+					}

+				}

+			});

+

+			// Keep scripts from executing

+			t.parser.addNodeFilter('script', function(nodes, name) {

+				var i = nodes.length, node;

+

+				while (i--) {

+					node = nodes[i];

+					node.attr('type', 'mce-' + (node.attr('type') || 'text/javascript'));

+				}

+			});

+

+			t.parser.addNodeFilter('#cdata', function(nodes, name) {

+				var i = nodes.length, node;

+

+				while (i--) {

+					node = nodes[i];

+					node.type = 8;

+					node.name = '#comment';

+					node.value = '[CDATA[' + node.value + ']]';

+				}

+			});

+

+			t.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) {

+				var i = nodes.length, node, nonEmptyElements = t.schema.getNonEmptyElements();

+

+				while (i--) {

+					node = nodes[i];

+

+					if (node.isEmpty(nonEmptyElements))

+						node.empty().append(new tinymce.html.Node('br', 1)).shortEnded = true;

+				}

+			});

+

+			t.serializer = new tinymce.dom.Serializer(s, t.dom, t.schema);

+

+			t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);

+

+			t.formatter = new tinymce.Formatter(this);

+

+			// Register default formats

+			t.formatter.register({

+				alignleft : [

+					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}},

+					{selector : 'img,table', collapsed : false, styles : {'float' : 'left'}}

+				],

+

+				aligncenter : [

+					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}},

+					{selector : 'img', collapsed : false, styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},

+					{selector : 'table', collapsed : false, styles : {marginLeft : 'auto', marginRight : 'auto'}}

+				],

+

+				alignright : [

+					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}},

+					{selector : 'img,table', collapsed : false, styles : {'float' : 'right'}}

+				],

+

+				alignfull : [

+					{selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}}

+				],

+

+				bold : [

+					{inline : 'strong', remove : 'all'},

+					{inline : 'span', styles : {fontWeight : 'bold'}},

+					{inline : 'b', remove : 'all'}

+				],

+

+				italic : [

+					{inline : 'em', remove : 'all'},

+					{inline : 'span', styles : {fontStyle : 'italic'}},

+					{inline : 'i', remove : 'all'}

+				],

+

+				underline : [

+					{inline : 'span', styles : {textDecoration : 'underline'}, exact : true},

+					{inline : 'u', remove : 'all'}

+				],

+

+				strikethrough : [

+					{inline : 'span', styles : {textDecoration : 'line-through'}, exact : true},

+					{inline : 'strike', remove : 'all'}

+				],

+

+				forecolor : {inline : 'span', styles : {color : '%value'}, wrap_links : false},

+				hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}, wrap_links : false},

+				fontname : {inline : 'span', styles : {fontFamily : '%value'}},

+				fontsize : {inline : 'span', styles : {fontSize : '%value'}},

+				fontsize_class : {inline : 'span', attributes : {'class' : '%value'}},

+				blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'},

+				subscript : {inline : 'sub'},

+				superscript : {inline : 'sup'},

+

+				link : {inline : 'a', selector : 'a', remove : 'all', split : true, deep : true,

+					onmatch : function(node) {

+						return true;

+					},

+

+					onformat : function(elm, fmt, vars) {

+						each(vars, function(value, key) {

+							t.dom.setAttrib(elm, key, value);

+						});

+					}

+				},

+

+				removeformat : [

+					{selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true},

+					{selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true},

+					{selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true}

+				]

+			});

+

+			// Register default block formats

+			each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {

+				t.formatter.register(name, {block : name, remove : 'all'});

+			});

+

+			// Register user defined formats

+			t.formatter.register(t.settings.formats);

+

+			t.undoManager = new tinymce.UndoManager(t);

+

+			// Pass through

+			t.undoManager.onAdd.add(function(um, l) {

+				if (um.hasUndo())

+					return t.onChange.dispatch(t, l, um);

+			});

+

+			t.undoManager.onUndo.add(function(um, l) {

+				return t.onUndo.dispatch(t, l, um);

+			});

+

+			t.undoManager.onRedo.add(function(um, l) {

+				return t.onRedo.dispatch(t, l, um);

+			});

+

+			t.forceBlocks = new tinymce.ForceBlocks(t, {

+				forced_root_block : s.forced_root_block

+			});

+

+			t.editorCommands = new tinymce.EditorCommands(t);

+

+			// Pass through

+			t.serializer.onPreProcess.add(function(se, o) {

+				return t.onPreProcess.dispatch(t, o, se);

+			});

+

+			t.serializer.onPostProcess.add(function(se, o) {

+				return t.onPostProcess.dispatch(t, o, se);

+			});

+

+			t.onPreInit.dispatch(t);

+

+			if (!s.gecko_spellcheck)

+				t.getBody().spellcheck = 0;

+

+			if (!s.readonly)

+				t._addEvents();

+

+			t.controlManager.onPostRender.dispatch(t, t.controlManager);

+			t.onPostRender.dispatch(t);

+

+			t.quirks = new tinymce.util.Quirks(this);

+

+			if (s.directionality)

+				t.getBody().dir = s.directionality;

+

+			if (s.nowrap)

+				t.getBody().style.whiteSpace = "nowrap";

+

+			if (s.handle_node_change_callback) {

+				t.onNodeChange.add(function(ed, cm, n) {

+					t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed());

+				});

+			}

+

+			if (s.save_callback) {

+				t.onSaveContent.add(function(ed, o) {

+					var h = t.execCallback('save_callback', t.id, o.content, t.getBody());

+

+					if (h)

+						o.content = h;

+				});

+			}

+

+			if (s.onchange_callback) {

+				t.onChange.add(function(ed, l) {

+					t.execCallback('onchange_callback', t, l);

+				});

+			}

+

+			if (s.protect) {

+				t.onBeforeSetContent.add(function(ed, o) {

+					if (s.protect) {

+						each(s.protect, function(pattern) {

+							o.content = o.content.replace(pattern, function(str) {

+								return '<!--mce:protected ' + escape(str) + '-->';

+							});

+						});

+					}

+				});

+			}

+

+			if (s.convert_newlines_to_brs) {

+				t.onBeforeSetContent.add(function(ed, o) {

+					if (o.initial)

+						o.content = o.content.replace(/\r?\n/g, '<br />');

+				});

+			}

+

+			if (s.preformatted) {

+				t.onPostProcess.add(function(ed, o) {

+					o.content = o.content.replace(/^\s*<pre.*?>/, '');

+					o.content = o.content.replace(/<\/pre>\s*$/, '');

+

+					if (o.set)

+						o.content = '<pre class="mceItemHidden">' + o.content + '</pre>';

+				});

+			}

+

+			if (s.verify_css_classes) {

+				t.serializer.attribValueFilter = function(n, v) {

+					var s, cl;

+

+					if (n == 'class') {

+						// Build regexp for classes

+						if (!t.classesRE) {

+							cl = t.dom.getClasses();

+

+							if (cl.length > 0) {

+								s = '';

+

+								each (cl, function(o) {

+									s += (s ? '|' : '') + o['class'];

+								});

+

+								t.classesRE = new RegExp('(' + s + ')', 'gi');

+							}

+						}

+

+						return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : '';

+					}

+

+					return v;

+				};

+			}

+

+			if (s.cleanup_callback) {

+				t.onBeforeSetContent.add(function(ed, o) {

+					o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);

+				});

+

+				t.onPreProcess.add(function(ed, o) {

+					if (o.set)

+						t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);

+

+					if (o.get)

+						t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);

+				});

+

+				t.onPostProcess.add(function(ed, o) {

+					if (o.set)

+						o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);

+

+					if (o.get)						

+						o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o);

+				});

+			}

+

+			if (s.save_callback) {

+				t.onGetContent.add(function(ed, o) {

+					if (o.save)

+						o.content = t.execCallback('save_callback', t.id, o.content, t.getBody());

+				});

+			}

+

+			if (s.handle_event_callback) {

+				t.onEvent.add(function(ed, e, o) {

+					if (t.execCallback('handle_event_callback', e, ed, o) === false)

+						Event.cancel(e);

+				});

+			}

+

+			// Add visual aids when new contents is added

+			t.onSetContent.add(function() {

+				t.addVisual(t.getBody());

+			});

+

+			// Remove empty contents

+			if (s.padd_empty_editor) {

+				t.onPostProcess.add(function(ed, o) {

+					o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');

+				});

+			}

+

+			if (isGecko) {

+				// Fix gecko link bug, when a link is placed at the end of block elements there is

+				// no way to move the caret behind the link. This fix adds a bogus br element after the link

+				function fixLinks(ed, o) {

+					each(ed.dom.select('a'), function(n) {

+						var pn = n.parentNode;

+

+						if (ed.dom.isBlock(pn) && pn.lastChild === n)

+							ed.dom.add(pn, 'br', {'data-mce-bogus' : 1});

+					});

+				};

+

+				t.onExecCommand.add(function(ed, cmd) {

+					if (cmd === 'CreateLink')

+						fixLinks(ed);

+				});

+

+				t.onSetContent.add(t.selection.onSetContent.add(fixLinks));

+			}

+

+			t.load({initial : true, format : 'html'});

+			t.startContent = t.getContent({format : 'raw'});

+			t.undoManager.add();

+			t.initialized = true;

+

+			t.onInit.dispatch(t);

+			t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc());

+			t.execCallback('init_instance_callback', t);

+			t.focus(true);

+			t.nodeChanged({initial : 1});

+

+			// Load specified content CSS last

+			each(t.contentCSS, function(u) {

+				t.dom.loadCSS(u);

+			});

+

+			// Handle auto focus

+			if (s.auto_focus) {

+				setTimeout(function () {

+					var ed = tinymce.get(s.auto_focus);

+

+					ed.selection.select(ed.getBody(), 1);

+					ed.selection.collapse(1);

+					ed.getBody().focus();

+					ed.getWin().focus();

+				}, 100);

+			}

+

+			e = null;

+		},

+

+

+		focus : function(sf) {

+			var oed, t = this, selection = t.selection, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc();

+

+			if (!sf) {

+				// Get selected control element

+				ieRng = selection.getRng();

+				if (ieRng.item) {

+					controlElm = ieRng.item(0);

+				}

+

+				t._refreshContentEditable();

+

+				// Is not content editable

+				if (!ce)

+					t.getWin().focus();

+

+				// Focus the body as well since it's contentEditable

+				if (tinymce.isGecko) {

+					t.getBody().focus();

+				}

+

+				// Restore selected control element

+				// This is needed when for example an image is selected within a

+				// layer a call to focus will then remove the control selection

+				if (controlElm && controlElm.ownerDocument == doc) {

+					ieRng = doc.body.createControlRange();

+					ieRng.addElement(controlElm);

+					ieRng.select();

+				}

+

+			}

+

+			if (tinymce.activeEditor != t) {

+				if ((oed = tinymce.activeEditor) != null)

+					oed.onDeactivate.dispatch(oed, t);

+

+				t.onActivate.dispatch(t, oed);

+			}

+

+			tinymce._setActive(t);

+		},

+

+		execCallback : function(n) {

+			var t = this, f = t.settings[n], s;

+

+			if (!f)

+				return;

+

+			// Look through lookup

+			if (t.callbackLookup && (s = t.callbackLookup[n])) {

+				f = s.func;

+				s = s.scope;

+			}

+

+			if (is(f, 'string')) {

+				s = f.replace(/\.\w+$/, '');

+				s = s ? tinymce.resolve(s) : 0;

+				f = tinymce.resolve(f);

+				t.callbackLookup = t.callbackLookup || {};

+				t.callbackLookup[n] = {func : f, scope : s};

+			}

+

+			return f.apply(s || t, Array.prototype.slice.call(arguments, 1));

+		},

+

+		translate : function(s) {

+			var c = this.settings.language || 'en', i18n = tinymce.i18n;

+

+			if (!s)

+				return '';

+

+			return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {

+				return i18n[c + '.' + b] || '{#' + b + '}';

+			});

+		},

+

+		getLang : function(n, dv) {

+			return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');

+		},

+

+		getParam : function(n, dv, ty) {

+			var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o;

+

+			if (ty === 'hash') {

+				o = {};

+

+				if (is(v, 'string')) {

+					each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) {

+						v = v.split('=');

+

+						if (v.length > 1)

+							o[tr(v[0])] = tr(v[1]);

+						else

+							o[tr(v[0])] = tr(v);

+					});

+				} else

+					o = v;

+

+				return o;

+			}

+

+			return v;

+		},

+

+		nodeChanged : function(o) {

+			var t = this, s = t.selection, n = s.getStart() || t.getBody();

+

+			// Fix for bug #1896577 it seems that this can not be fired while the editor is loading

+			if (t.initialized) {

+				o = o || {};

+				n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state

+

+				// Get parents and add them to object

+				o.parents = [];

+				t.dom.getParent(n, function(node) {

+					if (node.nodeName == 'BODY')

+						return true;

+

+					o.parents.push(node);

+				});

+

+				t.onNodeChange.dispatch(

+					t,

+					o ? o.controlManager || t.controlManager : t.controlManager,

+					n,

+					s.isCollapsed(),

+					o

+				);

+			}

+		},

+

+		addButton : function(n, s) {

+			var t = this;

+

+			t.buttons = t.buttons || {};

+			t.buttons[n] = s;

+		},

+

+		addCommand : function(name, callback, scope) {

+			this.execCommands[name] = {func : callback, scope : scope || this};

+		},

+

+		addQueryStateHandler : function(name, callback, scope) {

+			this.queryStateCommands[name] = {func : callback, scope : scope || this};

+		},

+

+		addQueryValueHandler : function(name, callback, scope) {

+			this.queryValueCommands[name] = {func : callback, scope : scope || this};

+		},

+

+		addShortcut : function(pa, desc, cmd_func, sc) {

+			var t = this, c;

+

+			if (!t.settings.custom_shortcuts)

+				return false;

+

+			t.shortcuts = t.shortcuts || {};

+

+			if (is(cmd_func, 'string')) {

+				c = cmd_func;

+

+				cmd_func = function() {

+					t.execCommand(c, false, null);

+				};

+			}

+

+			if (is(cmd_func, 'object')) {

+				c = cmd_func;

+

+				cmd_func = function() {

+					t.execCommand(c[0], c[1], c[2]);

+				};

+			}

+

+			each(explode(pa), function(pa) {

+				var o = {

+					func : cmd_func,

+					scope : sc || this,

+					desc : desc,

+					alt : false,

+					ctrl : false,

+					shift : false

+				};

+

+				each(explode(pa, '+'), function(v) {

+					switch (v) {

+						case 'alt':

+						case 'ctrl':

+						case 'shift':

+							o[v] = true;

+							break;

+

+						default:

+							o.charCode = v.charCodeAt(0);

+							o.keyCode = v.toUpperCase().charCodeAt(0);

+					}

+				});

+

+				t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o;

+			});

+

+			return true;

+		},

+

+		execCommand : function(cmd, ui, val, a) {

+			var t = this, s = 0, o, st;

+

+			if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus))

+				t.focus();

+

+			o = {};

+			t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o);

+			if (o.terminate)

+				return false;

+

+			// Command callback

+			if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) {

+				t.onExecCommand.dispatch(t, cmd, ui, val, a);

+				return true;

+			}

+

+			// Registred commands

+			if (o = t.execCommands[cmd]) {

+				st = o.func.call(o.scope, ui, val);

+

+				// Fall through on true

+				if (st !== true) {

+					t.onExecCommand.dispatch(t, cmd, ui, val, a);

+					return st;

+				}

+			}

+

+			// Plugin commands

+			each(t.plugins, function(p) {

+				if (p.execCommand && p.execCommand(cmd, ui, val)) {

+					t.onExecCommand.dispatch(t, cmd, ui, val, a);

+					s = 1;

+					return false;

+				}

+			});

+

+			if (s)

+				return true;

+

+			// Theme commands

+			if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {

+				t.onExecCommand.dispatch(t, cmd, ui, val, a);

+				return true;

+			}

+

+			// Editor commands

+			if (t.editorCommands.execCommand(cmd, ui, val)) {

+				t.onExecCommand.dispatch(t, cmd, ui, val, a);

+				return true;

+			}

+

+			// Browser commands

+			t.getDoc().execCommand(cmd, ui, val);

+			t.onExecCommand.dispatch(t, cmd, ui, val, a);

+		},

+

+		queryCommandState : function(cmd) {

+			var t = this, o, s;

+

+			// Is hidden then return undefined

+			if (t._isHidden())

+				return;

+

+			// Registred commands

+			if (o = t.queryStateCommands[cmd]) {

+				s = o.func.call(o.scope);

+

+				// Fall though on true

+				if (s !== true)

+					return s;

+			}

+

+			// Registred commands

+			o = t.editorCommands.queryCommandState(cmd);

+			if (o !== -1)

+				return o;

+

+			// Browser commands

+			try {

+				return this.getDoc().queryCommandState(cmd);

+			} catch (ex) {

+				// Fails sometimes see bug: 1896577

+			}

+		},

+

+		queryCommandValue : function(c) {

+			var t = this, o, s;

+

+			// Is hidden then return undefined

+			if (t._isHidden())

+				return;

+

+			// Registred commands

+			if (o = t.queryValueCommands[c]) {

+				s = o.func.call(o.scope);

+

+				// Fall though on true

+				if (s !== true)

+					return s;

+			}

+

+			// Registred commands

+			o = t.editorCommands.queryCommandValue(c);

+			if (is(o))

+				return o;

+

+			// Browser commands

+			try {

+				return this.getDoc().queryCommandValue(c);

+			} catch (ex) {

+				// Fails sometimes see bug: 1896577

+			}

+		},

+

+		show : function() {

+			var t = this;

+

+			DOM.show(t.getContainer());

+			DOM.hide(t.id);

+			t.load();

+		},

+

+		hide : function() {

+			var t = this, d = t.getDoc();

+

+			// Fixed bug where IE has a blinking cursor left from the editor

+			if (isIE && d)

+				d.execCommand('SelectAll');

+

+			// We must save before we hide so Safari doesn't crash

+			t.save();

+			DOM.hide(t.getContainer());

+			DOM.setStyle(t.id, 'display', t.orgDisplay);

+		},

+

+		isHidden : function() {

+			return !DOM.isHidden(this.id);

+		},

+

+		setProgressState : function(b, ti, o) {

+			this.onSetProgressState.dispatch(this, b, ti, o);

+

+			return b;

+		},

+

+		load : function(o) {

+			var t = this, e = t.getElement(), h;

+

+			if (e) {

+				o = o || {};

+				o.load = true;

+

+				// Double encode existing entities in the value

+				h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);

+				o.element = e;

+

+				if (!o.no_events)

+					t.onLoadContent.dispatch(t, o);

+

+				o.element = e = null;

+

+				return h;

+			}

+		},

+

+		save : function(o) {

+			var t = this, e = t.getElement(), h, f;

+

+			if (!e || !t.initialized)

+				return;

+

+			o = o || {};

+			o.save = true;

+

+			// Add undo level will trigger onchange event

+			if (!o.no_events) {

+				t.undoManager.typing = false;

+				t.undoManager.add();

+			}

+

+			o.element = e;

+			h = o.content = t.getContent(o);

+

+			if (!o.no_events)

+				t.onSaveContent.dispatch(t, o);

+

+			h = o.content;

+

+			if (!/TEXTAREA|INPUT/i.test(e.nodeName)) {

+				e.innerHTML = h;

+

+				// Update hidden form element

+				if (f = DOM.getParent(t.id, 'form')) {

+					each(f.elements, function(e) {

+						if (e.name == t.id) {

+							e.value = h;

+							return false;

+						}

+					});

+				}

+			} else

+				e.value = h;

+

+			o.element = e = null;

+

+			return h;

+		},

+

+		setContent : function(content, args) {

+			var self = this, rootNode, body = self.getBody(), forcedRootBlockName;

+

+			// Setup args object

+			args = args || {};

+			args.format = args.format || 'html';

+			args.set = true;

+			args.content = content;

+

+			// Do preprocessing

+			if (!args.no_events)

+				self.onBeforeSetContent.dispatch(self, args);

+

+			content = args.content;

+

+			// Padd empty content in Gecko and Safari. Commands will otherwise fail on the content

+			// It will also be impossible to place the caret in the editor unless there is a BR element present

+			if (!tinymce.isIE && (content.length === 0 || /^\s+$/.test(content))) {

+				forcedRootBlockName = self.settings.forced_root_block;

+				if (forcedRootBlockName)

+					content = '<' + forcedRootBlockName + '><br data-mce-bogus="1"></' + forcedRootBlockName + '>';

+				else

+					content = '<br data-mce-bogus="1">';

+

+				body.innerHTML = content;

+				self.selection.select(body, true);

+				self.selection.collapse(true);

+				return;

+			}

+

+			// Parse and serialize the html

+			if (args.format !== 'raw') {

+				content = new tinymce.html.Serializer({}, self.schema).serialize(

+					self.parser.parse(content)

+				);

+			}

+

+			// Set the new cleaned contents to the editor

+			args.content = tinymce.trim(content);

+			self.dom.setHTML(body, args.content);

+

+			// Do post processing

+			if (!args.no_events)

+				self.onSetContent.dispatch(self, args);

+

+			self.selection.normalize();

+

+			return args.content;

+		},

+

+		getContent : function(args) {

+			var self = this, content;

+

+			// Setup args object

+			args = args || {};

+			args.format = args.format || 'html';

+			args.get = true;

+

+			// Do preprocessing

+			if (!args.no_events)

+				self.onBeforeGetContent.dispatch(self, args);

+

+			// Get raw contents or by default the cleaned contents

+			if (args.format == 'raw')

+				content = self.getBody().innerHTML;

+			else

+				content = self.serializer.serialize(self.getBody(), args);

+

+			args.content = tinymce.trim(content);

+

+			// Do post processing

+			if (!args.no_events)

+				self.onGetContent.dispatch(self, args);

+

+			return args.content;

+		},

+

+		isDirty : function() {

+			var self = this;

+

+			return tinymce.trim(self.startContent) != tinymce.trim(self.getContent({format : 'raw', no_events : 1})) && !self.isNotDirty;

+		},

+

+		getContainer : function() {

+			var t = this;

+

+			if (!t.container)

+				t.container = DOM.get(t.editorContainer || t.id + '_parent');

+

+			return t.container;

+		},

+

+		getContentAreaContainer : function() {

+			return this.contentAreaContainer;

+		},

+

+		getElement : function() {

+			return DOM.get(this.settings.content_element || this.id);

+		},

+

+		getWin : function() {

+			var t = this, e;

+

+			if (!t.contentWindow) {

+				e = DOM.get(t.id + "_ifr");

+

+				if (e)

+					t.contentWindow = e.contentWindow;

+			}

+

+			return t.contentWindow;

+		},

+

+		getDoc : function() {

+			var t = this, w;

+

+			if (!t.contentDocument) {

+				w = t.getWin();

+

+				if (w)

+					t.contentDocument = w.document;

+			}

+

+			return t.contentDocument;

+		},

+

+		getBody : function() {

+			return this.bodyElement || this.getDoc().body;

+		},

+

+		convertURL : function(u, n, e) {

+			var t = this, s = t.settings;

+

+			// Use callback instead

+			if (s.urlconverter_callback)

+				return t.execCallback('urlconverter_callback', u, e, true, n);

+

+			// Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs

+			if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)

+				return u;

+

+			// Convert to relative

+			if (s.relative_urls)

+				return t.documentBaseURI.toRelative(u);

+

+			// Convert to absolute

+			u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);

+

+			return u;

+		},

+

+		addVisual : function(e) {

+			var t = this, s = t.settings;

+

+			e = e || t.getBody();

+

+			if (!is(t.hasVisual))

+				t.hasVisual = s.visual;

+

+			each(t.dom.select('table,a', e), function(e) {

+				var v;

+

+				switch (e.nodeName) {

+					case 'TABLE':

+						v = t.dom.getAttrib(e, 'border');

+

+						if (!v || v == '0') {

+							if (t.hasVisual)

+								t.dom.addClass(e, s.visual_table_class);

+							else

+								t.dom.removeClass(e, s.visual_table_class);

+						}

+

+						return;

+

+					case 'A':

+						v = t.dom.getAttrib(e, 'name');

+

+						if (v) {

+							if (t.hasVisual)

+								t.dom.addClass(e, 'mceItemAnchor');

+							else

+								t.dom.removeClass(e, 'mceItemAnchor');

+						}

+

+						return;

+				}

+			});

+

+			t.onVisualAid.dispatch(t, e, t.hasVisual);

+		},

+

+		remove : function() {

+			var t = this, e = t.getContainer();

+

+			t.removed = 1; // Cancels post remove event execution

+			t.hide();

+

+			t.execCallback('remove_instance_callback', t);

+			t.onRemove.dispatch(t);

+

+			// Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command

+			t.onExecCommand.listeners = [];

+

+			tinymce.remove(t);

+			DOM.remove(e);

+		},

+

+		destroy : function(s) {

+			var t = this;

+

+			// One time is enough

+			if (t.destroyed)

+				return;

+

+			if (!s) {

+				tinymce.removeUnload(t.destroy);

+				tinyMCE.onBeforeUnload.remove(t._beforeUnload);

+

+				// Manual destroy

+				if (t.theme && t.theme.destroy)

+					t.theme.destroy();

+

+				// Destroy controls, selection and dom

+				t.controlManager.destroy();

+				t.selection.destroy();

+				t.dom.destroy();

+

+				// Remove all events

+

+				// Don't clear the window or document if content editable

+				// is enabled since other instances might still be present

+				if (!t.settings.content_editable) {

+					Event.clear(t.getWin());

+					Event.clear(t.getDoc());

+				}

+

+				Event.clear(t.getBody());

+				Event.clear(t.formElement);

+			}

+

+			if (t.formElement) {

+				t.formElement.submit = t.formElement._mceOldSubmit;

+				t.formElement._mceOldSubmit = null;

+			}

+

+			t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null;

+

+			if (t.selection)

+				t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null;

+

+			t.destroyed = 1;

+		},

+

+		// Internal functions

+

+		_addEvents : function() {

+			// 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset

+			var t = this, i, s = t.settings, dom = t.dom, lo = {

+				mouseup : 'onMouseUp',

+				mousedown : 'onMouseDown',

+				click : 'onClick',

+				keyup : 'onKeyUp',

+				keydown : 'onKeyDown',

+				keypress : 'onKeyPress',

+				submit : 'onSubmit',

+				reset : 'onReset',

+				contextmenu : 'onContextMenu',

+				dblclick : 'onDblClick',

+				paste : 'onPaste' // Doesn't work in all browsers yet

+			};

+

+			function eventHandler(e, o) {

+				var ty = e.type;

+

+				// Don't fire events when it's removed

+				if (t.removed)

+					return;

+

+				// Generic event handler

+				if (t.onEvent.dispatch(t, e, o) !== false) {

+					// Specific event handler

+					t[lo[e.fakeType || e.type]].dispatch(t, e, o);

+				}

+			};

+

+			// Add DOM events

+			each(lo, function(v, k) {

+				switch (k) {

+					case 'contextmenu':

+						dom.bind(t.getDoc(), k, eventHandler);

+						break;

+

+					case 'paste':

+						dom.bind(t.getBody(), k, function(e) {

+							eventHandler(e);

+						});

+						break;

+

+					case 'submit':

+					case 'reset':

+						dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);

+						break;

+

+					default:

+						dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);

+				}

+			});

+

+			dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {

+				t.focus(true);

+			});

+

+

+			// Fixes bug where a specified document_base_uri could result in broken images

+			// This will also fix drag drop of images in Gecko

+			if (tinymce.isGecko) {

+				dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {

+					var v;

+

+					e = e.target;

+

+					if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('data-mce-src')))

+						e.src = t.documentBaseURI.toAbsolute(v);

+				});

+			}

+

+			// Set various midas options in Gecko

+			if (isGecko) {

+				function setOpts() {

+					var t = this, d = t.getDoc(), s = t.settings;

+

+					if (isGecko && !s.readonly) {

+						t._refreshContentEditable();

+

+						try {

+							// Try new Gecko method

+							d.execCommand("styleWithCSS", 0, false);

+						} catch (ex) {

+							// Use old method

+							if (!t._isHidden())

+								try {d.execCommand("useCSS", 0, true);} catch (ex) {}

+						}

+

+						if (!s.table_inline_editing)

+							try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}

+

+						if (!s.object_resizing)

+							try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}

+					}

+				};

+

+				t.onBeforeExecCommand.add(setOpts);

+				t.onMouseDown.add(setOpts);

+			}

+

+			// Add node change handlers

+			t.onMouseUp.add(t.nodeChanged);

+			//t.onClick.add(t.nodeChanged);

+			t.onKeyUp.add(function(ed, e) {

+				var c = e.keyCode;

+

+				if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)

+					t.nodeChanged();

+			});

+

+

+			// Add block quote deletion handler

+			t.onKeyDown.add(function(ed, e) {

+				if (e.keyCode != VK.BACKSPACE)

+					return;

+

+				var rng = ed.selection.getRng();

+				if (!rng.collapsed)

+					return;

+

+				var n = rng.startContainer;

+				var offset = rng.startOffset;

+

+				while (n && n.nodeType && n.nodeType != 1 && n.parentNode)

+					n = n.parentNode;

+

+				// Is the cursor at the beginning of a blockquote?

+				if (n && n.parentNode && n.parentNode.tagName === 'BLOCKQUOTE' && n.parentNode.firstChild == n && offset == 0) {

+					// Remove the blockquote

+					ed.formatter.toggle('blockquote', null, n.parentNode);

+

+					// Move the caret to the beginning of n

+					rng.setStart(n, 0);

+					rng.setEnd(n, 0);

+					ed.selection.setRng(rng);

+					ed.selection.collapse(false);

+				}

+			});

+

+

+

+			// Add reset handler

+			t.onReset.add(function() {

+				t.setContent(t.startContent, {format : 'raw'});

+			});

+

+			// Add shortcuts

+			if (s.custom_shortcuts) {

+				if (s.custom_undo_redo_keyboard_shortcuts) {

+					t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo');

+					t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo');

+				}

+

+				// Add default shortcuts for gecko

+				t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');

+				t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');

+				t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');

+

+				// BlockFormat shortcuts keys

+				for (i=1; i<=6; i++)

+					t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);

+

+				t.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']);

+				t.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']);

+				t.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']);

+

+				function find(e) {

+					var v = null;

+

+					if (!e.altKey && !e.ctrlKey && !e.metaKey)

+						return v;

+

+					each(t.shortcuts, function(o) {

+						if (tinymce.isMac && o.ctrl != e.metaKey)

+							return;

+						else if (!tinymce.isMac && o.ctrl != e.ctrlKey)

+							return;

+

+						if (o.alt != e.altKey)

+							return;

+

+						if (o.shift != e.shiftKey)

+							return;

+

+						if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {

+							v = o;

+							return false;

+						}

+					});

+

+					return v;

+				};

+

+				t.onKeyUp.add(function(ed, e) {

+					var o = find(e);

+

+					if (o)

+						return Event.cancel(e);

+				});

+

+				t.onKeyPress.add(function(ed, e) {

+					var o = find(e);

+

+					if (o)

+						return Event.cancel(e);

+				});

+

+				t.onKeyDown.add(function(ed, e) {

+					var o = find(e);

+

+					if (o) {

+						o.func.call(o.scope);

+						return Event.cancel(e);

+					}

+				});

+			}

+

+			if (tinymce.isIE) {

+				// Fix so resize will only update the width and height attributes not the styles of an image

+				// It will also block mceItemNoResize items

+				dom.bind(t.getDoc(), 'controlselect', function(e) {

+					var re = t.resizeInfo, cb;

+

+					e = e.target;

+

+					// Don't do this action for non image elements

+					if (e.nodeName !== 'IMG')

+						return;

+

+					if (re)

+						dom.unbind(re.node, re.ev, re.cb);

+

+					if (!dom.hasClass(e, 'mceItemNoResize')) {

+						ev = 'resizeend';

+						cb = dom.bind(e, ev, function(e) {

+							var v;

+

+							e = e.target;

+

+							if (v = dom.getStyle(e, 'width')) {

+								dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));

+								dom.setStyle(e, 'width', '');

+							}

+

+							if (v = dom.getStyle(e, 'height')) {

+								dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));

+								dom.setStyle(e, 'height', '');

+							}

+						});

+					} else {

+						ev = 'resizestart';

+						cb = dom.bind(e, 'resizestart', Event.cancel, Event);

+					}

+

+					re = t.resizeInfo = {

+						node : e,

+						ev : ev,

+						cb : cb

+					};

+				});

+			}

+

+			if (tinymce.isOpera) {

+				t.onClick.add(function(ed, e) {

+					Event.prevent(e);

+				});

+			}

+

+			// Add custom undo/redo handlers

+			if (s.custom_undo_redo) {

+				function addUndo() {

+					t.undoManager.typing = false;

+					t.undoManager.add();

+				};

+

+				dom.bind(t.getDoc(), 'focusout', function(e) {

+					if (!t.removed && t.undoManager.typing)

+						addUndo();

+				});

+

+				// Add undo level when contents is drag/dropped within the editor

+				t.dom.bind(t.dom.getRoot(), 'dragend', function(e) {

+					addUndo();

+				});

+

+				t.onKeyUp.add(function(ed, e) {

+					var keyCode = e.keyCode;

+

+					if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || e.ctrlKey)

+						addUndo();

+				});

+

+				t.onKeyDown.add(function(ed, e) {

+					var keyCode = e.keyCode, sel;

+

+					if (keyCode == 8) {

+						sel = t.getDoc().selection;

+

+						// Fix IE control + backspace browser bug

+						if (sel && sel.createRange && sel.createRange().item) {

+							t.undoManager.beforeChange();

+							ed.dom.remove(sel.createRange().item(0));

+							addUndo();

+

+							return Event.cancel(e);

+						}

+					}

+

+					// Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter

+					if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45) {

+						// Add position before enter key is pressed, used by IE since it still uses the default browser behavior

+						// Todo: Remove this once we normalize enter behavior on IE

+						if (tinymce.isIE && keyCode == 13)

+							t.undoManager.beforeChange();

+

+						if (t.undoManager.typing)

+							addUndo();

+

+						return;

+					}

+

+					// If key isn't shift,ctrl,alt,capslock,metakey

+					if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !t.undoManager.typing) {

+						t.undoManager.beforeChange();

+						t.undoManager.typing = true;

+						t.undoManager.add();

+					}

+				});

+

+				t.onMouseDown.add(function() {

+					if (t.undoManager.typing)

+						addUndo();

+				});

+			}

+

+			// Bug fix for FireFox keeping styles from end of selection instead of start.

+			if (tinymce.isGecko) {

+				function getAttributeApplyFunction() {

+					var template = t.dom.getAttribs(t.selection.getStart().cloneNode(false));

+

+					return function() {

+						var target = t.selection.getStart();

+

+						if (target !== t.getBody()) {

+							t.dom.setAttrib(target, "style", null);

+

+						each(template, function(attr) {

+							target.setAttributeNode(attr.cloneNode(true));

+						});

+						}

+					};

+				}

+

+				function isSelectionAcrossElements() {

+					var s = t.selection;

+

+					return !s.isCollapsed() && s.getStart() != s.getEnd();

+				}

+

+				t.onKeyPress.add(function(ed, e) {

+					var applyAttributes;

+

+					if ((e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) {

+						applyAttributes = getAttributeApplyFunction();

+						t.getDoc().execCommand('delete', false, null);

+						applyAttributes();

+

+						return Event.cancel(e);

+					}

+				});

+

+				t.dom.bind(t.getDoc(), 'cut', function(e) {

+					var applyAttributes;

+

+					if (isSelectionAcrossElements()) {

+						applyAttributes = getAttributeApplyFunction();

+						t.onKeyUp.addToTop(Event.cancel, Event);

+

+						setTimeout(function() {

+							applyAttributes();

+							t.onKeyUp.remove(Event.cancel, Event);

+						}, 0);

+					}

+				});

+			}

+		},

+

+		_refreshContentEditable : function() {

+			var self = this, body, parent;

+

+			// Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again

+			if (self._isHidden()) {

+				body = self.getBody();

+				parent = body.parentNode;

+

+				parent.removeChild(body);

+				parent.appendChild(body);

+

+				body.focus();

+			}

+		},

+

+		_isHidden : function() {

+			var s;

+

+			if (!isGecko)

+				return 0;

+

+			// Weird, wheres that cursor selection?

+			s = this.selection.getSel();

+			return (!s || !s.rangeCount || s.rangeCount == 0);

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	// Added for compression purposes

+	var each = tinymce.each, undefined, TRUE = true, FALSE = false;

+

+	tinymce.EditorCommands = function(editor) {

+		var dom = editor.dom,

+			selection = editor.selection,

+			commands = {state: {}, exec : {}, value : {}},

+			settings = editor.settings,

+			formatter = editor.formatter,

+			bookmark;

+

+		function execCommand(command, ui, value) {

+			var func;

+

+			command = command.toLowerCase();

+			if (func = commands.exec[command]) {

+				func(command, ui, value);

+				return TRUE;

+			}

+

+			return FALSE;

+		};

+

+		function queryCommandState(command) {

+			var func;

+

+			command = command.toLowerCase();

+			if (func = commands.state[command])

+				return func(command);

+

+			return -1;

+		};

+

+		function queryCommandValue(command) {

+			var func;

+

+			command = command.toLowerCase();

+			if (func = commands.value[command])

+				return func(command);

+

+			return FALSE;

+		};

+

+		function addCommands(command_list, type) {

+			type = type || 'exec';

+

+			each(command_list, function(callback, command) {

+				each(command.toLowerCase().split(','), function(command) {

+					commands[type][command] = callback;

+				});

+			});

+		};

+

+		// Expose public methods

+		tinymce.extend(this, {

+			execCommand : execCommand,

+			queryCommandState : queryCommandState,

+			queryCommandValue : queryCommandValue,

+			addCommands : addCommands

+		});

+

+		// Private methods

+

+		function execNativeCommand(command, ui, value) {

+			if (ui === undefined)

+				ui = FALSE;

+

+			if (value === undefined)

+				value = null;

+

+			return editor.getDoc().execCommand(command, ui, value);

+		};

+

+		function isFormatMatch(name) {

+			return formatter.match(name);

+		};

+

+		function toggleFormat(name, value) {

+			formatter.toggle(name, value ? {value : value} : undefined);

+		};

+

+		function storeSelection(type) {

+			bookmark = selection.getBookmark(type);

+		};

+

+		function restoreSelection() {

+			selection.moveToBookmark(bookmark);

+		};

+

+		// Add execCommand overrides

+		addCommands({

+			// Ignore these, added for compatibility

+			'mceResetDesignMode,mceBeginUndoLevel' : function() {},

+

+			// Add undo manager logic

+			'mceEndUndoLevel,mceAddUndoLevel' : function() {

+				editor.undoManager.add();

+			},

+

+			'Cut,Copy,Paste' : function(command) {

+				var doc = editor.getDoc(), failed;

+

+				// Try executing the native command

+				try {

+					execNativeCommand(command);

+				} catch (ex) {

+					// Command failed

+					failed = TRUE;

+				}

+

+				// Present alert message about clipboard access not being available

+				if (failed || !doc.queryCommandSupported(command)) {

+					if (tinymce.isGecko) {

+						editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) {

+							if (state)

+								open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank');

+						});

+					} else

+						editor.windowManager.alert(editor.getLang('clipboard_no_support'));

+				}

+			},

+

+			// Override unlink command

+			unlink : function(command) {

+				if (selection.isCollapsed())

+					selection.select(selection.getNode());

+

+				execNativeCommand(command);

+				selection.collapse(FALSE);

+			},

+

+			// Override justify commands to use the text formatter engine

+			'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {

+				var align = command.substring(7);

+

+				// Remove all other alignments first

+				each('left,center,right,full'.split(','), function(name) {

+					if (align != name)

+						formatter.remove('align' + name);

+				});

+

+				toggleFormat('align' + align);

+				execCommand('mceRepaint');

+			},

+

+			// Override list commands to fix WebKit bug

+			'InsertUnorderedList,InsertOrderedList' : function(command) {

+				var listElm, listParent;

+

+				execNativeCommand(command);

+

+				// WebKit produces lists within block elements so we need to split them

+				// we will replace the native list creation logic to custom logic later on

+				// TODO: Remove this when the list creation logic is removed

+				listElm = dom.getParent(selection.getNode(), 'ol,ul');

+				if (listElm) {

+					listParent = listElm.parentNode;

+

+					// If list is within a text block then split that block

+					if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {

+						storeSelection();

+						dom.split(listParent, listElm);

+						restoreSelection();

+					}

+				}

+			},

+

+			// Override commands to use the text formatter engine

+			'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {

+				toggleFormat(command);

+			},

+

+			// Override commands to use the text formatter engine

+			'ForeColor,HiliteColor,FontName' : function(command, ui, value) {

+				toggleFormat(command, value);

+			},

+

+			FontSize : function(command, ui, value) {

+				var fontClasses, fontSizes;

+

+				// Convert font size 1-7 to styles

+				if (value >= 1 && value <= 7) {

+					fontSizes = tinymce.explode(settings.font_size_style_values);

+					fontClasses = tinymce.explode(settings.font_size_classes);

+

+					if (fontClasses)

+						value = fontClasses[value - 1] || value;

+					else

+						value = fontSizes[value - 1] || value;

+				}

+

+				toggleFormat(command, value);

+			},

+

+			RemoveFormat : function(command) {

+				formatter.remove(command);

+			},

+

+			mceBlockQuote : function(command) {

+				toggleFormat('blockquote');

+			},

+

+			FormatBlock : function(command, ui, value) {

+				return toggleFormat(value || 'p');

+			},

+

+			mceCleanup : function() {

+				var bookmark = selection.getBookmark();

+

+				editor.setContent(editor.getContent({cleanup : TRUE}), {cleanup : TRUE});

+

+				selection.moveToBookmark(bookmark);

+			},

+

+			mceRemoveNode : function(command, ui, value) {

+				var node = value || selection.getNode();

+

+				// Make sure that the body node isn't removed

+				if (node != editor.getBody()) {

+					storeSelection();

+					editor.dom.remove(node, TRUE);

+					restoreSelection();

+				}

+			},

+

+			mceSelectNodeDepth : function(command, ui, value) {

+				var counter = 0;

+

+				dom.getParent(selection.getNode(), function(node) {

+					if (node.nodeType == 1 && counter++ == value) {

+						selection.select(node);

+						return FALSE;

+					}

+				}, editor.getBody());

+			},

+

+			mceSelectNode : function(command, ui, value) {

+				selection.select(value);

+			},

+

+			mceInsertContent : function(command, ui, value) {

+				var parser, serializer, parentNode, rootNode, fragment, args,

+					marker, nodeRect, viewPortRect, rng, node, node2, bookmarkHtml, viewportBodyElement;

+

+				//selection.normalize();

+

+				// Setup parser and serializer

+				parser = editor.parser;

+				serializer = new tinymce.html.Serializer({}, editor.schema);

+				bookmarkHtml = '<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';

+

+				// Run beforeSetContent handlers on the HTML to be inserted

+				args = {content: value, format: 'html'};

+				selection.onBeforeSetContent.dispatch(selection, args);

+				value = args.content;

+

+				// Add caret at end of contents if it's missing

+				if (value.indexOf('{$caret}') == -1)

+					value += '{$caret}';

+

+				// Replace the caret marker with a span bookmark element

+				value = value.replace(/\{\$caret\}/, bookmarkHtml);

+

+				// Insert node maker where we will insert the new HTML and get it's parent

+				if (!selection.isCollapsed())

+					editor.getDoc().execCommand('Delete', false, null);

+

+				parentNode = selection.getNode();

+

+				// Parse the fragment within the context of the parent node

+				args = {context : parentNode.nodeName.toLowerCase()};

+				fragment = parser.parse(value, args);

+

+				// Move the caret to a more suitable location

+				node = fragment.lastChild;

+				if (node.attr('id') == 'mce_marker') {

+					marker = node;

+

+					for (node = node.prev; node; node = node.walk(true)) {

+						if (node.type == 3 || !dom.isBlock(node.name)) {

+							node.parent.insert(marker, node, node.name === 'br');

+							break;

+						}

+					}

+				}

+

+				// If parser says valid we can insert the contents into that parent

+				if (!args.invalid) {

+					value = serializer.serialize(fragment);

+

+					// Check if parent is empty or only has one BR element then set the innerHTML of that parent

+					node = parentNode.firstChild;

+					node2 = parentNode.lastChild;

+					if (!node || (node === node2 && node.nodeName === 'BR'))

+						dom.setHTML(parentNode, value);

+					else

+						selection.setContent(value);

+				} else {

+					// If the fragment was invalid within that context then we need

+					// to parse and process the parent it's inserted into

+

+					// Insert bookmark node and get the parent

+					selection.setContent(bookmarkHtml);

+					parentNode = editor.selection.getNode();

+					rootNode = editor.getBody();

+

+					// Opera will return the document node when selection is in root

+					if (parentNode.nodeType == 9)

+						parentNode = node = rootNode;

+					else

+						node = parentNode;

+

+					// Find the ancestor just before the root element

+					while (node !== rootNode) {

+						parentNode = node;

+						node = node.parentNode;

+					}

+

+					// Get the outer/inner HTML depending on if we are in the root and parser and serialize that

+					value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);

+					value = serializer.serialize(

+						parser.parse(

+							// Need to replace by using a function since $ in the contents would otherwise be a problem

+							value.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i, function() {

+								return serializer.serialize(fragment);

+							})

+						)

+					);

+

+					// Set the inner/outer HTML depending on if we are in the root or not

+					if (parentNode == rootNode)

+						dom.setHTML(rootNode, value);

+					else

+						dom.setOuterHTML(parentNode, value);

+				}

+

+				marker = dom.get('mce_marker');

+

+				// Scroll range into view scrollIntoView on element can't be used since it will scroll the main view port as well

+				nodeRect = dom.getRect(marker);

+				viewPortRect = dom.getViewPort(editor.getWin());

+

+				// Check if node is out side the viewport if it is then scroll to it

+				if ((nodeRect.y + nodeRect.h > viewPortRect.y + viewPortRect.h || nodeRect.y < viewPortRect.y) ||

+					(nodeRect.x > viewPortRect.x + viewPortRect.w || nodeRect.x < viewPortRect.x)) {

+					viewportBodyElement = tinymce.isIE ? editor.getDoc().documentElement : editor.getBody();

+					viewportBodyElement.scrollLeft = nodeRect.x;

+					viewportBodyElement.scrollTop = nodeRect.y - viewPortRect.h + 25;

+				}

+

+				// Move selection before marker and remove it

+				rng = dom.createRng();

+

+				// If previous sibling is a text node set the selection to the end of that node

+				node = marker.previousSibling;

+				if (node && node.nodeType == 3) {

+					rng.setStart(node, node.nodeValue.length);

+				} else {

+					// If the previous sibling isn't a text node or doesn't exist set the selection before the marker node

+					rng.setStartBefore(marker);

+					rng.setEndBefore(marker);

+				}

+

+				// Remove the marker node and set the new range

+				dom.remove(marker);

+				selection.setRng(rng);

+

+				// Dispatch after event and add any visual elements needed

+				selection.onSetContent.dispatch(selection, args);

+				editor.addVisual();

+			},

+

+			mceInsertRawHTML : function(command, ui, value) {

+				selection.setContent('tiny_mce_marker');

+				editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, function() { return value }));

+			},

+

+			mceSetContent : function(command, ui, value) {

+				editor.setContent(value);

+			},

+

+			'Indent,Outdent' : function(command) {

+				var intentValue, indentUnit, value;

+

+				// Setup indent level

+				intentValue = settings.indentation;

+				indentUnit = /[a-z%]+$/i.exec(intentValue);

+				intentValue = parseInt(intentValue);

+

+				if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) {

+					each(selection.getSelectedBlocks(), function(element) {

+						if (command == 'outdent') {

+							value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue);

+							dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : '');

+						} else

+							dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit);

+					});

+				} else

+					execNativeCommand(command);

+			},

+

+			mceRepaint : function() {

+				var bookmark;

+

+				if (tinymce.isGecko) {

+					try {

+						storeSelection(TRUE);

+

+						if (selection.getSel())

+							selection.getSel().selectAllChildren(editor.getBody());

+

+						selection.collapse(TRUE);

+						restoreSelection();

+					} catch (ex) {

+						// Ignore

+					}

+				}

+			},

+

+			mceToggleFormat : function(command, ui, value) {

+				formatter.toggle(value);

+			},

+

+			InsertHorizontalRule : function() {

+				editor.execCommand('mceInsertContent', false, '<hr />');

+			},

+

+			mceToggleVisualAid : function() {

+				editor.hasVisual = !editor.hasVisual;

+				editor.addVisual();

+			},

+

+			mceReplaceContent : function(command, ui, value) {

+				editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'})));

+			},

+

+			mceInsertLink : function(command, ui, value) {

+				var anchor;

+

+				if (typeof(value) == 'string')

+					value = {href : value};

+

+				anchor = dom.getParent(selection.getNode(), 'a');

+

+				// Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here.

+				value.href = value.href.replace(' ', '%20');

+

+				// Remove existing links if there could be child links or that the href isn't specified

+				if (!anchor || !value.href) {

+					formatter.remove('link');

+				}		

+

+				// Apply new link to selection

+				if (value.href) {

+					formatter.apply('link', value, anchor);

+				}

+			},

+

+			selectAll : function() {

+				var root = dom.getRoot(), rng = dom.createRng();

+

+				rng.setStart(root, 0);

+				rng.setEnd(root, root.childNodes.length);

+

+				editor.selection.setRng(rng);

+			}

+		});

+

+		// Add queryCommandState overrides

+		addCommands({

+			// Override justify commands

+			'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {

+				var name = 'align' + command.substring(7);

+				// Use Formatter.matchNode instead of Formatter.match so that we don't match on parent node. This fixes bug where for both left

+				// and right align buttons can be active. This could occur when selected nodes have align right and the parent has align left.

+				var nodes = selection.isCollapsed() ? [selection.getNode()] : selection.getSelectedBlocks();

+				var matches = tinymce.map(nodes, function(node) {

+					return !!formatter.matchNode(node, name);

+				});

+				return tinymce.inArray(matches, TRUE) !== -1;

+			},

+

+			'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {

+				return isFormatMatch(command);

+			},

+

+			mceBlockQuote : function() {

+				return isFormatMatch('blockquote');

+			},

+

+			Outdent : function() {

+				var node;

+

+				if (settings.inline_styles) {

+					if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)

+						return TRUE;

+

+					if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)

+						return TRUE;

+				}

+

+				return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE'));

+			},

+

+			'InsertUnorderedList,InsertOrderedList' : function(command) {

+				return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : 'OL');

+			}

+		}, 'state');

+

+		// Add queryCommandValue overrides

+		addCommands({

+			'FontSize,FontName' : function(command) {

+				var value = 0, parent;

+

+				if (parent = dom.getParent(selection.getNode(), 'span')) {

+					if (command == 'fontsize')

+						value = parent.style.fontSize;

+					else

+						value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();

+				}

+

+				return value;

+			}

+		}, 'value');

+

+		// Add undo manager logic

+		if (settings.custom_undo_redo) {

+			addCommands({

+				Undo : function() {

+					editor.undoManager.undo();

+				},

+

+				Redo : function() {

+					editor.undoManager.redo();

+				}

+			});

+		}

+	};

+})(tinymce);

+

+(function(tinymce) {

+	var Dispatcher = tinymce.util.Dispatcher;

+

+	tinymce.UndoManager = function(editor) {

+		var self, index = 0, data = [], beforeBookmark;

+

+		function getContent() {

+			return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}));

+		};

+

+		return self = {

+			typing : false,

+

+			onAdd : new Dispatcher(self),

+

+			onUndo : new Dispatcher(self),

+

+			onRedo : new Dispatcher(self),

+

+			beforeChange : function() {

+				beforeBookmark = editor.selection.getBookmark(2, true);

+			},

+

+			add : function(level) {

+				var i, settings = editor.settings, lastLevel;

+

+				level = level || {};

+				level.content = getContent();

+

+				// Add undo level if needed

+				lastLevel = data[index];

+				if (lastLevel && lastLevel.content == level.content)

+					return null;

+

+				// Set before bookmark on previous level

+				if (data[index])

+					data[index].beforeBookmark = beforeBookmark;

+

+				// Time to compress

+				if (settings.custom_undo_redo_levels) {

+					if (data.length > settings.custom_undo_redo_levels) {

+						for (i = 0; i < data.length - 1; i++)

+							data[i] = data[i + 1];

+

+						data.length--;

+						index = data.length;

+					}

+				}

+

+				// Get a non intrusive normalized bookmark

+				level.bookmark = editor.selection.getBookmark(2, true);

+

+				// Crop array if needed

+				if (index < data.length - 1)

+					data.length = index + 1;

+

+				data.push(level);

+				index = data.length - 1;

+

+				self.onAdd.dispatch(self, level);

+				editor.isNotDirty = 0;

+

+				return level;

+			},

+

+			undo : function() {

+				var level, i;

+

+				if (self.typing) {

+					self.add();

+					self.typing = false;

+				}

+

+				if (index > 0) {

+					level = data[--index];

+

+					editor.setContent(level.content, {format : 'raw'});

+					editor.selection.moveToBookmark(level.beforeBookmark);

+

+					self.onUndo.dispatch(self, level);

+				}

+

+				return level;

+			},

+

+			redo : function() {

+				var level;

+

+				if (index < data.length - 1) {

+					level = data[++index];

+

+					editor.setContent(level.content, {format : 'raw'});

+					editor.selection.moveToBookmark(level.bookmark);

+

+					self.onRedo.dispatch(self, level);

+				}

+

+				return level;

+			},

+

+			clear : function() {

+				data = [];

+				index = 0;

+				self.typing = false;

+			},

+

+			hasUndo : function() {

+				return index > 0 || this.typing;

+			},

+

+			hasRedo : function() {

+				return index < data.length - 1 && !this.typing;

+			}

+		};

+	};

+})(tinymce);

+

+(function(tinymce) {

+	// Shorten names

+	var Event = tinymce.dom.Event,

+		isIE = tinymce.isIE,

+		isGecko = tinymce.isGecko,

+		isOpera = tinymce.isOpera,

+		each = tinymce.each,

+		extend = tinymce.extend,

+		TRUE = true,

+		FALSE = false;

+

+	function cloneFormats(node) {

+		var clone, temp, inner;

+

+		do {

+			if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {

+				if (clone) {

+					temp = node.cloneNode(false);

+					temp.appendChild(clone);

+					clone = temp;

+				} else {

+					clone = inner = node.cloneNode(false);

+				}

+

+				clone.removeAttribute('id');

+			}

+		} while (node = node.parentNode);

+

+		if (clone)

+			return {wrapper : clone, inner : inner};

+	};

+

+	// Checks if the selection/caret is at the end of the specified block element

+	function isAtEnd(rng, par) {

+		var rng2 = par.ownerDocument.createRange();

+

+		rng2.setStart(rng.endContainer, rng.endOffset);

+		rng2.setEndAfter(par);

+

+		// Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element

+		return rng2.cloneContents().textContent.length == 0;

+	};

+

+	function splitList(selection, dom, li) {

+		var listBlock, block;

+

+		if (dom.isEmpty(li)) {

+			listBlock = dom.getParent(li, 'ul,ol');

+

+			if (!dom.getParent(listBlock.parentNode, 'ul,ol')) {

+				dom.split(listBlock, li);

+				block = dom.create('p', 0, '<br data-mce-bogus="1" />');

+				dom.replace(block, li);

+				selection.select(block, 1);

+			}

+

+			return FALSE;

+		}

+

+		return TRUE;

+	};

+

+	tinymce.create('tinymce.ForceBlocks', {

+		ForceBlocks : function(ed) {

+			var t = this, s = ed.settings, elm;

+

+			t.editor = ed;

+			t.dom = ed.dom;

+			elm = (s.forced_root_block || 'p').toLowerCase();

+			s.element = elm.toUpperCase();

+

+			ed.onPreInit.add(t.setup, t);

+		},

+

+		setup : function() {

+			var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection, blockElements = ed.schema.getBlockElements();

+

+			// Force root blocks

+			if (s.forced_root_block) {

+				function addRootBlocks() {

+					var node = selection.getStart(), rootNode = ed.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF;

+

+					if (!node || node.nodeType !== 1)

+						return;

+

+					// Check if node is wrapped in block

+					while (node != rootNode) {

+						if (blockElements[node.nodeName])

+							return;

+

+						node = node.parentNode;

+					}

+

+					// Get current selection

+					rng = selection.getRng();

+					if (rng.setStart) {

+						startContainer = rng.startContainer;

+						startOffset = rng.startOffset;

+						endContainer = rng.endContainer;

+						endOffset = rng.endOffset;

+					} else {

+						// Force control range into text range

+						if (rng.item) {

+							rng = ed.getDoc().body.createTextRange();

+							rng.moveToElementText(rng.item(0));

+						}

+

+						tmpRng = rng.duplicate();

+						tmpRng.collapse(true);

+						startOffset = tmpRng.move('character', offset) * -1;

+

+						if (!tmpRng.collapsed) {

+							tmpRng = rng.duplicate();

+							tmpRng.collapse(false);

+							endOffset = (tmpRng.move('character', offset) * -1) - startOffset;

+						}

+					}

+

+					// Wrap non block elements and text nodes

+					for (node = rootNode.firstChild; node; node) {

+						if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) {

+							if (!rootBlockNode) {

+								rootBlockNode = dom.create(s.forced_root_block);

+								node.parentNode.insertBefore(rootBlockNode, node);

+							}

+

+							tempNode = node;

+							node = node.nextSibling;

+							rootBlockNode.appendChild(tempNode);

+						} else {

+							rootBlockNode = null;

+							node = node.nextSibling;

+						}

+					}

+

+					if (rng.setStart) {

+						rng.setStart(startContainer, startOffset);

+						rng.setEnd(endContainer, endOffset);

+						selection.setRng(rng);

+					} else {

+						try {

+							rng = ed.getDoc().body.createTextRange();

+							rng.moveToElementText(rootNode);

+							rng.collapse(true);

+							rng.moveStart('character', startOffset);

+

+							if (endOffset > 0)

+								rng.moveEnd('character', endOffset);

+

+							rng.select();

+						} catch (ex) {

+							// Ignore

+						}

+					}

+

+					ed.nodeChanged();

+				};

+

+				ed.onKeyUp.add(addRootBlocks);

+				ed.onClick.add(addRootBlocks);

+			}

+

+			if (s.force_br_newlines) {

+				// Force IE to produce BRs on enter

+				if (isIE) {

+					ed.onKeyPress.add(function(ed, e) {

+						var n;

+

+						if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') {

+							selection.setContent('<br id="__" /> ', {format : 'raw'});

+							n = dom.get('__');

+							n.removeAttribute('id');

+							selection.select(n);

+							selection.collapse();

+							return Event.cancel(e);

+						}

+					});

+				}

+			}

+

+			if (s.force_p_newlines) {

+				if (!isIE) {

+					ed.onKeyPress.add(function(ed, e) {

+						if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e))

+							Event.cancel(e);

+					});

+				} else {

+					// Ungly hack to for IE to preserve the formatting when you press

+					// enter at the end of a block element with formatted contents

+					// This logic overrides the browsers default logic with

+					// custom logic that enables us to control the output

+					tinymce.addUnload(function() {

+						t._previousFormats = 0; // Fix IE leak

+					});

+

+					ed.onKeyPress.add(function(ed, e) {

+						t._previousFormats = 0;

+

+						// Clone the current formats, this will later be applied to the new block contents

+						if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles)

+							t._previousFormats = cloneFormats(ed.selection.getStart());

+					});

+

+					ed.onKeyUp.add(function(ed, e) {

+						// Let IE break the element and the wrap the new caret location in the previous formats

+						if (e.keyCode == 13 && !e.shiftKey) {

+							var parent = ed.selection.getStart(), fmt = t._previousFormats;

+

+							// Parent is an empty block

+							if (!parent.hasChildNodes() && fmt) {

+								parent = dom.getParent(parent, dom.isBlock);

+

+								if (parent && parent.nodeName != 'LI') {

+									parent.innerHTML = '';

+

+									if (t._previousFormats) {

+										parent.appendChild(fmt.wrapper);

+										fmt.inner.innerHTML = '\uFEFF';

+									} else

+										parent.innerHTML = '\uFEFF';

+

+									selection.select(parent, 1);

+									selection.collapse(true);

+									ed.getDoc().execCommand('Delete', false, null);

+									t._previousFormats = 0;

+								}

+							}

+						}

+					});

+				}

+

+				if (isGecko) {

+					ed.onKeyDown.add(function(ed, e) {

+						if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)

+							t.backspaceDelete(e, e.keyCode == 8);

+					});

+				}

+			}

+

+			// Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973

+			if (tinymce.isWebKit) {

+				function insertBr(ed) {

+					var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h;

+

+					// Insert BR element

+					rng.insertNode(br = dom.create('br'));

+

+					// Place caret after BR

+					rng.setStartAfter(br);

+					rng.setEndAfter(br);

+					selection.setRng(rng);

+

+					// Could not place caret after BR then insert an nbsp entity and move the caret

+					if (selection.getSel().focusNode == br.previousSibling) {

+						selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));

+						selection.collapse(TRUE);

+					}

+

+					// Create a temporary DIV after the BR and get the position as it

+					// seems like getPos() returns 0 for text nodes and BR elements.

+					dom.insertAfter(div, br);

+					divYPos = dom.getPos(div).y;

+					dom.remove(div);

+

+					// Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117

+					if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port.

+						ed.getWin().scrollTo(0, divYPos);

+				};

+

+				ed.onKeyPress.add(function(ed, e) {

+					if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) {

+						insertBr(ed);

+						Event.cancel(e);

+					}

+				});

+			}

+

+			// IE specific fixes

+			if (isIE) {

+				// Replaces IE:s auto generated paragraphs with the specified element name

+				if (s.element != 'P') {

+					ed.onKeyPress.add(function(ed, e) {

+						t.lastElm = selection.getNode().nodeName;

+					});

+

+					ed.onKeyUp.add(function(ed, e) {

+						var bl, n = selection.getNode(), b = ed.getBody();

+

+						if (b.childNodes.length === 1 && n.nodeName == 'P') {

+							n = dom.rename(n, s.element);

+							selection.select(n);

+							selection.collapse();

+							ed.nodeChanged();

+						} else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {

+							bl = dom.getParent(n, 'p');

+

+							if (bl) {

+								dom.rename(bl, s.element);

+								ed.nodeChanged();

+							}

+						}

+					});

+				}

+			}

+		},

+

+		getParentBlock : function(n) {

+			var d = this.dom;

+

+			return d.getParent(n, d.isBlock);

+		},

+

+		insertPara : function(e) {

+			var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;

+			var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;

+

+			ed.undoManager.beforeChange();

+

+			// If root blocks are forced then use Operas default behavior since it's really good

+// Removed due to bug: #1853816

+//			if (se.forced_root_block && isOpera)

+//				return TRUE;

+

+			// Setup before range

+			rb = d.createRange();

+

+			// If is before the first block element and in body, then move it into first block element

+			rb.setStart(s.anchorNode, s.anchorOffset);

+			rb.collapse(TRUE);

+

+			// Setup after range

+			ra = d.createRange();

+

+			// If is before the first block element and in body, then move it into first block element

+			ra.setStart(s.focusNode, s.focusOffset);

+			ra.collapse(TRUE);

+

+			// Setup start/end points

+			dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;

+			sn = dir ? s.anchorNode : s.focusNode;

+			so = dir ? s.anchorOffset : s.focusOffset;

+			en = dir ? s.focusNode : s.anchorNode;

+			eo = dir ? s.focusOffset : s.anchorOffset;

+

+			// If selection is in empty table cell

+			if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {

+				if (sn.firstChild.nodeName == 'BR')

+					dom.remove(sn.firstChild); // Remove BR

+

+				// Create two new block elements

+				if (sn.childNodes.length == 0) {

+					ed.dom.add(sn, se.element, null, '<br />');

+					aft = ed.dom.add(sn, se.element, null, '<br />');

+				} else {

+					n = sn.innerHTML;

+					sn.innerHTML = '';

+					ed.dom.add(sn, se.element, null, n);

+					aft = ed.dom.add(sn, se.element, null, '<br />');

+				}

+

+				// Move caret into the last one

+				r = d.createRange();

+				r.selectNodeContents(aft);

+				r.collapse(1);

+				ed.selection.setRng(r);

+

+				return FALSE;

+			}

+

+			// If the caret is in an invalid location in FF we need to move it into the first block

+			if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {

+				sn = en = sn.firstChild;

+				so = eo = 0;

+				rb = d.createRange();

+				rb.setStart(sn, 0);

+				ra = d.createRange();

+				ra.setStart(en, 0);

+			}

+

+			// If the body is totally empty add a BR element this might happen on webkit

+			if (!d.body.hasChildNodes()) {

+				d.body.appendChild(dom.create('br'));

+			}

+

+			// Never use body as start or end node

+			sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes

+			sn = sn.nodeName == "BODY" ? sn.firstChild : sn;

+			en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes

+			en = en.nodeName == "BODY" ? en.firstChild : en;

+

+			// Get start and end blocks

+			sb = t.getParentBlock(sn);

+			eb = t.getParentBlock(en);

+			bn = sb ? sb.nodeName : se.element; // Get block name to create

+

+			// Return inside list use default browser behavior

+			if (n = t.dom.getParent(sb, 'li,pre')) {

+				if (n.nodeName == 'LI')

+					return splitList(ed.selection, t.dom, n);

+

+				return TRUE;

+			}

+

+			// If caption or absolute layers then always generate new blocks within

+			if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {

+				bn = se.element;

+				sb = null;

+			}

+

+			// If caption or absolute layers then always generate new blocks within

+			if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {

+				bn = se.element;

+				eb = null;

+			}

+

+			// Use P instead

+			if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) {

+				bn = se.element;

+				sb = eb = null;

+			}

+

+			// Setup new before and after blocks

+			bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);

+			aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);

+

+			// Remove id from after clone

+			aft.removeAttribute('id');

+

+			// Is header and cursor is at the end, then force paragraph under

+			if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb))

+				aft = ed.dom.create(se.element);

+

+			// Find start chop node

+			n = sc = sn;

+			do {

+				if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))

+					break;

+

+				sc = n;

+			} while ((n = n.previousSibling ? n.previousSibling : n.parentNode));

+

+			// Find end chop node

+			n = ec = en;

+			do {

+				if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))

+					break;

+

+				ec = n;

+			} while ((n = n.nextSibling ? n.nextSibling : n.parentNode));

+

+			// Place first chop part into before block element

+			if (sc.nodeName == bn)

+				rb.setStart(sc, 0);

+			else

+				rb.setStartBefore(sc);

+

+			rb.setEnd(sn, so);

+			bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari

+

+			// Place secnd chop part within new block element

+			try {

+				ra.setEndAfter(ec);

+			} catch(ex) {

+				//console.debug(s.focusNode, s.focusOffset);

+			}

+

+			ra.setStart(en, eo);

+			aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari

+

+			// Create range around everything

+			r = d.createRange();

+			if (!sc.previousSibling && sc.parentNode.nodeName == bn) {

+				r.setStartBefore(sc.parentNode);

+			} else {

+				if (rb.startContainer.nodeName == bn && rb.startOffset == 0)

+					r.setStartBefore(rb.startContainer);

+				else

+					r.setStart(rb.startContainer, rb.startOffset);

+			}

+

+			if (!ec.nextSibling && ec.parentNode.nodeName == bn)

+				r.setEndAfter(ec.parentNode);

+			else

+				r.setEnd(ra.endContainer, ra.endOffset);

+

+			// Delete and replace it with new block elements

+			r.deleteContents();

+

+			if (isOpera)

+				ed.getWin().scrollTo(0, vp.y);

+

+			// Never wrap blocks in blocks

+			if (bef.firstChild && bef.firstChild.nodeName == bn)

+				bef.innerHTML = bef.firstChild.innerHTML;

+

+			if (aft.firstChild && aft.firstChild.nodeName == bn)

+				aft.innerHTML = aft.firstChild.innerHTML;

+

+			function appendStyles(e, en) {

+				var nl = [], nn, n, i;

+

+				e.innerHTML = '';

+

+				// Make clones of style elements

+				if (se.keep_styles) {

+					n = en;

+					do {

+						// We only want style specific elements

+						if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {

+							nn = n.cloneNode(FALSE);

+							dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique

+							nl.push(nn);

+						}

+					} while (n = n.parentNode);

+				}

+

+				// Append style elements to aft

+				if (nl.length > 0) {

+					for (i = nl.length - 1, nn = e; i >= 0; i--)

+						nn = nn.appendChild(nl[i]);

+

+					// Padd most inner style element

+					nl[0].innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there

+					return nl[0]; // Move caret to most inner element

+				} else

+					e.innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there

+			};

+				

+			// Padd empty blocks

+			if (dom.isEmpty(bef))

+				appendStyles(bef, sn);

+

+			// Fill empty afterblook with current style

+			if (dom.isEmpty(aft))

+				car = appendStyles(aft, en);

+

+			// Opera needs this one backwards for older versions

+			if (isOpera && parseFloat(opera.version()) < 9.5) {

+				r.insertNode(bef);

+				r.insertNode(aft);

+			} else {

+				r.insertNode(aft);

+				r.insertNode(bef);

+			}

+

+			// Normalize

+			aft.normalize();

+			bef.normalize();

+

+			// Move cursor and scroll into view

+			ed.selection.select(aft, true);

+			ed.selection.collapse(true);

+

+			// scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs

+			y = ed.dom.getPos(aft).y;

+			//ch = aft.clientHeight;

+

+			// Is element within viewport

+			if (y < vp.y || y + 25 > vp.y + vp.h) {

+				ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks

+

+				/*console.debug(

+					'Element: y=' + y + ', h=' + ch + ', ' +

+					'Viewport: y=' + vp.y + ", h=" + vp.h + ', bottom=' + (vp.y + vp.h)

+				);*/

+			}

+

+			ed.undoManager.add();

+

+			return FALSE;

+		},

+

+		backspaceDelete : function(e, bs) {

+			var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn, walker;

+

+			// Delete when caret is behind a element doesn't work correctly on Gecko see #3011651

+			if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) {

+				walker = new tinymce.dom.TreeWalker(sc.lastChild, sc);

+

+				// Walk the dom backwards until we find a text node

+				for (n = sc.lastChild; n; n = walker.prev()) {

+					if (n.nodeType == 3) {

+						r.setStart(n, n.nodeValue.length);

+						r.collapse(true);

+						se.setRng(r);

+						return;

+					}

+				}

+			}

+

+			// The caret sometimes gets stuck in Gecko if you delete empty paragraphs

+			// This workaround removes the element by hand and moves the caret to the previous element

+			if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {

+				if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {

+					// Find previous block element

+					n = sc;

+					while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;

+

+					if (n) {

+						if (sc != b.firstChild) {

+							// Find last text node

+							w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE);

+							while (tn = w.nextNode())

+								n = tn;

+

+							// Place caret at the end of last text node

+							r = ed.getDoc().createRange();

+							r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);

+							r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);

+							se.setRng(r);

+

+							// Remove the target container

+							ed.dom.remove(sc);

+						}

+

+						return Event.cancel(e);

+					}

+				}

+			}

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	// Shorten names

+	var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;

+

+	tinymce.create('tinymce.ControlManager', {

+		ControlManager : function(ed, s) {

+			var t = this, i;

+

+			s = s || {};

+			t.editor = ed;

+			t.controls = {};

+			t.onAdd = new tinymce.util.Dispatcher(t);

+			t.onPostRender = new tinymce.util.Dispatcher(t);

+			t.prefix = s.prefix || ed.id + '_';

+			t._cls = {};

+

+			t.onPostRender.add(function() {

+				each(t.controls, function(c) {

+					c.postRender();

+				});

+			});

+		},

+

+		get : function(id) {

+			return this.controls[this.prefix + id] || this.controls[id];

+		},

+

+		setActive : function(id, s) {

+			var c = null;

+

+			if (c = this.get(id))

+				c.setActive(s);

+

+			return c;

+		},

+

+		setDisabled : function(id, s) {

+			var c = null;

+

+			if (c = this.get(id))

+				c.setDisabled(s);

+

+			return c;

+		},

+

+		add : function(c) {

+			var t = this;

+

+			if (c) {

+				t.controls[c.id] = c;

+				t.onAdd.dispatch(c, t);

+			}

+

+			return c;

+		},

+

+		createControl : function(n) {

+			var c, t = this, ed = t.editor;

+

+			each(ed.plugins, function(p) {

+				if (p.createControl) {

+					c = p.createControl(n, t);

+

+					if (c)

+						return false;

+				}

+			});

+

+			switch (n) {

+				case "|":

+				case "separator":

+					return t.createSeparator();

+			}

+

+			if (!c && ed.buttons && (c = ed.buttons[n]))

+				return t.createButton(n, c);

+

+			return t.add(c);

+		},

+

+		createDropMenu : function(id, s, cc) {

+			var t = this, ed = t.editor, c, bm, v, cls;

+

+			s = extend({

+				'class' : 'mceDropDown',

+				constrain : ed.settings.constrain_menus

+			}, s);

+

+			s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';

+			if (v = ed.getParam('skin_variant'))

+				s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);

+

+			id = t.prefix + id;

+			cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;

+			c = t.controls[id] = new cls(id, s);

+			c.onAddItem.add(function(c, o) {

+				var s = o.settings;

+

+				s.title = ed.getLang(s.title, s.title);

+

+				if (!s.onclick) {

+					s.onclick = function(v) {

+						if (s.cmd)

+							ed.execCommand(s.cmd, s.ui || false, s.value);

+					};

+				}

+			});

+

+			ed.onRemove.add(function() {

+				c.destroy();

+			});

+

+			// Fix for bug #1897785, #1898007

+			if (tinymce.isIE) {

+				c.onShowMenu.add(function() {

+					// IE 8 needs focus in order to store away a range with the current collapsed caret location

+					ed.focus();

+

+					bm = ed.selection.getBookmark(1);

+				});

+

+				c.onHideMenu.add(function() {

+					if (bm) {

+						ed.selection.moveToBookmark(bm);

+						bm = 0;

+					}

+				});

+			}

+

+			return t.add(c);

+		},

+

+		createListBox : function(id, s, cc) {

+			var t = this, ed = t.editor, cmd, c, cls;

+

+			if (t.get(id))

+				return null;

+

+			s.title = ed.translate(s.title);

+			s.scope = s.scope || ed;

+

+			if (!s.onselect) {

+				s.onselect = function(v) {

+					ed.execCommand(s.cmd, s.ui || false, v || s.value);

+				};

+			}

+

+			s = extend({

+				title : s.title,

+				'class' : 'mce_' + id,

+				scope : s.scope,

+				control_manager : t

+			}, s);

+

+			id = t.prefix + id;

+

+

+			function useNativeListForAccessibility(ed) {

+				return ed.settings.use_accessible_selects && !tinymce.isGecko

+			}

+

+			if (ed.settings.use_native_selects || useNativeListForAccessibility(ed))

+				c = new tinymce.ui.NativeListBox(id, s);

+			else {

+				cls = cc || t._cls.listbox || tinymce.ui.ListBox;

+				c = new cls(id, s, ed);

+			}

+

+			t.controls[id] = c;

+

+			// Fix focus problem in Safari

+			if (tinymce.isWebKit) {

+				c.onPostRender.add(function(c, n) {

+					// Store bookmark on mousedown

+					Event.add(n, 'mousedown', function() {

+						ed.bookmark = ed.selection.getBookmark(1);

+					});

+

+					// Restore on focus, since it might be lost

+					Event.add(n, 'focus', function() {

+						ed.selection.moveToBookmark(ed.bookmark);

+						ed.bookmark = null;

+					});

+				});

+			}

+

+			if (c.hideMenu)

+				ed.onMouseDown.add(c.hideMenu, c);

+

+			return t.add(c);

+		},

+

+		createButton : function(id, s, cc) {

+			var t = this, ed = t.editor, o, c, cls;

+

+			if (t.get(id))

+				return null;

+

+			s.title = ed.translate(s.title);

+			s.label = ed.translate(s.label);

+			s.scope = s.scope || ed;

+

+			if (!s.onclick && !s.menu_button) {

+				s.onclick = function() {

+					ed.execCommand(s.cmd, s.ui || false, s.value);

+				};

+			}

+

+			s = extend({

+				title : s.title,

+				'class' : 'mce_' + id,

+				unavailable_prefix : ed.getLang('unavailable', ''),

+				scope : s.scope,

+				control_manager : t

+			}, s);

+

+			id = t.prefix + id;

+

+			if (s.menu_button) {

+				cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;

+				c = new cls(id, s, ed);

+				ed.onMouseDown.add(c.hideMenu, c);

+			} else {

+				cls = t._cls.button || tinymce.ui.Button;

+				c = new cls(id, s, ed);

+			}

+

+			return t.add(c);

+		},

+

+		createMenuButton : function(id, s, cc) {

+			s = s || {};

+			s.menu_button = 1;

+

+			return this.createButton(id, s, cc);

+		},

+

+		createSplitButton : function(id, s, cc) {

+			var t = this, ed = t.editor, cmd, c, cls;

+

+			if (t.get(id))

+				return null;

+

+			s.title = ed.translate(s.title);

+			s.scope = s.scope || ed;

+

+			if (!s.onclick) {

+				s.onclick = function(v) {

+					ed.execCommand(s.cmd, s.ui || false, v || s.value);

+				};

+			}

+

+			if (!s.onselect) {

+				s.onselect = function(v) {

+					ed.execCommand(s.cmd, s.ui || false, v || s.value);

+				};

+			}

+

+			s = extend({

+				title : s.title,

+				'class' : 'mce_' + id,

+				scope : s.scope,

+				control_manager : t

+			}, s);

+

+			id = t.prefix + id;

+			cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;

+			c = t.add(new cls(id, s, ed));

+			ed.onMouseDown.add(c.hideMenu, c);

+

+			return c;

+		},

+

+		createColorSplitButton : function(id, s, cc) {

+			var t = this, ed = t.editor, cmd, c, cls, bm;

+

+			if (t.get(id))

+				return null;

+

+			s.title = ed.translate(s.title);

+			s.scope = s.scope || ed;

+

+			if (!s.onclick) {

+				s.onclick = function(v) {

+					if (tinymce.isIE)

+						bm = ed.selection.getBookmark(1);

+

+					ed.execCommand(s.cmd, s.ui || false, v || s.value);

+				};

+			}

+

+			if (!s.onselect) {

+				s.onselect = function(v) {

+					ed.execCommand(s.cmd, s.ui || false, v || s.value);

+				};

+			}

+

+			s = extend({

+				title : s.title,

+				'class' : 'mce_' + id,

+				'menu_class' : ed.getParam('skin') + 'Skin',

+				scope : s.scope,

+				more_colors_title : ed.getLang('more_colors')

+			}, s);

+

+			id = t.prefix + id;

+			cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;

+			c = new cls(id, s, ed);

+			ed.onMouseDown.add(c.hideMenu, c);

+

+			// Remove the menu element when the editor is removed

+			ed.onRemove.add(function() {

+				c.destroy();

+			});

+

+			// Fix for bug #1897785, #1898007

+			if (tinymce.isIE) {

+				c.onShowMenu.add(function() {

+					// IE 8 needs focus in order to store away a range with the current collapsed caret location

+					ed.focus();

+					bm = ed.selection.getBookmark(1);

+				});

+

+				c.onHideMenu.add(function() {

+					if (bm) {

+						ed.selection.moveToBookmark(bm);

+						bm = 0;

+					}

+				});

+			}

+

+			return t.add(c);

+		},

+

+		createToolbar : function(id, s, cc) {

+			var c, t = this, cls;

+

+			id = t.prefix + id;

+			cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;

+			c = new cls(id, s, t.editor);

+

+			if (t.get(id))

+				return null;

+

+			return t.add(c);

+		},

+		

+		createToolbarGroup : function(id, s, cc) {

+			var c, t = this, cls;

+			id = t.prefix + id;

+			cls = cc || this._cls.toolbarGroup || tinymce.ui.ToolbarGroup;

+			c = new cls(id, s, t.editor);

+			

+			if (t.get(id))

+				return null;

+			

+			return t.add(c);

+		},

+

+		createSeparator : function(cc) {

+			var cls = cc || this._cls.separator || tinymce.ui.Separator;

+

+			return new cls();

+		},

+

+		setControlType : function(n, c) {

+			return this._cls[n.toLowerCase()] = c;

+		},

+	

+		destroy : function() {

+			each(this.controls, function(c) {

+				c.destroy();

+			});

+

+			this.controls = null;

+		}

+	});

+})(tinymce);

+

+(function(tinymce) {

+	var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;

+

+	tinymce.create('tinymce.WindowManager', {

+		WindowManager : function(ed) {

+			var t = this;

+

+			t.editor = ed;

+			t.onOpen = new Dispatcher(t);

+			t.onClose = new Dispatcher(t);

+			t.params = {};

+			t.features = {};

+		},

+

+		open : function(s, p) {

+			var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;

+

+			// Default some options

+			s = s || {};

+			p = p || {};

+			sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window

+			sh = isOpera ? vp.h : screen.height;

+			s.name = s.name || 'mc_' + new Date().getTime();

+			s.width = parseInt(s.width || 320);

+			s.height = parseInt(s.height || 240);

+			s.resizable = true;

+			s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);

+			s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);

+			p.inline = false;

+			p.mce_width = s.width;

+			p.mce_height = s.height;

+			p.mce_auto_focus = s.auto_focus;

+

+			if (mo) {

+				if (isIE) {

+					s.center = true;

+					s.help = false;

+					s.dialogWidth = s.width + 'px';

+					s.dialogHeight = s.height + 'px';

+					s.scroll = s.scrollbars || false;

+				}

+			}

+

+			// Build features string

+			each(s, function(v, k) {

+				if (tinymce.is(v, 'boolean'))

+					v = v ? 'yes' : 'no';

+

+				if (!/^(name|url)$/.test(k)) {

+					if (isIE && mo)

+						f += (f ? ';' : '') + k + ':' + v;

+					else

+						f += (f ? ',' : '') + k + '=' + v;

+				}

+			});

+

+			t.features = s;

+			t.params = p;

+			t.onOpen.dispatch(t, s, p);

+

+			u = s.url || s.file;

+			u = tinymce._addVer(u);

+

+			try {

+				if (isIE && mo) {

+					w = 1;

+					window.showModalDialog(u, window, f);

+				} else

+					w = window.open(u, s.name, f);

+			} catch (ex) {

+				// Ignore

+			}

+

+			if (!w)

+				alert(t.editor.getLang('popup_blocked'));

+		},

+

+		close : function(w) {

+			w.close();

+			this.onClose.dispatch(this);

+		},

+

+		createInstance : function(cl, a, b, c, d, e) {

+			var f = tinymce.resolve(cl);

+

+			return new f(a, b, c, d, e);

+		},

+

+		confirm : function(t, cb, s, w) {

+			w = w || window;

+

+			cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));

+		},

+

+		alert : function(tx, cb, s, w) {

+			var t = this;

+

+			w = w || window;

+			w.alert(t._decode(t.editor.getLang(tx, tx)));

+

+			if (cb)

+				cb.call(s || t);

+		},

+

+		resizeBy : function(dw, dh, win) {

+			win.resizeBy(dw, dh);

+		},

+

+		// Internal functions

+

+		_decode : function(s) {

+			return tinymce.DOM.decode(s).replace(/\\n/g, '\n');

+		}

+	});

+}(tinymce));

+(function(tinymce) {

+	tinymce.Formatter = function(ed) {

+		var formats = {},

+			each = tinymce.each,

+			dom = ed.dom,

+			selection = ed.selection,

+			TreeWalker = tinymce.dom.TreeWalker,

+			rangeUtils = new tinymce.dom.RangeUtils(dom),

+			isValid = ed.schema.isValidChild,

+			isBlock = dom.isBlock,

+			forcedRootBlock = ed.settings.forced_root_block,

+			nodeIndex = dom.nodeIndex,

+			INVISIBLE_CHAR = '\uFEFF',

+			MCE_ATTR_RE = /^(src|href|style)$/,

+			FALSE = false,

+			TRUE = true,

+			undefined;

+

+		function isArray(obj) {

+			return obj instanceof Array;

+		};

+

+		function getParents(node, selector) {

+			return dom.getParents(node, selector, dom.getRoot());

+		};

+

+		function isCaretNode(node) {

+			return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline');

+		};

+

+		// Public functions

+

+		function get(name) {

+			return name ? formats[name] : formats;

+		};

+

+		function register(name, format) {

+			if (name) {

+				if (typeof(name) !== 'string') {

+					each(name, function(format, name) {

+						register(name, format);

+					});

+				} else {

+					// Force format into array and add it to internal collection

+					format = format.length ? format : [format];

+

+					each(format, function(format) {

+						// Set deep to false by default on selector formats this to avoid removing

+						// alignment on images inside paragraphs when alignment is changed on paragraphs

+						if (format.deep === undefined)

+							format.deep = !format.selector;

+

+						// Default to true

+						if (format.split === undefined)

+							format.split = !format.selector || format.inline;

+

+						// Default to true

+						if (format.remove === undefined && format.selector && !format.inline)

+							format.remove = 'none';

+

+						// Mark format as a mixed format inline + block level

+						if (format.selector && format.inline) {

+							format.mixed = true;

+							format.block_expand = true;

+						}

+

+						// Split classes if needed

+						if (typeof(format.classes) === 'string')

+							format.classes = format.classes.split(/\s+/);

+					});

+

+					formats[name] = format;

+				}

+			}

+		};

+

+		var getTextDecoration = function(node) {

+			var decoration;

+

+			ed.dom.getParent(node, function(n) {

+				decoration = ed.dom.getStyle(n, 'text-decoration');

+				return decoration && decoration !== 'none';

+			});

+

+			return decoration;

+		};

+

+		var processUnderlineAndColor = function(node) {

+			var textDecoration;

+			if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {

+				textDecoration = getTextDecoration(node.parentNode);

+				if (ed.dom.getStyle(node, 'color') && textDecoration) {

+					ed.dom.setStyle(node, 'text-decoration', textDecoration);

+				} else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) {

+					ed.dom.setStyle(node, 'text-decoration', null);

+				}

+			}

+		};

+

+		function apply(name, vars, node) {

+			var formatList = get(name), format = formatList[0], bookmark, rng, i, isCollapsed = selection.isCollapsed();

+

+			function setElementFormat(elm, fmt) {

+				fmt = fmt || format;

+

+				if (elm) {

+					if (fmt.onformat) {

+						fmt.onformat(elm, fmt, vars, node);

+					}

+

+					each(fmt.styles, function(value, name) {

+						dom.setStyle(elm, name, replaceVars(value, vars));

+					});

+

+					each(fmt.attributes, function(value, name) {

+						dom.setAttrib(elm, name, replaceVars(value, vars));

+					});

+

+					each(fmt.classes, function(value) {

+						value = replaceVars(value, vars);

+

+						if (!dom.hasClass(elm, value))

+							dom.addClass(elm, value);

+					});

+				}

+			};

+			function adjustSelectionToVisibleSelection() {

+				function findSelectionEnd(start, end) {

+					var walker = new TreeWalker(end);

+					for (node = walker.current(); node; node = walker.prev()) {

+						if (node.childNodes.length > 1 || node == start) {

+							return node;

+						}

+					}

+				};

+

+				// Adjust selection so that a end container with a end offset of zero is not included in the selection

+				// as this isn't visible to the user.

+				var rng = ed.selection.getRng();

+				var start = rng.startContainer;

+				var end = rng.endContainer;

+

+				if (start != end && rng.endOffset == 0) {

+					var newEnd = findSelectionEnd(start, end);

+					var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length;

+

+					rng.setEnd(newEnd, endOffset);

+				}

+

+				return rng;

+			}

+			

+			function applyStyleToList(node, bookmark, wrapElm, newWrappers, process){

+				var nodes = [], listIndex = -1, list, startIndex = -1, endIndex = -1, currentWrapElm;

+				

+				// find the index of the first child list.

+				each(node.childNodes, function(n, index) {

+					if (n.nodeName === "UL" || n.nodeName === "OL") {

+						listIndex = index;

+						list = n;

+						return false;

+					}

+				});

+				

+				// get the index of the bookmarks

+				each(node.childNodes, function(n, index) {

+					if (n.nodeName === "SPAN" && dom.getAttrib(n, "data-mce-type") == "bookmark") {

+						if (n.id == bookmark.id + "_start") {

+							startIndex = index;

+						} else if (n.id == bookmark.id + "_end") {

+							endIndex = index;

+						}

+					}

+				});

+				

+				// if the selection spans across an embedded list, or there isn't an embedded list - handle processing normally

+				if (listIndex <= 0 || (startIndex < listIndex && endIndex > listIndex)) {

+					each(tinymce.grep(node.childNodes), process);

+					return 0;

+				} else {

+					currentWrapElm = wrapElm.cloneNode(FALSE);

+					

+					// create a list of the nodes on the same side of the list as the selection

+					each(tinymce.grep(node.childNodes), function(n, index) {

+						if ((startIndex < listIndex && index < listIndex) || (startIndex > listIndex && index > listIndex)) {

+							nodes.push(n); 

+							n.parentNode.removeChild(n);

+						}

+					});

+					

+					// insert the wrapping element either before or after the list.

+					if (startIndex < listIndex) {

+						node.insertBefore(currentWrapElm, list);

+					} else if (startIndex > listIndex) {

+						node.insertBefore(currentWrapElm, list.nextSibling);

+					}

+					

+					// add the new nodes to the list.

+					newWrappers.push(currentWrapElm);

+

+					each(nodes, function(node) {

+						currentWrapElm.appendChild(node);

+					});

+

+					return currentWrapElm;

+				}

+			};

+			

+			function applyRngStyle(rng, bookmark, node_specific) {

+				var newWrappers = [], wrapName, wrapElm;

+

+				// Setup wrapper element

+				wrapName = format.inline || format.block;

+				wrapElm = dom.create(wrapName);

+				setElementFormat(wrapElm);

+

+				rangeUtils.walk(rng, function(nodes) {

+					var currentWrapElm;

+

+					function process(node) {

+						var nodeName = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found;

+

+						// Stop wrapping on br elements

+						if (isEq(nodeName, 'br')) {

+							currentWrapElm = 0;

+

+							// Remove any br elements when we wrap things

+							if (format.block)

+								dom.remove(node);

+

+							return;

+						}

+

+						// If node is wrapper type

+						if (format.wrapper && matchNode(node, name, vars)) {

+							currentWrapElm = 0;

+							return;

+						}

+

+						// Can we rename the block

+						if (format.block && !format.wrapper && isTextBlock(nodeName)) {

+							node = dom.rename(node, wrapName);

+							setElementFormat(node);

+							newWrappers.push(node);

+							currentWrapElm = 0;

+							return;

+						}

+

+						// Handle selector patterns

+						if (format.selector) {

+							// Look for matching formats

+							each(formatList, function(format) {

+								// Check collapsed state if it exists

+								if ('collapsed' in format && format.collapsed !== isCollapsed) {

+									return;

+								}

+

+								if (dom.is(node, format.selector) && !isCaretNode(node)) {

+									setElementFormat(node, format);

+									found = true;

+								}

+							});

+

+							// Continue processing if a selector match wasn't found and a inline element is defined

+							if (!format.inline || found) {

+								currentWrapElm = 0;

+								return;

+							}

+						}

+

+						// Is it valid to wrap this item

+						if (isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&

+								!(!node_specific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && node.id !== '_mce_caret') {

+							// Start wrapping

+							if (!currentWrapElm) {

+								// Wrap the node

+								currentWrapElm = wrapElm.cloneNode(FALSE);

+								node.parentNode.insertBefore(currentWrapElm, node);

+								newWrappers.push(currentWrapElm);

+							}

+

+							currentWrapElm.appendChild(node);

+						} else if (nodeName == 'li' && bookmark) {

+							// Start wrapping - if we are in a list node and have a bookmark, then we will always begin by wrapping in a new element.

+							currentWrapElm = applyStyleToList(node, bookmark, wrapElm, newWrappers, process);

+						} else {

+							// Start a new wrapper for possible children

+							currentWrapElm = 0;

+

+							each(tinymce.grep(node.childNodes), process);

+

+							// End the last wrapper

+							currentWrapElm = 0;

+						}

+					};

+

+					// Process siblings from range

+					each(nodes, process);

+				});

+

+				// Wrap links inside as well, for example color inside a link when the wrapper is around the link

+				if (format.wrap_links === false) {

+					each(newWrappers, function(node) {

+						function process(node) {

+							var i, currentWrapElm, children;

+

+							if (node.nodeName === 'A') {

+								currentWrapElm = wrapElm.cloneNode(FALSE);

+								newWrappers.push(currentWrapElm);

+

+								children = tinymce.grep(node.childNodes);

+								for (i = 0; i < children.length; i++)

+									currentWrapElm.appendChild(children[i]);

+

+								node.appendChild(currentWrapElm);

+							}

+

+							each(tinymce.grep(node.childNodes), process);

+						};

+

+						process(node);

+					});

+				}

+

+				// Cleanup

+				each(newWrappers, function(node) {

+					var childCount;

+

+					function getChildCount(node) {

+						var count = 0;

+

+						each(node.childNodes, function(node) {

+							if (!isWhiteSpaceNode(node) && !isBookmarkNode(node))

+								count++;

+						});

+

+						return count;

+					};

+

+					function mergeStyles(node) {

+						var child, clone;

+

+						each(node.childNodes, function(node) {

+							if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) {

+								child = node;

+								return FALSE; // break loop

+							}

+						});

+

+						// If child was found and of the same type as the current node

+						if (child && matchName(child, format)) {

+							clone = child.cloneNode(FALSE);

+							setElementFormat(clone);

+

+							dom.replace(clone, node, TRUE);

+							dom.remove(child, 1);

+						}

+

+						return clone || node;

+					};

+

+					childCount = getChildCount(node);

+

+					// Remove empty nodes but only if there is multiple wrappers and they are not block

+					// elements so never remove single <h1></h1> since that would remove the currrent empty block element where the caret is at

+					if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {

+						dom.remove(node, 1);

+						return;

+					}

+

+					if (format.inline || format.wrapper) {

+						// Merges the current node with it's children of similar type to reduce the number of elements

+						if (!format.exact && childCount === 1)

+							node = mergeStyles(node);

+

+						// Remove/merge children

+						each(formatList, function(format) {

+							// Merge all children of similar type will move styles from child to parent

+							// this: <span style="color:red"><b><span style="color:red; font-size:10px">text</span></b></span>

+							// will become: <span style="color:red"><b><span style="font-size:10px">text</span></b></span>

+							each(dom.select(format.inline, node), function(child) {

+								var parent;

+

+								// When wrap_links is set to false we don't want

+								// to remove the format on children within links

+								if (format.wrap_links === false) {

+									parent = child.parentNode;

+

+									do {

+										if (parent.nodeName === 'A')

+											return;

+									} while (parent = parent.parentNode);

+								}

+

+								removeFormat(format, vars, child, format.exact ? child : null);

+							});

+						});

+

+						// Remove child if direct parent is of same type

+						if (matchNode(node.parentNode, name, vars)) {

+							dom.remove(node, 1);

+							node = 0;

+							return TRUE;

+						}

+

+						// Look for parent with similar style format

+						if (format.merge_with_parents) {

+							dom.getParent(node.parentNode, function(parent) {

+								if (matchNode(parent, name, vars)) {

+									dom.remove(node, 1);

+									node = 0;

+									return TRUE;

+								}

+							});

+						}

+

+						// Merge next and previous siblings if they are similar <b>text</b><b>text</b> becomes <b>texttext</b>

+						if (node && format.merge_siblings !== false) {

+							node = mergeSiblings(getNonWhiteSpaceSibling(node), node);

+							node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE));

+						}

+					}

+				});

+			};

+

+			if (format) {

+				if (node) {

+					if (node.nodeType) {

+						rng = dom.createRng();

+						rng.setStartBefore(node);

+						rng.setEndAfter(node);

+						applyRngStyle(expandRng(rng, formatList), null, true);

+					} else {

+						applyRngStyle(node, null, true);

+					}

+				} else {

+					if (!isCollapsed || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {

+						// Obtain selection node before selection is unselected by applyRngStyle()

+						var curSelNode = ed.selection.getNode();

+

+						// Apply formatting to selection

+						ed.selection.setRng(adjustSelectionToVisibleSelection());

+						bookmark = selection.getBookmark();

+						applyRngStyle(expandRng(selection.getRng(TRUE), formatList), bookmark);

+

+						// Colored nodes should be underlined so that the color of the underline matches the text color.

+						if (format.styles && (format.styles.color || format.styles.textDecoration)) {

+							tinymce.walk(curSelNode, processUnderlineAndColor, 'childNodes');

+							processUnderlineAndColor(curSelNode);

+						}

+

+						selection.moveToBookmark(bookmark);

+						moveStart(selection.getRng(TRUE));

+						ed.nodeChanged();

+					} else

+						performCaretAction('apply', name, vars);

+				}

+			}

+		};

+

+		function remove(name, vars, node) {

+			var formatList = get(name), format = formatList[0], bookmark, i, rng;

+

+			// Merges the styles for each node

+			function process(node) {

+				var children, i, l;

+

+				// Grab the children first since the nodelist might be changed

+				children = tinymce.grep(node.childNodes);

+

+				// Process current node

+				for (i = 0, l = formatList.length; i < l; i++) {

+					if (removeFormat(formatList[i], vars, node, node))

+						break;

+				}

+

+				// Process the children

+				if (format.deep) {

+					for (i = 0, l = children.length; i < l; i++)

+						process(children[i]);

+				}

+			};

+

+			function findFormatRoot(container) {

+				var formatRoot;

+

+				// Find format root

+				each(getParents(container.parentNode).reverse(), function(parent) {

+					var format;

+

+					// Find format root element

+					if (!formatRoot && parent.id != '_start' && parent.id != '_end') {

+						// Is the node matching the format we are looking for

+						format = matchNode(parent, name, vars);

+						if (format && format.split !== false)

+							formatRoot = parent;

+					}

+				});

+

+				return formatRoot;

+			};

+

+			function wrapAndSplit(format_root, container, target, split) {

+				var parent, clone, lastClone, firstClone, i, formatRootParent;

+

+				// Format root found then clone formats and split it

+				if (format_root) {

+					formatRootParent = format_root.parentNode;

+

+					for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) {

+						clone = parent.cloneNode(FALSE);

+

+						for (i = 0; i < formatList.length; i++) {

+							if (removeFormat(formatList[i], vars, clone, clone)) {

+								clone = 0;

+								break;

+							}

+						}

+

+						// Build wrapper node

+						if (clone) {

+							if (lastClone)

+								clone.appendChild(lastClone);

+

+							if (!firstClone)

+								firstClone = clone;

+

+							lastClone = clone;

+						}

+					}

+

+					// Never split block elements if the format is mixed

+					if (split && (!format.mixed || !isBlock(format_root)))

+						container = dom.split(format_root, container);

+

+					// Wrap container in cloned formats

+					if (lastClone) {

+						target.parentNode.insertBefore(lastClone, target);

+						firstClone.appendChild(target);

+					}

+				}

+

+				return container;

+			};

+

+			function splitToFormatRoot(container) {

+				return wrapAndSplit(findFormatRoot(container), container, container, true);

+			};

+

+			function unwrap(start) {

+				var node = dom.get(start ? '_start' : '_end'),

+					out = node[start ? 'firstChild' : 'lastChild'];

+

+				// If the end is placed within the start the result will be removed

+				// So this checks if the out node is a bookmark node if it is it

+				// checks for another more suitable node

+				if (isBookmarkNode(out))

+					out = out[start ? 'firstChild' : 'lastChild'];

+

+				dom.remove(node, true);

+

+				return out;

+			};

+

+			function removeRngStyle(rng) {

+				var startContainer, endContainer;

+

+				rng = expandRng(rng, formatList, TRUE);

+

+				if (format.split) {

+					startContainer = getContainer(rng, TRUE);

+					endContainer = getContainer(rng);

+

+					if (startContainer != endContainer) {

+						// Wrap start/end nodes in span element since these might be cloned/moved

+						startContainer = wrap(startContainer, 'span', {id : '_start', 'data-mce-type' : 'bookmark'});

+						endContainer = wrap(endContainer, 'span', {id : '_end', 'data-mce-type' : 'bookmark'});

+

+						// Split start/end

+						splitToFormatRoot(startContainer);

+						splitToFormatRoot(endContainer);

+

+						// Unwrap start/end to get real elements again

+						startContainer = unwrap(TRUE);

+						endContainer = unwrap();

+					} else

+						startContainer = endContainer = splitToFormatRoot(startContainer);

+

+					// Update range positions since they might have changed after the split operations

+					rng.startContainer = startContainer.parentNode;

+					rng.startOffset = nodeIndex(startContainer);

+					rng.endContainer = endContainer.parentNode;

+					rng.endOffset = nodeIndex(endContainer) + 1;

+				}

+

+				// Remove items between start/end

+				rangeUtils.walk(rng, function(nodes) {

+					each(nodes, function(node) {

+						process(node);

+

+						// Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined.

+						if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && getTextDecoration(node.parentNode) === 'underline') {

+							removeFormat({'deep': false, 'exact': true, 'inline': 'span', 'styles': {'textDecoration' : 'underline'}}, null, node);

+						}

+					});

+				});

+			};

+

+			// Handle node

+			if (node) {

+				if (node.nodeType) {

+					rng = dom.createRng();

+					rng.setStartBefore(node);

+					rng.setEndAfter(node);

+					removeRngStyle(rng);

+				} else {

+					removeRngStyle(node);

+				}

+

+				return;

+			}

+

+			if (!selection.isCollapsed() || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {

+				bookmark = selection.getBookmark();

+				removeRngStyle(selection.getRng(TRUE));

+				selection.moveToBookmark(bookmark);

+

+				// Check if start element still has formatting then we are at: "<b>text|</b>text" and need to move the start into the next text node

+				if (format.inline && match(name, vars, selection.getStart())) {

+					moveStart(selection.getRng(true));

+				}

+

+				ed.nodeChanged();

+			} else

+				performCaretAction('remove', name, vars);

+

+			// When you remove formatting from a table cell in WebKit (cell, not the contents of a cell) there is a rendering issue with column width

+			if (tinymce.isWebKit) {

+				ed.execCommand('mceCleanup');

+			}

+		};

+

+		function toggle(name, vars, node) {

+			var fmt = get(name);

+

+			if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0]['toggle']))

+				remove(name, vars, node);

+			else

+				apply(name, vars, node);

+		};

+

+		function matchNode(node, name, vars, similar) {

+			var formatList = get(name), format, i, classes;

+

+			function matchItems(node, format, item_name) {

+				var key, value, items = format[item_name], i;

+

+				// Custom match

+				if (format.onmatch) {

+					return format.onmatch(node, format, item_name);

+				}

+

+				// Check all items

+				if (items) {

+					// Non indexed object

+					if (items.length === undefined) {

+						for (key in items) {

+							if (items.hasOwnProperty(key)) {

+								if (item_name === 'attributes')

+									value = dom.getAttrib(node, key);

+								else

+									value = getStyle(node, key);

+

+								if (similar && !value && !format.exact)

+									return;

+

+								if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars)))

+									return;

+							}

+						}

+					} else {

+						// Only one match needed for indexed arrays

+						for (i = 0; i < items.length; i++) {

+							if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i]))

+								return format;

+						}

+					}

+				}

+

+				return format;

+			};

+

+			if (formatList && node) {

+				// Check each format in list

+				for (i = 0; i < formatList.length; i++) {

+					format = formatList[i];

+

+					// Name name, attributes, styles and classes

+					if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) {

+						// Match classes

+						if (classes = format.classes) {

+							for (i = 0; i < classes.length; i++) {

+								if (!dom.hasClass(node, classes[i]))

+									return;

+							}

+						}

+

+						return format;

+					}

+				}

+			}

+		};

+

+		function match(name, vars, node) {

+			var startNode;

+

+			function matchParents(node) {

+				// Find first node with similar format settings

+				node = dom.getParent(node, function(node) {

+					return !!matchNode(node, name, vars, true);

+				});

+

+				// Do an exact check on the similar format element

+				return matchNode(node, name, vars);

+			};

+

+			// Check specified node

+			if (node)

+				return matchParents(node);

+

+			// Check selected node

+			node = selection.getNode();

+			if (matchParents(node))

+				return TRUE;

+

+			// Check start node if it's different

+			startNode = selection.getStart();

+			if (startNode != node) {

+				if (matchParents(startNode))

+					return TRUE;

+			}

+

+			return FALSE;

+		};

+

+		function matchAll(names, vars) {

+			var startElement, matchedFormatNames = [], checkedMap = {}, i, ni, name;

+

+			// Check start of selection for formats

+			startElement = selection.getStart();

+			dom.getParent(startElement, function(node) {

+				var i, name;

+

+				for (i = 0; i < names.length; i++) {

+					name = names[i];

+

+					if (!checkedMap[name] && matchNode(node, name, vars)) {

+						checkedMap[name] = true;

+						matchedFormatNames.push(name);

+					}

+				}

+			});

+

+			return matchedFormatNames;

+		};

+

+		function canApply(name) {

+			var formatList = get(name), startNode, parents, i, x, selector;

+

+			if (formatList) {

+				startNode = selection.getStart();

+				parents = getParents(startNode);

+

+				for (x = formatList.length - 1; x >= 0; x--) {

+					selector = formatList[x].selector;

+

+					// Format is not selector based, then always return TRUE

+					if (!selector)

+						return TRUE;

+

+					for (i = parents.length - 1; i >= 0; i--) {

+						if (dom.is(parents[i], selector))

+							return TRUE;

+					}

+				}

+			}

+

+			return FALSE;

+		};

+

+		// Expose to public

+		tinymce.extend(this, {

+			get : get,

+			register : register,

+			apply : apply,

+			remove : remove,

+			toggle : toggle,

+			match : match,

+			matchAll : matchAll,

+			matchNode : matchNode,

+			canApply : canApply

+		});

+

+		// Private functions

+

+		function matchName(node, format) {

+			// Check for inline match

+			if (isEq(node, format.inline))

+				return TRUE;

+

+			// Check for block match

+			if (isEq(node, format.block))

+				return TRUE;

+

+			// Check for selector match

+			if (format.selector)

+				return dom.is(node, format.selector);

+		};

+

+		function isEq(str1, str2) {

+			str1 = str1 || '';

+			str2 = str2 || '';

+

+			str1 = '' + (str1.nodeName || str1);

+			str2 = '' + (str2.nodeName || str2);

+

+			return str1.toLowerCase() == str2.toLowerCase();

+		};

+

+		function getStyle(node, name) {

+			var styleVal = dom.getStyle(node, name);

+

+			// Force the format to hex

+			if (name == 'color' || name == 'backgroundColor')

+				styleVal = dom.toHex(styleVal);

+

+			// Opera will return bold as 700

+			if (name == 'fontWeight' && styleVal == 700)

+				styleVal = 'bold';

+

+			return '' + styleVal;

+		};

+

+		function replaceVars(value, vars) {

+			if (typeof(value) != "string")

+				value = value(vars);

+			else if (vars) {

+				value = value.replace(/%(\w+)/g, function(str, name) {

+					return vars[name] || str;

+				});

+			}

+

+			return value;

+		};

+

+		function isWhiteSpaceNode(node) {

+			return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue);

+		};

+

+		function wrap(node, name, attrs) {

+			var wrapper = dom.create(name, attrs);

+

+			node.parentNode.insertBefore(wrapper, node);

+			wrapper.appendChild(node);

+

+			return wrapper;

+		};

+

+		function expandRng(rng, format, remove) {

+			var startContainer = rng.startContainer,

+				startOffset = rng.startOffset,

+				endContainer = rng.endContainer,

+				endOffset = rng.endOffset, sibling, lastIdx, leaf, endPoint;

+

+			// This function walks up the tree if there is no siblings before/after the node

+			function findParentContainer(start) {

+				var container, parent, child, sibling, siblingName;

+

+				container = parent = start ? startContainer : endContainer;

+				siblingName = start ? 'previousSibling' : 'nextSibling';

+				root = dom.getRoot();

+

+				// If it's a text node and the offset is inside the text

+				if (container.nodeType == 3 && !isWhiteSpaceNode(container)) {

+					if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {

+						return container;

+					}

+				}

+

+				for (;;) {

+					// Stop expanding on block elements or root depending on format

+					if (parent == root || (!format[0].block_expand && isBlock(parent)))

+						return parent;

+

+					// Walk left/right

+					for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {

+						if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling)) {

+							return parent;

+						}

+					}

+

+					// Check if we can move up are we at root level or body level

+					parent = parent.parentNode;

+				}

+

+				return container;

+			};

+

+			// This function walks down the tree to find the leaf at the selection.

+			// The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node.

+			function findLeaf(node, offset) {

+				if (offset === undefined)

+					offset = node.nodeType === 3 ? node.length : node.childNodes.length;

+				while (node && node.hasChildNodes()) {

+					node = node.childNodes[offset];

+					if (node)

+						offset = node.nodeType === 3 ? node.length : node.childNodes.length;

+				}

+				return { node: node, offset: offset };

+			}

+

+			// If index based start position then resolve it

+			if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) {

+				lastIdx = startContainer.childNodes.length - 1;

+				startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset];

+

+				if (startContainer.nodeType == 3)

+					startOffset = 0;

+			}

+

+			// If index based end position then resolve it

+			if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) {

+				lastIdx = endContainer.childNodes.length - 1;

+				endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1];

+

+				if (endContainer.nodeType == 3)

+					endOffset = endContainer.nodeValue.length;

+			}

+

+			// Exclude bookmark nodes if possible

+			if (isBookmarkNode(startContainer.parentNode) || isBookmarkNode(startContainer)) {

+				startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;

+				startContainer = startContainer.nextSibling || startContainer;

+

+				if (startContainer.nodeType == 3)

+					startOffset = 0;

+			}

+

+			if (isBookmarkNode(endContainer.parentNode) || isBookmarkNode(endContainer)) {

+				endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;

+				endContainer = endContainer.previousSibling || endContainer;

+

+				if (endContainer.nodeType == 3)

+					endOffset = endContainer.length;

+			}

+

+			if (format[0].inline) {

+				if (rng.collapsed) {

+					function findWordEndPoint(container, offset, start) {

+						var walker, node, pos, lastTextNode;

+

+						function findSpace(node, offset) {

+							var pos, pos2, str = node.nodeValue;

+

+							if (typeof(offset) == "undefined") {

+								offset = start ? str.length : 0;

+							}

+

+							if (start) {

+								pos = str.lastIndexOf(' ', offset);

+								pos2 = str.lastIndexOf('\u00a0', offset);

+								pos = pos > pos2 ? pos : pos2;

+

+								// Include the space on remove to avoid tag soup

+								if (pos !== -1 && !remove) {

+									pos++;

+								}

+							} else {

+								pos = str.indexOf(' ', offset);

+								pos2 = str.indexOf('\u00a0', offset);

+								pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;

+							}

+

+							return pos;

+						};

+

+						if (container.nodeType === 3) {

+							pos = findSpace(container, offset);

+

+							if (pos !== -1) {

+								return {container : container, offset : pos};

+							}

+

+							lastTextNode = container;

+						}

+

+						// Walk the nodes inside the block

+						walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody());

+						while (node = walker[start ? 'prev' : 'next']()) {

+							if (node.nodeType === 3) {

+								lastTextNode = node;

+								pos = findSpace(node);

+

+								if (pos !== -1) {

+									return {container : node, offset : pos};

+								}

+							} else if (isBlock(node)) {

+								break;

+							}

+						}

+

+						if (lastTextNode) {

+							if (start) {

+								offset = 0;

+							} else {

+								offset = lastTextNode.length;

+							}

+

+							return {container: lastTextNode, offset: offset};

+						}

+					}

+

+					// Expand left to closest word boundery

+					endPoint = findWordEndPoint(startContainer, startOffset, true);

+					if (endPoint) {

+						startContainer = endPoint.container;

+						startOffset = endPoint.offset;

+					}

+

+					// Expand right to closest word boundery

+					endPoint = findWordEndPoint(endContainer, endOffset);

+					if (endPoint) {

+						endContainer = endPoint.container;

+						endOffset = endPoint.offset;

+					}

+				}

+

+				// Avoid applying formatting to a trailing space.

+				leaf = findLeaf(endContainer, endOffset);

+				if (leaf.node) {

+					while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling)

+						leaf = findLeaf(leaf.node.previousSibling);

+

+					if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 &&

+							leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {

+

+						if (leaf.offset > 1) {

+							endContainer = leaf.node;

+							endContainer.splitText(leaf.offset - 1);

+						} else if (leaf.node.previousSibling) {

+							// TODO: Figure out why this is in here

+							//endContainer = leaf.node.previousSibling;

+						}

+					}

+				}

+			}

+

+			// Move start/end point up the tree if the leaves are sharp and if we are in different containers

+			// Example * becomes !: !<p><b><i>*text</i><i>text*</i></b></p>!

+			// This will reduce the number of wrapper elements that needs to be created

+			// Move start point up the tree

+			if (format[0].inline || format[0].block_expand) {

+				if (!format[0].inline || (startContainer.nodeType != 3 || startOffset === 0)) {

+					startContainer = findParentContainer(true);

+				}

+

+				if (!format[0].inline || (endContainer.nodeType != 3 || endOffset === endContainer.nodeValue.length)) {

+					endContainer = findParentContainer();

+				}

+			}

+

+			// Expand start/end container to matching selector

+			if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) {

+				function findSelectorEndPoint(container, sibling_name) {

+					var parents, i, y, curFormat;

+

+					if (container.nodeType == 3 && container.nodeValue.length == 0 && container[sibling_name])

+						container = container[sibling_name];

+

+					parents = getParents(container);

+					for (i = 0; i < parents.length; i++) {

+						for (y = 0; y < format.length; y++) {

+							curFormat = format[y];

+

+							// If collapsed state is set then skip formats that doesn't match that

+							if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed)

+								continue;

+

+							if (dom.is(parents[i], curFormat.selector))

+								return parents[i];

+						}

+					}

+

+					return container;

+				};

+

+				// Find new startContainer/endContainer if there is better one

+				startContainer = findSelectorEndPoint(startContainer, 'previousSibling');

+				endContainer = findSelectorEndPoint(endContainer, 'nextSibling');

+			}

+

+			// Expand start/end container to matching block element or text node

+			if (format[0].block || format[0].selector) {

+				function findBlockEndPoint(container, sibling_name, sibling_name2) {

+					var node;

+

+					// Expand to block of similar type

+					if (!format[0].wrapper)

+						node = dom.getParent(container, format[0].block);

+

+					// Expand to first wrappable block element or any block element

+					if (!node)

+						node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);

+

+					// Exclude inner lists from wrapping

+					if (node && format[0].wrapper)

+						node = getParents(node, 'ul,ol').reverse()[0] || node;

+

+					// Didn't find a block element look for first/last wrappable element

+					if (!node) {

+						node = container;

+

+						while (node[sibling_name] && !isBlock(node[sibling_name])) {

+							node = node[sibling_name];

+

+							// Break on BR but include it will be removed later on

+							// we can't remove it now since we need to check if it can be wrapped

+							if (isEq(node, 'br'))

+								break;

+						}

+					}

+

+					return node || container;

+				};

+

+				// Find new startContainer/endContainer if there is better one

+				startContainer = findBlockEndPoint(startContainer, 'previousSibling');

+				endContainer = findBlockEndPoint(endContainer, 'nextSibling');

+

+				// Non block element then try to expand up the leaf

+				if (format[0].block) {

+					if (!isBlock(startContainer))

+						startContainer = findParentContainer(true);

+

+					if (!isBlock(endContainer))

+						endContainer = findParentContainer();

+				}

+			}

+

+			// Setup index for startContainer

+			if (startContainer.nodeType == 1) {

+				startOffset = nodeIndex(startContainer);

+				startContainer = startContainer.parentNode;

+			}

+

+			// Setup index for endContainer

+			if (endContainer.nodeType == 1) {

+				endOffset = nodeIndex(endContainer) + 1;

+				endContainer = endContainer.parentNode;

+			}

+

+			// Return new range like object

+			return {

+				startContainer : startContainer,

+				startOffset : startOffset,

+				endContainer : endContainer,

+				endOffset : endOffset

+			};

+		}

+

+		function removeFormat(format, vars, node, compare_node) {

+			var i, attrs, stylesModified;

+

+			// Check if node matches format

+			if (!matchName(node, format))

+				return FALSE;

+

+			// Should we compare with format attribs and styles

+			if (format.remove != 'all') {

+				// Remove styles

+				each(format.styles, function(value, name) {

+					value = replaceVars(value, vars);

+

+					// Indexed array

+					if (typeof(name) === 'number') {

+						name = value;

+						compare_node = 0;

+					}

+

+					if (!compare_node || isEq(getStyle(compare_node, name), value))

+						dom.setStyle(node, name, '');

+

+					stylesModified = 1;

+				});

+

+				// Remove style attribute if it's empty

+				if (stylesModified && dom.getAttrib(node, 'style') == '') {

+					node.removeAttribute('style');

+					node.removeAttribute('data-mce-style');

+				}

+

+				// Remove attributes

+				each(format.attributes, function(value, name) {

+					var valueOut;

+

+					value = replaceVars(value, vars);

+

+					// Indexed array

+					if (typeof(name) === 'number') {

+						name = value;

+						compare_node = 0;

+					}

+

+					if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) {

+						// Keep internal classes

+						if (name == 'class') {

+							value = dom.getAttrib(node, name);

+							if (value) {

+								// Build new class value where everything is removed except the internal prefixed classes

+								valueOut = '';

+								each(value.split(/\s+/), function(cls) {

+									if (/mce\w+/.test(cls))

+										valueOut += (valueOut ? ' ' : '') + cls;

+								});

+

+								// We got some internal classes left

+								if (valueOut) {

+									dom.setAttrib(node, name, valueOut);

+									return;

+								}

+							}

+						}

+

+						// IE6 has a bug where the attribute doesn't get removed correctly

+						if (name == "class")

+							node.removeAttribute('className');

+

+						// Remove mce prefixed attributes

+						if (MCE_ATTR_RE.test(name))

+							node.removeAttribute('data-mce-' + name);

+

+						node.removeAttribute(name);

+					}

+				});

+

+				// Remove classes

+				each(format.classes, function(value) {

+					value = replaceVars(value, vars);

+

+					if (!compare_node || dom.hasClass(compare_node, value))

+						dom.removeClass(node, value);

+				});

+

+				// Check for non internal attributes

+				attrs = dom.getAttribs(node);

+				for (i = 0; i < attrs.length; i++) {

+					if (attrs[i].nodeName.indexOf('_') !== 0)

+						return FALSE;

+				}

+			}

+

+			// Remove the inline child if it's empty for example <b> or <span>

+			if (format.remove != 'none') {

+				removeNode(node, format);

+				return TRUE;

+			}

+		};

+

+		function removeNode(node, format) {

+			var parentNode = node.parentNode, rootBlockElm;

+

+			if (format.block) {

+				if (!forcedRootBlock) {

+					function find(node, next, inc) {

+						node = getNonWhiteSpaceSibling(node, next, inc);

+

+						return !node || (node.nodeName == 'BR' || isBlock(node));

+					};

+

+					// Append BR elements if needed before we remove the block

+					if (isBlock(node) && !isBlock(parentNode)) {

+						if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1))

+							node.insertBefore(dom.create('br'), node.firstChild);

+

+						if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1))

+							node.appendChild(dom.create('br'));

+					}

+				} else {

+					// Wrap the block in a forcedRootBlock if we are at the root of document

+					if (parentNode == dom.getRoot()) {

+						if (!format.list_block || !isEq(node, format.list_block)) {

+							each(tinymce.grep(node.childNodes), function(node) {

+								if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) {

+									if (!rootBlockElm)

+										rootBlockElm = wrap(node, forcedRootBlock);

+									else

+										rootBlockElm.appendChild(node);

+								} else

+									rootBlockElm = 0;

+							});

+						}

+					}

+				}

+			}

+

+			// Never remove nodes that isn't the specified inline element if a selector is specified too

+			if (format.selector && format.inline && !isEq(format.inline, node))

+				return;

+

+			dom.remove(node, 1);

+		};

+

+		function getNonWhiteSpaceSibling(node, next, inc) {

+			if (node) {

+				next = next ? 'nextSibling' : 'previousSibling';

+

+				for (node = inc ? node : node[next]; node; node = node[next]) {

+					if (node.nodeType == 1 || !isWhiteSpaceNode(node))

+						return node;

+				}

+			}

+		};

+

+		function isBookmarkNode(node) {

+			return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark';

+		};

+

+		function mergeSiblings(prev, next) {

+			var marker, sibling, tmpSibling;

+

+			function compareElements(node1, node2) {

+				// Not the same name

+				if (node1.nodeName != node2.nodeName)

+					return FALSE;

+

+				function getAttribs(node) {

+					var attribs = {};

+

+					each(dom.getAttribs(node), function(attr) {

+						var name = attr.nodeName.toLowerCase();

+

+						// Don't compare internal attributes or style

+						if (name.indexOf('_') !== 0 && name !== 'style')

+							attribs[name] = dom.getAttrib(node, name);

+					});

+

+					return attribs;

+				};

+

+				function compareObjects(obj1, obj2) {

+					var value, name;

+

+					for (name in obj1) {

+						// Obj1 has item obj2 doesn't have

+						if (obj1.hasOwnProperty(name)) {

+							value = obj2[name];

+

+							// Obj2 doesn't have obj1 item

+							if (value === undefined)

+								return FALSE;

+

+							// Obj2 item has a different value

+							if (obj1[name] != value)

+								return FALSE;

+

+							// Delete similar value

+							delete obj2[name];

+						}

+					}

+

+					// Check if obj 2 has something obj 1 doesn't have

+					for (name in obj2) {

+						// Obj2 has item obj1 doesn't have

+						if (obj2.hasOwnProperty(name))

+							return FALSE;

+					}

+

+					return TRUE;

+				};

+

+				// Attribs are not the same

+				if (!compareObjects(getAttribs(node1), getAttribs(node2)))

+					return FALSE;

+

+				// Styles are not the same

+				if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style'))))

+					return FALSE;

+

+				return TRUE;

+			};

+

+			// Check if next/prev exists and that they are elements

+			if (prev && next) {

+				function findElementSibling(node, sibling_name) {

+					for (sibling = node; sibling; sibling = sibling[sibling_name]) {

+						if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0)

+							return node;

+

+						if (sibling.nodeType == 1 && !isBookmarkNode(sibling))

+							return sibling;

+					}

+

+					return node;

+				};

+

+				// If previous sibling is empty then jump over it

+				prev = findElementSibling(prev, 'previousSibling');

+				next = findElementSibling(next, 'nextSibling');

+

+				// Compare next and previous nodes

+				if (compareElements(prev, next)) {

+					// Append nodes between

+					for (sibling = prev.nextSibling; sibling && sibling != next;) {

+						tmpSibling = sibling;

+						sibling = sibling.nextSibling;

+						prev.appendChild(tmpSibling);

+					}

+

+					// Remove next node

+					dom.remove(next);

+

+					// Move children into prev node

+					each(tinymce.grep(next.childNodes), function(node) {

+						prev.appendChild(node);

+					});

+

+					return prev;

+				}

+			}

+

+			return next;

+		};

+

+		function isTextBlock(name) {

+			return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name);

+		};

+

+		function getContainer(rng, start) {

+			var container, offset, lastIdx, walker;

+

+			container = rng[start ? 'startContainer' : 'endContainer'];

+			offset = rng[start ? 'startOffset' : 'endOffset'];

+

+			if (container.nodeType == 1) {

+				lastIdx = container.childNodes.length - 1;

+

+				if (!start && offset)

+					offset--;

+

+				container = container.childNodes[offset > lastIdx ? lastIdx : offset];

+			}

+

+			// If start text node is excluded then walk to the next node

+			if (container.nodeType === 3 && start && offset >= container.nodeValue.length) {

+				container = new TreeWalker(container, ed.getBody()).next() || container;

+			}

+

+			// If end text node is excluded then walk to the previous node

+			if (container.nodeType === 3 && !start && offset == 0) {

+				container = new TreeWalker(container, ed.getBody()).prev() || container;

+			}

+

+			return container;

+		};

+

+		function performCaretAction(type, name, vars) {

+			var invisibleChar, caretContainerId = '_mce_caret', debug = ed.settings.caret_debug;

+

+			// Setup invisible character use zero width space on Gecko since it doesn't change the heigt of the container

+			invisibleChar = tinymce.isGecko ? '\u200B' : INVISIBLE_CHAR;

+

+			// Creates a caret container bogus element

+			function createCaretContainer(fill) {

+				var caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style: debug ? 'color:red' : ''});

+

+				if (fill) {

+					caretContainer.appendChild(ed.getDoc().createTextNode(invisibleChar));

+				}

+

+				return caretContainer;

+			};

+

+			function isCaretContainerEmpty(node, nodes) {

+				while (node) {

+					if ((node.nodeType === 3 && node.nodeValue !== invisibleChar) || node.childNodes.length > 1) {

+						return false;

+					}

+

+					// Collect nodes

+					if (nodes && node.nodeType === 1) {

+						nodes.push(node);

+					}

+

+					node = node.firstChild;

+				}

+

+				return true;

+			};

+			

+			// Returns any parent caret container element

+			function getParentCaretContainer(node) {

+				while (node) {

+					if (node.id === caretContainerId) {

+						return node;

+					}

+

+					node = node.parentNode;

+				}

+			};

+

+			// Finds the first text node in the specified node

+			function findFirstTextNode(node) {

+				var walker;

+

+				if (node) {

+					walker = new TreeWalker(node, node);

+

+					for (node = walker.current(); node; node = walker.next()) {

+						if (node.nodeType === 3) {

+							return node;

+						}

+					}

+				}

+			};

+

+			// Removes the caret container for the specified node or all on the current document

+			function removeCaretContainer(node, move_caret) {

+				var child, rng;

+

+				if (!node) {

+					node = getParentCaretContainer(selection.getStart());

+

+					if (!node) {

+						while (node = dom.get(caretContainerId)) {

+							removeCaretContainer(node, false);

+						}

+					}

+				} else {

+					rng = selection.getRng(true);

+

+					if (isCaretContainerEmpty(node)) {

+						if (move_caret !== false) {

+							rng.setStartBefore(node);

+							rng.setEndBefore(node);

+						}

+

+						dom.remove(node);

+					} else {

+						child = findFirstTextNode(node);

+

+						if (child.nodeValue.charAt(0) === INVISIBLE_CHAR) {

+							child = child.deleteData(0, 1);

+						}

+

+						dom.remove(node, 1);

+					}

+

+					selection.setRng(rng);

+				}

+			};

+			

+			// Applies formatting to the caret postion

+			function applyCaretFormat() {

+				var rng, caretContainer, textNode, offset, bookmark, container, text;

+

+				rng = selection.getRng(true);

+				offset = rng.startOffset;

+				container = rng.startContainer;

+				text = container.nodeValue;

+

+				caretContainer = getParentCaretContainer(selection.getStart());

+				if (caretContainer) {

+					textNode = findFirstTextNode(caretContainer);

+				}

+

+				// Expand to word is caret is in the middle of a text node and the char before/after is a alpha numeric character

+				if (text && offset > 0 && offset < text.length && /\w/.test(text.charAt(offset)) && /\w/.test(text.charAt(offset - 1))) {

+					// Get bookmark of caret position

+					bookmark = selection.getBookmark();

+

+					// Collapse bookmark range (WebKit)

+					rng.collapse(true);

+

+					// Expand the range to the closest word and split it at those points

+					rng = expandRng(rng, get(name));

+					rng = rangeUtils.split(rng);

+

+					// Apply the format to the range

+					apply(name, vars, rng);

+

+					// Move selection back to caret position

+					selection.moveToBookmark(bookmark);

+				} else {

+					if (!caretContainer || textNode.nodeValue !== invisibleChar) {

+						caretContainer = createCaretContainer(true);

+						textNode = caretContainer.firstChild;

+

+						rng.insertNode(caretContainer);

+						offset = 1;

+

+						apply(name, vars, caretContainer);

+					} else {

+						apply(name, vars, caretContainer);

+					}

+

+					// Move selection to text node

+					selection.setCursorLocation(textNode, offset);

+				}

+			};

+

+			function removeCaretFormat() {

+				var rng = selection.getRng(true), container, offset, bookmark,

+					hasContentAfter, node, formatNode, parents = [], i, caretContainer;

+

+				container = rng.startContainer;

+				offset = rng.startOffset;

+				node = container;

+

+				if (container.nodeType == 3) {

+					if (offset != container.nodeValue.length || container.nodeValue === invisibleChar) {

+						hasContentAfter = true;

+					}

+

+					node = node.parentNode;

+				}

+

+				while (node) {

+					if (matchNode(node, name, vars)) {

+						formatNode = node;

+						break;

+					}

+

+					if (node.nextSibling) {

+						hasContentAfter = true;

+					}

+

+					parents.push(node);

+					node = node.parentNode;

+				}

+

+				// Node doesn't have the specified format

+				if (!formatNode) {

+					return;

+				}

+

+				// Is there contents after the caret then remove the format on the element

+				if (hasContentAfter) {

+					// Get bookmark of caret position

+					bookmark = selection.getBookmark();

+

+					// Collapse bookmark range (WebKit)

+					rng.collapse(true);

+

+					// Expand the range to the closest word and split it at those points

+					rng = expandRng(rng, get(name), true);

+					rng = rangeUtils.split(rng);

+

+					// Remove the format from the range

+					remove(name, vars, rng);

+

+					// Move selection back to caret position

+					selection.moveToBookmark(bookmark);

+				} else {

+					caretContainer = createCaretContainer();

+

+					node = caretContainer;

+					for (i = parents.length - 1; i >= 0; i--) {

+						node.appendChild(parents[i].cloneNode(false));

+						node = node.firstChild;

+					}

+

+					// Insert invisible character into inner most format element

+					node.appendChild(dom.doc.createTextNode(invisibleChar));

+					node = node.firstChild;

+

+					// Insert caret container after the formated node

+					dom.insertAfter(caretContainer, formatNode);

+

+					// Move selection to text node

+					selection.setCursorLocation(node, 1);

+				}

+			};

+

+			// Only bind the caret events once

+			if (!self._hasCaretEvents) {

+				// Mark current caret container elements as bogus when getting the contents so we don't end up with empty elements

+				ed.onBeforeGetContent.addToTop(function() {

+					var nodes = [], i;

+

+					if (isCaretContainerEmpty(getParentCaretContainer(selection.getStart()), nodes)) {

+						// Mark children

+						i = nodes.length;

+						while (i--) {

+							dom.setAttrib(nodes[i], 'data-mce-bogus', '1');

+						}

+					}

+				});

+

+				// Remove caret container on mouse up and on key up

+				tinymce.each('onMouseUp onKeyUp'.split(' '), function(name) {

+					ed[name].addToTop(function() {

+						removeCaretContainer();

+					});

+				});

+

+				// Remove caret container on keydown and it's a backspace, enter or left/right arrow keys

+				ed.onKeyDown.addToTop(function(ed, e) {

+					var keyCode = e.keyCode;

+

+					if (keyCode == 8 || keyCode == 37 || keyCode == 39) {

+						removeCaretContainer(getParentCaretContainer(selection.getStart()));

+					}

+				});

+

+				self._hasCaretEvents = true;

+			}

+

+			// Do apply or remove caret format

+			if (type == "apply") {

+				applyCaretFormat();

+			} else {

+				removeCaretFormat();

+			}

+		};

+

+		function moveStart(rng) {

+			var container = rng.startContainer,

+					offset = rng.startOffset,

+					walker, node, nodes, tmpNode;

+

+			// Convert text node into index if possible

+			if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) {

+				container = container.parentNode;

+				offset = nodeIndex(container) + 1;

+			}

+

+			// Move startContainer/startOffset in to a suitable node

+			if (container.nodeType == 1) {

+				nodes = container.childNodes;

+				container = nodes[Math.min(offset, nodes.length - 1)];

+				walker = new TreeWalker(container);

+

+				// If offset is at end of the parent node walk to the next one

+				if (offset > nodes.length - 1)

+					walker.next();

+

+				for (node = walker.current(); node; node = walker.next()) {

+					if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {

+						// IE has a "neat" feature where it moves the start node into the closest element

+						// we can avoid this by inserting an element before it and then remove it after we set the selection

+						tmpNode = dom.create('a', null, INVISIBLE_CHAR);

+						node.parentNode.insertBefore(tmpNode, node);

+

+						// Set selection and remove tmpNode

+						rng.setStart(node, 0);

+						selection.setRng(rng);

+						dom.remove(tmpNode);

+

+						return;

+					}

+				}

+			}

+		};

+

+	};

+})(tinymce);

+

+tinymce.onAddEditor.add(function(tinymce, ed) {

+	var filters, fontSizes, dom, settings = ed.settings;

+

+	if (settings.inline_styles) {

+		fontSizes = tinymce.explode(settings.font_size_legacy_values);

+

+		function replaceWithSpan(node, styles) {

+			tinymce.each(styles, function(value, name) {

+				if (value)

+					dom.setStyle(node, name, value);

+			});

+

+			dom.rename(node, 'span');

+		};

+

+		filters = {

+			font : function(dom, node) {

+				replaceWithSpan(node, {

+					backgroundColor : node.style.backgroundColor,

+					color : node.color,

+					fontFamily : node.face,

+					fontSize : fontSizes[parseInt(node.size) - 1]

+				});

+			},

+

+			u : function(dom, node) {

+				replaceWithSpan(node, {

+					textDecoration : 'underline'

+				});

+			},

+

+			strike : function(dom, node) {

+				replaceWithSpan(node, {

+					textDecoration : 'line-through'

+				});

+			}

+		};

+

+		function convert(editor, params) {

+			dom = editor.dom;

+

+			if (settings.convert_fonts_to_spans) {

+				tinymce.each(dom.select('font,u,strike', params.node), function(node) {

+					filters[node.nodeName.toLowerCase()](ed.dom, node);

+				});

+			}

+		};

+

+		ed.onPreProcess.add(convert);

+		ed.onSetContent.add(convert);

+

+		ed.onInit.add(function() {

+			ed.selection.onSetContent.add(convert);

+		});

+	}

+});

+

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/utils/editable_selects.js
@@ -1,1 +1,71 @@
+/**

+ * editable_selects.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+var TinyMCE_EditableSelects = {

+	editSelectElm : null,

+

+	init : function() {

+		var nl = document.getElementsByTagName("select"), i, d = document, o;

+

+		for (i=0; i<nl.length; i++) {

+			if (nl[i].className.indexOf('mceEditableSelect') != -1) {

+				o = new Option(tinyMCEPopup.editor.translate('value'), '__mce_add_custom__');

+

+				o.className = 'mceAddSelectValue';

+

+				nl[i].options[nl[i].options.length] = o;

+				nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;

+			}

+		}

+	},

+

+	onChangeEditableSelect : function(e) {

+		var d = document, ne, se = window.event ? window.event.srcElement : e.target;

+

+		if (se.options[se.selectedIndex].value == '__mce_add_custom__') {

+			ne = d.createElement("input");

+			ne.id = se.id + "_custom";

+			ne.name = se.name + "_custom";

+			ne.type = "text";

+

+			ne.style.width = se.offsetWidth + 'px';

+			se.parentNode.insertBefore(ne, se);

+			se.style.display = 'none';

+			ne.focus();

+			ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;

+			ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;

+			TinyMCE_EditableSelects.editSelectElm = se;

+		}

+	},

+

+	onBlurEditableSelectInput : function() {

+		var se = TinyMCE_EditableSelects.editSelectElm;

+

+		if (se) {

+			if (se.previousSibling.value != '') {

+				addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);

+				selectByValue(document.forms[0], se.id, se.previousSibling.value);

+			} else

+				selectByValue(document.forms[0], se.id, '');

+

+			se.style.display = 'inline';

+			se.parentNode.removeChild(se.previousSibling);

+			TinyMCE_EditableSelects.editSelectElm = null;

+		}

+	},

+

+	onKeyDown : function(e) {

+		e = e || window.event;

+

+		if (e.keyCode == 13)

+			TinyMCE_EditableSelects.onBlurEditableSelectInput();

+	}

+};

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/utils/form_utils.js
@@ -1,1 +1,211 @@
+/**

+ * form_utils.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));

+

+function getColorPickerHTML(id, target_form_element) {

+	var h = "", dom = tinyMCEPopup.dom;

+

+	if (label = dom.select('label[for=' + target_form_element + ']')[0]) {

+		label.id = label.id || dom.uniqueId();

+	}

+

+	h += '<a role="button" aria-labelledby="' + id + '_label" id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';

+	h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;<span id="' + id + '_label" class="mceVoiceLabel mceIconOnly" style="display:none;">' + tinyMCEPopup.getLang('browse') + '</span></span></a>';

+

+	return h;

+}

+

+function updateColor(img_id, form_element_id) {

+	document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;

+}

+

+function setBrowserDisabled(id, state) {

+	var img = document.getElementById(id);

+	var lnk = document.getElementById(id + "_link");

+

+	if (lnk) {

+		if (state) {

+			lnk.setAttribute("realhref", lnk.getAttribute("href"));

+			lnk.removeAttribute("href");

+			tinyMCEPopup.dom.addClass(img, 'disabled');

+		} else {

+			if (lnk.getAttribute("realhref"))

+				lnk.setAttribute("href", lnk.getAttribute("realhref"));

+

+			tinyMCEPopup.dom.removeClass(img, 'disabled');

+		}

+	}

+}

+

+function getBrowserHTML(id, target_form_element, type, prefix) {

+	var option = prefix + "_" + type + "_browser_callback", cb, html;

+

+	cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));

+

+	if (!cb)

+		return "";

+

+	html = "";

+	html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';

+	html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';

+

+	return html;

+}

+

+function openBrowser(img_id, target_form_element, type, option) {

+	var img = document.getElementById(img_id);

+

+	if (img.className != "mceButtonDisabled")

+		tinyMCEPopup.openBrowser(target_form_element, type, option);

+}

+

+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {

+	if (!form_obj || !form_obj.elements[field_name])

+		return;

+

+	if (!value)

+		value = "";

+

+	var sel = form_obj.elements[field_name];

+

+	var found = false;

+	for (var i=0; i<sel.options.length; i++) {

+		var option = sel.options[i];

+

+		if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {

+			option.selected = true;

+			found = true;

+		} else

+			option.selected = false;

+	}

+

+	if (!found && add_custom && value != '') {

+		var option = new Option(value, value);

+		option.selected = true;

+		sel.options[sel.options.length] = option;

+		sel.selectedIndex = sel.options.length - 1;

+	}

+

+	return found;

+}

+

+function getSelectValue(form_obj, field_name) {

+	var elm = form_obj.elements[field_name];

+

+	if (elm == null || elm.options == null || elm.selectedIndex === -1)

+		return "";

+

+	return elm.options[elm.selectedIndex].value;

+}

+

+function addSelectValue(form_obj, field_name, name, value) {

+	var s = form_obj.elements[field_name];

+	var o = new Option(name, value);

+	s.options[s.options.length] = o;

+}

+

+function addClassesToList(list_id, specific_option) {

+	// Setup class droplist

+	var styleSelectElm = document.getElementById(list_id);

+	var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);

+	styles = tinyMCEPopup.getParam(specific_option, styles);

+

+	if (styles) {

+		var stylesAr = styles.split(';');

+

+		for (var i=0; i<stylesAr.length; i++) {

+			if (stylesAr != "") {

+				var key, value;

+

+				key = stylesAr[i].split('=')[0];

+				value = stylesAr[i].split('=')[1];

+

+				styleSelectElm.options[styleSelectElm.length] = new Option(key, value);

+			}

+		}

+	} else {

+		tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {

+			styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);

+		});

+	}

+}

+

+function isVisible(element_id) {

+	var elm = document.getElementById(element_id);

+

+	return elm && elm.style.display != "none";

+}

+

+function convertRGBToHex(col) {

+	var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");

+

+	var rgb = col.replace(re, "$1,$2,$3").split(',');

+	if (rgb.length == 3) {

+		r = parseInt(rgb[0]).toString(16);

+		g = parseInt(rgb[1]).toString(16);

+		b = parseInt(rgb[2]).toString(16);

+

+		r = r.length == 1 ? '0' + r : r;

+		g = g.length == 1 ? '0' + g : g;

+		b = b.length == 1 ? '0' + b : b;

+

+		return "#" + r + g + b;

+	}

+

+	return col;

+}

+

+function convertHexToRGB(col) {

+	if (col.indexOf('#') != -1) {

+		col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');

+

+		r = parseInt(col.substring(0, 2), 16);

+		g = parseInt(col.substring(2, 4), 16);

+		b = parseInt(col.substring(4, 6), 16);

+

+		return "rgb(" + r + "," + g + "," + b + ")";

+	}

+

+	return col;

+}

+

+function trimSize(size) {

+	return size.replace(/([0-9\.]+)(px|%|in|cm|mm|em|ex|pt|pc)/i, '$1$2');

+}

+

+function getCSSSize(size) {

+	size = trimSize(size);

+

+	if (size == "")

+		return "";

+

+	// Add px

+	if (/^[0-9]+$/.test(size))

+		size += 'px';

+	// Sanity check, IE doesn't like broken values

+	else if (!(/^[0-9\.]+(px|%|in|cm|mm|em|ex|pt|pc)$/i.test(size)))

+		return "";

+

+	return size;

+}

+

+function getStyle(elm, attrib, style) {

+	var val = tinyMCEPopup.dom.getAttrib(elm, attrib);

+

+	if (val != '')

+		return '' + val;

+

+	if (typeof(style) == 'undefined')

+		style = attrib;

+

+	return tinyMCEPopup.dom.getStyle(elm, style);

+}

 

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/utils/mctabs.js
@@ -1,1 +1,162 @@
-
+/**

+ * mctabs.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+function MCTabs() {

+	this.settings = [];

+	this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');

+};

+

+MCTabs.prototype.init = function(settings) {

+	this.settings = settings;

+};

+

+MCTabs.prototype.getParam = function(name, default_value) {

+	var value = null;

+

+	value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];

+

+	// Fix bool values

+	if (value == "true" || value == "false")

+		return (value == "true");

+

+	return value;

+};

+

+MCTabs.prototype.showTab =function(tab){

+	tab.className = 'current';

+	tab.setAttribute("aria-selected", true);

+	tab.setAttribute("aria-expanded", true);

+	tab.tabIndex = 0;

+};

+

+MCTabs.prototype.hideTab =function(tab){

+	var t=this;

+

+	tab.className = '';

+	tab.setAttribute("aria-selected", false);

+	tab.setAttribute("aria-expanded", false);

+	tab.tabIndex = -1;

+};

+

+MCTabs.prototype.showPanel = function(panel) {

+	panel.className = 'current'; 

+	panel.setAttribute("aria-hidden", false);

+};

+

+MCTabs.prototype.hidePanel = function(panel) {

+	panel.className = 'panel';

+	panel.setAttribute("aria-hidden", true);

+}; 

+

+MCTabs.prototype.getPanelForTab = function(tabElm) {

+	return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");

+};

+

+MCTabs.prototype.displayTab = function(tab_id, panel_id, avoid_focus) {

+	var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;

+

+	tabElm = document.getElementById(tab_id);

+

+	if (panel_id === undefined) {

+		panel_id = t.getPanelForTab(tabElm);

+	}

+

+	panelElm= document.getElementById(panel_id);

+	panelContainerElm = panelElm ? panelElm.parentNode : null;

+	tabContainerElm = tabElm ? tabElm.parentNode : null;

+	selectionClass = t.getParam('selection_class', 'current');

+

+	if (tabElm && tabContainerElm) {

+		nodes = tabContainerElm.childNodes;

+

+		// Hide all other tabs

+		for (i = 0; i < nodes.length; i++) {

+			if (nodes[i].nodeName == "LI") {

+				t.hideTab(nodes[i]);

+			}

+		}

+

+		// Show selected tab

+		t.showTab(tabElm);

+	}

+

+	if (panelElm && panelContainerElm) {

+		nodes = panelContainerElm.childNodes;

+

+		// Hide all other panels

+		for (i = 0; i < nodes.length; i++) {

+			if (nodes[i].nodeName == "DIV")

+				t.hidePanel(nodes[i]);

+		}

+

+		if (!avoid_focus) { 

+			tabElm.focus();

+		}

+

+		// Show selected panel

+		t.showPanel(panelElm);

+	}

+};

+

+MCTabs.prototype.getAnchor = function() {

+	var pos, url = document.location.href;

+

+	if ((pos = url.lastIndexOf('#')) != -1)

+		return url.substring(pos + 1);

+

+	return "";

+};

+

+

+//Global instance

+var mcTabs = new MCTabs();

+

+tinyMCEPopup.onInit.add(function() {

+	var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;

+

+	each(dom.select('div.tabs'), function(tabContainerElm) {

+		var keyNav;

+

+		dom.setAttrib(tabContainerElm, "role", "tablist"); 

+

+		var items = tinyMCEPopup.dom.select('li', tabContainerElm);

+		var action = function(id) {

+			mcTabs.displayTab(id, mcTabs.getPanelForTab(id));

+			mcTabs.onChange.dispatch(id);

+		};

+

+		each(items, function(item) {

+			dom.setAttrib(item, 'role', 'tab');

+			dom.bind(item, 'click', function(evt) {

+				action(item.id);

+			});

+		});

+

+		dom.bind(dom.getRoot(), 'keydown', function(evt) {

+			if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab

+				keyNav.moveFocus(evt.shiftKey ? -1 : 1);

+				tinymce.dom.Event.cancel(evt);

+			}

+		});

+

+		each(dom.select('a', tabContainerElm), function(a) {

+			dom.setAttrib(a, 'tabindex', '-1');

+		});

+

+		keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {

+			root: tabContainerElm,

+			items: items,

+			onAction: action,

+			actOnFocus: true,

+			enableLeftRight: true,

+			enableUpDown: true

+		}, tinyMCEPopup.dom);

+	});

+});

--- /dev/null
+++ b/tinymce3/jscripts/tiny_mce/utils/validate.js
@@ -1,1 +1,253 @@
+/**

+ * validate.js

+ *

+ * Copyright 2009, Moxiecode Systems AB

+ * Released under LGPL License.

+ *

+ * License: http://tinymce.moxiecode.com/license

+ * Contributing: http://tinymce.moxiecode.com/contributing

+ */

+

+/**

+	// String validation:

+

+	if (!Validator.isEmail('myemail'))

+		alert('Invalid email.');

+

+	// Form validation:

+

+	var f = document.forms['myform'];

+

+	if (!Validator.isEmail(f.myemail))

+		alert('Invalid email.');

+*/

+

+var Validator = {

+	isEmail : function(s) {

+		return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');

+	},

+

+	isAbsUrl : function(s) {

+		return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');

+	},

+

+	isSize : function(s) {

+		return this.test(s, '^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)?$');

+	},

+

+	isId : function(s) {

+		return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');

+	},

+

+	isEmpty : function(s) {

+		var nl, i;

+

+		if (s.nodeName == 'SELECT' && s.selectedIndex < 1)

+			return true;

+

+		if (s.type == 'checkbox' && !s.checked)

+			return true;

+

+		if (s.type == 'radio') {

+			for (i=0, nl = s.form.elements; i<nl.length; i++) {

+				if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)

+					return false;

+			}

+

+			return true;

+		}

+

+		return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);

+	},

+

+	isNumber : function(s, d) {

+		return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));

+	},

+

+	test : function(s, p) {

+		s = s.nodeType == 1 ? s.value : s;

+

+		return s == '' || new RegExp(p).test(s);

+	}

+};

+

+var AutoValidator = {

+	settings : {

+		id_cls : 'id',

+		int_cls : 'int',

+		url_cls : 'url',

+		number_cls : 'number',

+		email_cls : 'email',

+		size_cls : 'size',

+		required_cls : 'required',

+		invalid_cls : 'invalid',

+		min_cls : 'min',

+		max_cls : 'max'

+	},

+

+	init : function(s) {

+		var n;

+

+		for (n in s)

+			this.settings[n] = s[n];

+	},

+

+	validate : function(f) {

+		var i, nl, s = this.settings, c = 0;

+

+		nl = this.tags(f, 'label');

+		for (i=0; i<nl.length; i++) {

+			this.removeClass(nl[i], s.invalid_cls);

+			nl[i].setAttribute('aria-invalid', false);

+		}

+

+		c += this.validateElms(f, 'input');

+		c += this.validateElms(f, 'select');

+		c += this.validateElms(f, 'textarea');

+

+		return c == 3;

+	},

+

+	invalidate : function(n) {

+		this.mark(n.form, n);

+	},

+	

+	getErrorMessages : function(f) {

+		var nl, i, s = this.settings, field, msg, values, messages = [], ed = tinyMCEPopup.editor;

+		nl = this.tags(f, "label");

+		for (i=0; i<nl.length; i++) {

+			if (this.hasClass(nl[i], s.invalid_cls)) {

+				field = document.getElementById(nl[i].getAttribute("for"));

+				values = { field: nl[i].textContent };

+				if (this.hasClass(field, s.min_cls, true)) {

+					message = ed.getLang('invalid_data_min');

+					values.min = this.getNum(field, s.min_cls);

+				} else if (this.hasClass(field, s.number_cls)) {

+					message = ed.getLang('invalid_data_number');

+				} else if (this.hasClass(field, s.size_cls)) {

+					message = ed.getLang('invalid_data_size');

+				} else {

+					message = ed.getLang('invalid_data');

+				}

+				

+				message = message.replace(/{\#([^}]+)\}/g, function(a, b) {

+					return values[b] || '{#' + b + '}';

+				});

+				messages.push(message);

+			}

+		}

+		return messages;

+	},

+

+	reset : function(e) {

+		var t = ['label', 'input', 'select', 'textarea'];

+		var i, j, nl, s = this.settings;

+

+		if (e == null)

+			return;

+

+		for (i=0; i<t.length; i++) {

+			nl = this.tags(e.form ? e.form : e, t[i]);

+			for (j=0; j<nl.length; j++) {

+				this.removeClass(nl[j], s.invalid_cls);

+				nl[j].setAttribute('aria-invalid', false);

+			}

+		}

+	},

+

+	validateElms : function(f, e) {

+		var nl, i, n, s = this.settings, st = true, va = Validator, v;

+

+		nl = this.tags(f, e);

+		for (i=0; i<nl.length; i++) {

+			n = nl[i];

+

+			this.removeClass(n, s.invalid_cls);

+

+			if (this.hasClass(n, s.required_cls) && va.isEmpty(n))

+				st = this.mark(f, n);

+

+			if (this.hasClass(n, s.number_cls) && !va.isNumber(n))

+				st = this.mark(f, n);

+

+			if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))

+				st = this.mark(f, n);

+

+			if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))

+				st = this.mark(f, n);

+

+			if (this.hasClass(n, s.email_cls) && !va.isEmail(n))

+				st = this.mark(f, n);

+

+			if (this.hasClass(n, s.size_cls) && !va.isSize(n))

+				st = this.mark(f, n);

+

+			if (this.hasClass(n, s.id_cls) && !va.isId(n))

+				st = this.mark(f, n);

+

+			if (this.hasClass(n, s.min_cls, true)) {

+				v = this.getNum(n, s.min_cls);

+

+				if (isNaN(v) || parseInt(n.value) < parseInt(v))

+					st = this.mark(f, n);

+			}

+

+			if (this.hasClass(n, s.max_cls, true)) {

+				v = this.getNum(n, s.max_cls);

+

+				if (isNaN(v) || parseInt(n.value) > parseInt(v))

+					st = this.mark(f, n);

+			}

+		}

+

+		return st;

+	},

+

+	hasClass : function(n, c, d) {

+		return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);

+	},

+

+	getNum : function(n, c) {

+		c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];

+		c = c.replace(/[^0-9]/g, '');

+

+		return c;

+	},

+

+	addClass : function(n, c, b) {

+		var o = this.removeClass(n, c);

+		n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;

+	},

+

+	removeClass : function(n, c) {

+		c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');

+		return n.className = c != ' ' ? c : '';

+	},

+

+	tags : function(f, s) {

+		return f.getElementsByTagName(s);

+	},

+

+	mark : function(f, n) {

+		var s = this.settings;

+

+		this.addClass(n, s.invalid_cls);

+		n.setAttribute('aria-invalid', 'true');

+		this.markLabels(f, n, s.invalid_cls);

+

+		return false;

+	},

+

+	markLabels : function(f, n, ic) {

+		var nl, i;

+

+		nl = this.tags(f, "label");

+		for (i=0; i<nl.length; i++) {

+			if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)

+				this.addClass(nl[i], ic);

+		}

+

+		return null;

+	}

+};