<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[29203] trunk: TinyMCE:</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://core.trac.wordpress.org/changeset/29203">29203</a></dd>
<dt>Author</dt> <dd>azaozz</dd>
<dt>Date</dt> <dd>2014-07-17 00:58:41 +0000 (Thu, 17 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>TinyMCE:
- Update to 4.1.2, changelog: https://github.com/tinymce/tinymce/blob/master/changelog.txt
- Update the tests to 4.1.2.
Fixes <a href="http://core.trac.wordpress.org/ticket/28576">#28576</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesjstinymcepluginsimagepluginjs">trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsimagepluginminjs">trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsmediapluginjs">trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginsmediapluginminjs">trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginspastepluginjs">trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginspastepluginminjs">trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginstextcolorpluginjs">trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcepluginstextcolorpluginminjs">trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayskinie7mincss">trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css</a></li>
<li><a href="#trunksrcwpincludesjstinymceskinslightgrayskinmincss">trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css</a></li>
<li><a href="#trunksrcwpincludesjstinymcethemesmodernthemejs">trunk/src/wp-includes/js/tinymce/themes/modern/theme.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcethemesmodernthememinjs">trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcetinymcejs">trunk/src/wp-includes/js/tinymce/tinymce.js</a></li>
<li><a href="#trunksrcwpincludesjstinymcetinymceminjs">trunk/src/wp-includes/js/tinymce/tinymce.min.js</a></li>
<li><a href="#trunksrcwpincludesversionphp">trunk/src/wp-includes/version.php</a></li>
<li><a href="#trunktestsquniteditorexternalpluginsnoneditablepluginjs">trunk/tests/qunit/editor/external-plugins/noneditable/plugin.js</a></li>
<li><a href="#trunktestsquniteditorindexhtml">trunk/tests/qunit/editor/index.html</a></li>
<li><a href="#trunktestsquniteditorjsinitjs">trunk/tests/qunit/editor/js/init.js</a></li>
<li><a href="#trunktestsquniteditorpluginsautolinkjs">trunk/tests/qunit/editor/plugins/autolink.js</a></li>
<li><a href="#trunktestsquniteditorpluginspastejs">trunk/tests/qunit/editor/plugins/paste.js</a></li>
<li><a href="#trunktestsquniteditorpluginstablejs">trunk/tests/qunit/editor/plugins/table.js</a></li>
<li><a href="#trunktestsquniteditortinymceEditorjs">trunk/tests/qunit/editor/tinymce/Editor.js</a></li>
<li><a href="#trunktestsquniteditortinymceForceBlocksjs">trunk/tests/qunit/editor/tinymce/ForceBlocks.js</a></li>
<li><a href="#trunktestsquniteditortinymceFormatter_applyjs">trunk/tests/qunit/editor/tinymce/Formatter_apply.js</a></li>
<li><a href="#trunktestsquniteditortinymcedomDOMUtilsjs">trunk/tests/qunit/editor/tinymce/dom/DOMUtils.js</a></li>
<li><a href="#trunktestsquniteditortinymcehtmlSaxParserjs">trunk/tests/qunit/editor/tinymce/html/SaxParser.js</a></li>
<li><a href="#trunktestsquniteditortinymcehtmlSchemajs">trunk/tests/qunit/editor/tinymce/html/Schema.js</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunktestsquniteditorpluginstextpatternjs">trunk/tests/qunit/editor/plugins/textpattern.js</a></li>
<li><a href="#trunktestsquniteditortinymcedomDomQueryjs">trunk/tests/qunit/editor/tinymce/dom/DomQuery.js</a></li>
<li><a href="#trunktestsquniteditortinymceutilColorjs">trunk/tests/qunit/editor/tinymce/util/Color.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesjstinymcepluginsimagepluginjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js 2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js    2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -216,20 +216,28 @@
</span><span class="cx">                  return value;
</span><span class="cx">          }
</span><span class="cx"> 
</span><del>-               function srcChange() {
</del><ins>+                function srcChange(e) {
+                       var meta = e.meta || {};
+
</ins><span class="cx">                   if (imageListCtrl) {
</span><span class="cx">                          imageListCtrl.value(editor.convertURL(this.value(), 'src'));
</span><span class="cx">                  }
</span><span class="cx"> 
</span><del>-                       getImageSize(this.value(), function(data) {
-                               if (data.width && data.height && imageDimensions) {
-                                       width = data.width;
-                                       height = data.height;
</del><ins>+                        tinymce.each(meta, function(value, key) {
+                               win.find('#' + key).value(value);
+                       });
</ins><span class="cx"> 
</span><del>-                                       win.find('#width').value(width);
-                                       win.find('#height').value(height);
-                               }
-                       });
</del><ins>+                        if (!meta.width && !meta.height) {
+                               getImageSize(this.value(), function(data) {
+                                       if (data.width && data.height && imageDimensions) {
+                                               width = data.width;
+                                               height = data.height;
+
+                                               win.find('#width').value(width);
+                                               win.find('#height').value(height);
+                                       }
+                               });
+                       }
</ins><span class="cx">           }
</span><span class="cx"> 
</span><span class="cx">          width = dom.getAttrib(imgElm, 'width');
</span><span class="lines">@@ -297,7 +305,14 @@
</span><span class="cx"> 
</span><span class="cx">          // General settings shared between simple and advanced dialogs
</span><span class="cx">          var generalFormItems = [
</span><del>-                       {name: 'src', type: 'filepicker', filetype: 'image', label: 'Source', autofocus: true, onchange: srcChange},
</del><ins>+                        {
+                               name: 'src',
+                               type: 'filepicker',
+                               filetype: 'image',
+                               label: 'Source',
+                               autofocus: true,
+                               onchange: srcChange
+                       },
</ins><span class="cx">                   imageListCtrl
</span><span class="cx">          ];
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsimagepluginminjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js     2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js        2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1 +1 @@
</span><del>-tinymce.PluginManager.add("image",function(a){function b(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement("img");d.onload=function(){c(d.clientWidth,d.clientHeight)},d.onerror=function(){c()};var e=d.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left=0,e.width=e.height="auto",document.body.appendChild(d),d.src=a}function c(a,b,c){function d(a,c){return c=c||[],tinymce.each(a,function(a){var e={text:a.text||a.title};a.menu?e.menu=d(a.menu):(e.value=a.value,b(e)),c.push(e)}),c}return d(a,c||[])}function d(b){return function(){var c=a.settings.image_list;"string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):"function"==typeof c?c(b):b(c)}}function e(d){function e(){var a,b,c,d;a=j.find("#width")[0],b=j.find("#height")[0],a&&b&&(c=a.value(),
 d=b.value(),j.find("#constrain")[0].checked()&&k&&l&&c&&d&&(k!=c?(d=Math.round(c/k*d),b.value(d)):(c=Math.round(d/l*c),a.value(c))),k=c,l=d)}function f(){function b(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){o.width||o.height||!r||(p.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),a.fire("wpNewImageRefresh",{node:b})),c()},b.onerror=c}i(),e(),o=tinymce.extend(o,j.toJSON());var c=o.caption;o.alt||(o.alt=""),""===o.width&&(o.width=null),""===o.height&&(o.height=null),o.style||(o.style=null),o={src:o.src,alt:o.alt,width:o.width,height:o.height,style:o.style,"class":o["class"]},a.undoManager.transact(function(){var d={node:q,data:o,caption:c};return a.fire("wpImageFormSubmit",{imgData:d}),d.cancel?void b(d.node):o.src?(q?p.setAttribs(q,o):(o.id="__mcenew",a
 .focus(),a.selection.setContent(p.createHTML("img",o)),q=p.get("__mcenew"),p.setAttrib(q,"id",null)),void b(q)):void(q&&(p.remove(q),a.focus(),a.nodeChanged()))})}function g(a){return a&&(a=a.replace(/px$/,"")),a}function h(){m&&m.value(a.convertURL(this.value(),"src")),b(this.value(),function(a){a.width&&a.height&&r&&(k=a.width,l=a.height,j.find("#width").value(k),j.find("#height").value(l))})}function i(){function b(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a}if(a.settings.image_advtab){var c=j.toJSON(),d=p.parseStyle(c.style);delete d.margin,d["margin-top"]=d["margin-bottom"]=b(c.vspace),d["margin-left"]=d["margin-right"]=b(c.hspace),d["border-width"]=b(c.border),j.find("#style").value(p.serializeStyle(p.parseStyle(p.serializeStyle(d))))}}var j,k,l,m,n,o={},p=a.dom,q
 =a.selection.getNode(),r=a.settings.image_dimensions!==!1;k=p.getAttrib(q,"width"),l=p.getAttrib(q,"height"),"IMG"!=q.nodeName||q.getAttribute("data-mce-object")||q.getAttribute("data-mce-placeholder")?q=null:(o={src:p.getAttrib(q,"src"),alt:p.getAttrib(q,"alt"),"class":p.getAttrib(q,"class"),width:k,height:l},a.fire("wpLoadImageData",{imgData:{data:o,node:q}})),d&&(m={type:"listbox",label:"Image list",values:c(d,function(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:o.src&&a.convertURL(o.src,"src"),onselect:function(a){var b=j.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),j.find("#src").value(a.control.value()).fire("change")},onPostRender:function(){m=this}}),a.settings.image_
 class_list&&(n={name:"class",type:"listbox",label:"Class",values:c(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var s=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:h},m];a.settings.image_description!==!1&&s.push({name:"alt",type:"textbox",label:"Image description"}),r&&s.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Height"},{name:"constrain",ty
 pe:"checkbox",checked:!0,text:"Constrain proportions"}]}),s.push(n),a.fire("wpLoadImageForm",{data:s}),a.settings.image_advtab?(q&&(o.hspace=g(q.style.marginLeft||q.style.marginRight),o.vspace=g(q.style.marginTop||q.style.marginBottom),o.border=g(q.style.borderWidth),o.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(q,"style")))),j=a.windowManager.open({title:"Insert/edit image",data:o,bodyType:"tabpanel",body:[{title:"General",type:"form",items:s},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:i},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space&
 quot;,name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:f})):j=a.windowManager.open({title:"Insert/edit image",data:o,body:s,onSubmit:f})}a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:d(e),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),a.addMenuItem("image",{icon:"image",text:"Insert image",onclick:d(e),context:"insert",prependToContext:!0}),a.addCommand("mceImage",d(e))});
</del><span class="cx">\ No newline at end of file
</span><ins>+tinymce.PluginManager.add("image",function(a){function b(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement("img");d.onload=function(){c(d.clientWidth,d.clientHeight)},d.onerror=function(){c()};var e=d.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left=0,e.width=e.height="auto",document.body.appendChild(d),d.src=a}function c(a,b,c){function d(a,c){return c=c||[],tinymce.each(a,function(a){var e={text:a.text||a.title};a.menu?e.menu=d(a.menu):(e.value=a.value,b(e)),c.push(e)}),c}return d(a,c||[])}function d(b){return function(){var c=a.settings.image_list;"string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):"function"==typeof c?c(b):b(c)}}function e(d){function e(){var a,b,c,d;a=j.find("#width")[0],b=j.find("#height")[0],a&&b&&(c=a.value(),
 d=b.value(),j.find("#constrain")[0].checked()&&k&&l&&c&&d&&(k!=c?(d=Math.round(c/k*d),b.value(d)):(c=Math.round(d/l*c),a.value(c))),k=c,l=d)}function f(){function b(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){o.width||o.height||!r||(p.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),a.fire("wpNewImageRefresh",{node:b})),c()},b.onerror=c}i(),e(),o=tinymce.extend(o,j.toJSON());var c=o.caption;o.alt||(o.alt=""),""===o.width&&(o.width=null),""===o.height&&(o.height=null),o.style||(o.style=null),o={src:o.src,alt:o.alt,width:o.width,height:o.height,style:o.style,"class":o["class"]},a.undoManager.transact(function(){var d={node:q,data:o,caption:c};return a.fire("wpImageFormSubmit",{imgData:d}),d.cancel?void b(d.node):o.src?(q?p.setAttribs(q,o):(o.id="__mcenew",a
 .focus(),a.selection.setContent(p.createHTML("img",o)),q=p.get("__mcenew"),p.setAttrib(q,"id",null)),void b(q)):void(q&&(p.remove(q),a.focus(),a.nodeChanged()))})}function g(a){return a&&(a=a.replace(/px$/,"")),a}function h(c){var d=c.meta||{};m&&m.value(a.convertURL(this.value(),"src")),tinymce.each(d,function(a,b){j.find("#"+b).value(a)}),d.width||d.height||b(this.value(),function(a){a.width&&a.height&&r&&(k=a.width,l=a.height,j.find("#width").value(k),j.find("#height").value(l))})}function i(){function b(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a}if(a.settings.image_advtab){var c=j.toJSON(),d=p.parseStyle(c.style);delete d.margin,d["margin-top"]=d["margin-bottom"]=b(c.vspace),d["margin-left"]=d["margin-right"]=b(c.hspace),d["border-width"]=b(c.border),j.find("#
 style").value(p.serializeStyle(p.parseStyle(p.serializeStyle(d))))}}var j,k,l,m,n,o={},p=a.dom,q=a.selection.getNode(),r=a.settings.image_dimensions!==!1;k=p.getAttrib(q,"width"),l=p.getAttrib(q,"height"),"IMG"!=q.nodeName||q.getAttribute("data-mce-object")||q.getAttribute("data-mce-placeholder")?q=null:(o={src:p.getAttrib(q,"src"),alt:p.getAttrib(q,"alt"),"class":p.getAttrib(q,"class"),width:k,height:l},a.fire("wpLoadImageData",{imgData:{data:o,node:q}})),d&&(m={type:"listbox",label:"Image list",values:c(d,function(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:o.src&&a.convertURL(o.src,"src"),onselect:function(a){var b=j.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),j.find("#src").v
 alue(a.control.value()).fire("change")},onPostRender:function(){m=this}}),a.settings.image_class_list&&(n={name:"class",type:"listbox",label:"Class",values:c(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var s=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:h},m];a.settings.image_description!==!1&&s.push({name:"alt",type:"textbox",label:"Image description"}),r&&s.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"tex
 tbox",maxLength:5,size:3,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),s.push(n),a.fire("wpLoadImageForm",{data:s}),a.settings.image_advtab?(q&&(o.hspace=g(q.style.marginLeft||q.style.marginRight),o.vspace=g(q.style.marginTop||q.style.marginBottom),o.border=g(q.style.borderWidth),o.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(q,"style")))),j=a.windowManager.open({title:"Insert/edit image",data:o,bodyType:"tabpanel",body:[{title:"General",type:"form",items:s},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchang
 e:i},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:f})):j=a.windowManager.open({title:"Insert/edit image",data:o,body:s,onSubmit:f})}a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:d(e),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),a.addMenuItem("image",{icon:"image",text:"Insert image",onclick:d(e),context:"insert",prependToContext:!0}),a.addCommand("mceImage",d(e))});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsmediapluginjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js 2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js    2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -20,6 +20,8 @@
</span><span class="cx">          {regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/, type: 'iframe', w: 425, h: 350, url: '//maps.google.com/maps/ms?msid=$2&output=embed"'}
</span><span class="cx">  ];
</span><span class="cx"> 
</span><ins>+       var embedChange = (tinymce.Env.ie && tinymce.Env.ie <= 8) ? 'onChange' : 'onInput';
+
</ins><span class="cx">   function guessMime(url) {
</span><span class="cx">          if (url.indexOf('.mp3') != -1) {
</span><span class="cx">                  return 'audio/mpeg';
</span><span class="lines">@@ -62,8 +64,21 @@
</span><span class="cx"> 
</span><span class="cx">  function showDialog() {
</span><span class="cx">          var win, width, height, data;
</span><ins>+
</ins><span class="cx">           var generalFormItems = [
</span><del>-                       {name: 'source1', type: 'filepicker', filetype: 'media', size: 40, autofocus: true, label: 'Source'}
</del><ins>+                        {
+                               name: 'source1',
+                               type: 'filepicker',
+                               filetype: 'media',
+                               size: 40,
+                               autofocus: true,
+                               label: 'Source',
+                               onchange: function(e) {
+                                       tinymce.each(e.meta, function(value, key) {
+                                               win.find('#' + key).value(value);
+                                       });
+                               }
+                       }
</ins><span class="cx">           ];
</span><span class="cx"> 
</span><span class="cx">          function recalcSize(e) {
</span><span class="lines">@@ -117,6 +132,23 @@
</span><span class="cx">          width = data.width;
</span><span class="cx">          height = data.height;
</span><span class="cx"> 
</span><ins>+               var embedTextBox = {
+                       id: 'mcemediasource',
+                       type: 'textbox',
+                       flex: 1,
+                       name: 'embed',
+                       value: getSource(),
+                       multiline: true,
+                       label: 'Source'
+               };
+
+               function updateValueOnChange() {
+                       data = htmlToData( this.value() );
+                       this.parent().parent().fromJSON(data);
+               }
+
+               embedTextBox[embedChange] = updateValueOnChange;
+
</ins><span class="cx">           win = editor.windowManager.open({
</span><span class="cx">                  title: 'Insert/edit video',
</span><span class="cx">                  data: data,
</span><span class="lines">@@ -149,15 +181,7 @@
</span><span class="cx">                                                  text: 'Paste your embed code below:',
</span><span class="cx">                                                  forId: 'mcemediasource'
</span><span class="cx">                                          },
</span><del>-                                               {
-                                                       id: 'mcemediasource',
-                                                       type: 'textbox',
-                                                       flex: 1,
-                                                       name: 'embed',
-                                                       value: getSource(),
-                                                       multiline: true,
-                                                       label: 'Source'
-                                               }
</del><ins>+                                                embedTextBox
</ins><span class="cx">                                   ]
</span><span class="cx">                          }
</span><span class="cx">                  ],
</span><span class="lines">@@ -420,7 +444,7 @@
</span><span class="cx">                                                  width: data.width,
</span><span class="cx">                                                  height: data.height
</span><span class="cx">                                          });
</span><del>-                                       break;
</del><ins>+                                                break;
</ins><span class="cx">                           }
</span><span class="cx"> 
</span><span class="cx">                          if (updateAll) {
</span><span class="lines">@@ -436,13 +460,13 @@
</span><span class="cx">                                                                  src: ""
</span><span class="cx">                                                          });
</span><span class="cx">                                                  }
</span><del>-                                               break;
</del><ins>+                                                        break;
</ins><span class="cx"> 
</span><span class="cx">                                          case "iframe":
</span><span class="cx">                                                  setAttributes(attrs, {
</span><span class="cx">                                                          src: data.source1
</span><span class="cx">                                                  });
</span><del>-                                               break;
</del><ins>+                                                        break;
</ins><span class="cx"> 
</span><span class="cx">                                          case "source":
</span><span class="cx">                                                  sourceCount++;
</span><span class="lines">@@ -457,7 +481,7 @@
</span><span class="cx">                                                                  return;
</span><span class="cx">                                                          }
</span><span class="cx">                                                  }
</span><del>-                                               break;
</del><ins>+                                                        break;
</ins><span class="cx"> 
</span><span class="cx">                                          case "img":
</span><span class="cx">                                                  if (!data.poster) {
</span><span class="lines">@@ -523,7 +547,7 @@
</span><span class="cx">          // Make sure that any messy HTML is retained inside these
</span><span class="cx">          var specialElements = editor.schema.getSpecialElements();
</span><span class="cx">          tinymce.each('video audio iframe object'.split(' '), function(name) {
</span><del>-                       specialElements[name] = new RegExp('<\/' + name + '[^>]*>','gi');
</del><ins>+                        specialElements[name] = new RegExp('<\/' + name + '[^>]*>', 'gi');
</ins><span class="cx">           });
</span><span class="cx"> 
</span><span class="cx">          // Allow elements
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginsmediapluginminjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js     2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js        2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1 +1 @@
</span><del>-tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r<i.length;r++)if(-1!==t.indexOf(i[r].filter))return i[r]}function o(){function t(e){var t,a,c,s;t=i.find("#width")[0],a=i.find("#height")[0],c=t.value(),s=a.value(),i.find("#constrain")[0].checked()&&r&&o&&c&&s&&(e.control==t?(s=Math.round(c/r*s),a.value(s)):(c=Math.round(s/o*c),t.value(c))),r=c,o=s}var i,r,o,m,d=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofo
 cus:!0,label:"Source"}];e.settings.media_alt_source!==!1&&d.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),e.settings.media_poster!==!1&&d.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),e.settings.media_dimensions!==!1&&d.push({type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:3,size:3,onchange:t},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:3,size:3,onchange:t},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),m=n(e.selection.getNode()),r=m.width,o=m.height,i=e.windowManager.open({title:"Insert/edit video",data:m,bodyType:"tabpanel&qu
 ot;,body:[{title:"General",type:"form",onShowTab:function(){m=s(this.next().find("#embed").value()),this.fromJSON(m)},items:d},{title:"Embed",type:"panel",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,onShowTab:function(){this.find("#embed").value(c(this.parent().toJSON()))},items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},{id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:a(),multiline:!0,label:"Source"}]}],onSubmit:function(){var t,i,r,o;for(t=e.dom.select("img[data-mce-object]"),e.insertContent(c(this.toJSON())),i=e.dom.select("img[data-mce-object]"),r=0;r<t.length;r++)for(o=i.length-1;o>=0;o--)t[r]==i[o]&&i.splice(o,1);e.selection.select(i[0]),e.nodeChanged()}})}function a(){var t=e.selection.getNode();return t.getAttribu
 te("data-mce-object")?e.selection.getContent():void 0}function c(o){var a="";if(!o.source1&&(tinymce.extend(o,s(o.embed)),!o.source1))return"";if(o.source2||(o.source2=""),o.poster||(o.poster=""),o.source1=e.convertURL(o.source1,"source"),o.source2=e.convertURL(o.source2,"source"),o.source1mime=i(o.source1),o.source2mime=i(o.source2),o.poster=e.convertURL(o.poster,"poster"),o.flashPlayerUrl=e.convertURL(t+"/moxieplayer.swf","movie"),tinymce.each(d,function(e){var t,i,r;if(t=e.regex.exec(o.source1)){for(r=e.url,i=0;t[i];i++)r=r.replace("$"+i,function(){return t[i]});o.source1=r,o.type=e.type,o.width=o.width||e.w,o.height=o.height||e.h}}),o.embed)a=m(o.embed,o,!0);else{var c=r(o.source1);c&&(o.type="script",o.width=c.width,o.height=c.height),o.width=o.width||300,o.height=o.height||150,tinymce.each(o,function(t,i){o[i]=e.dom.encode(t)}),"iframe&qu
 ot;==o.type?a+='<iframe src="'+o.source1+'" width="'+o.width+'" height="'+o.height+'"></iframe>':"application/x-shockwave-flash"==o.source1mime?(a+='<object data="'+o.source1+'" width="'+o.width+'" height="'+o.height+'" type="application/x-shockwave-flash">',o.poster&&(a+='<img src="'+o.poster+'" width="'+o.width+'" height="'+o.height+'" />'),a+="</object>"):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='<audio controls="controls" src="'+o.source1+'">'+(o.source2?'\n<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"':"")+" />\n":"")+"</audio>":"script"==o.type?a+='<script src="'+o.source1+'"></script>':a=
 e.settings.video_template_callback?e.settings.video_template_callback(o):'<video width="'+o.width+'" height="'+o.height+'"'+(o.poster?' poster="'+o.poster+'"':"")+' controls="controls">\n<source src="'+o.source1+'"'+(o.source1mime?' type="'+o.source1mime+'"':"")+" />\n"+(o.source2?'<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"':"")+" />\n":"")+"</video>"}return a}function s(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o
 )return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function n(t){return t.getAttribute("data-mce-object")?s(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,o,a;for(i in t)if(o=""+t[i],e.map[i])for(r=e.length;r--;)a=e[r],a.name==i&&(o?(e.map[i]=o,a.value=o):(delete e.map[i],e.splice(r,1)));else o&&(e.push({name:i,value:o}),e.map[i]=o)}var o,a=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,s,n){switch(e){case"vide
 o":case"object":case"embed":case"img":case"iframe":r(s,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(s,{poster:t.poster,src:""}),t.source2&&r(s,{src:""});break;case"iframe":r(s,{src:t.source1});break;case"source":if(c++,2>=c&&(r(s,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,s,n)},end:function(e){if("video"==e&&i)for(var s=1;2>=s;s++)if(t["source"+s]){var n=[];n.map={},s>c&&(r(n,{src:t["source"+s],type:t["source"+s+"mime"]}),a.start("source",n,!0))}if(t.poster&&"object"==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).p
 arse(e),a.getContent()}var d=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var i=e.schema.getBoolAttr
 s();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,s,n,m,d,u,l=t.length;l--;)if(a=t[l],a.parent&&("script"!=a.name||(u=r(a.attr("src"))))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,u&&(u.width&&a.attr("width",u.width.toString()),u.height&&a.attr("height",u.height.toString())),m=a.attributes,o=m.length;o--;)s=m[o].name,n=m[o].value,"width"!==s&&"height"!==s&&"style"!==s&&(("data"==s||"src"==s)&&(n=e.convertURL(n,s)),c.attr("data-mce-p-"+s,n));d=a.firstChild&&a.firstChild.value,d&&(c.attr("data-mce-html",escape(d)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.at
 tr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,s,n,m=e.length;m--;)if(i=e[m],i.parent){for(n=i.attr(t),r=new tinymce.html.Node(n,1),"audio"!=n&&"script"!=n&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var d=a[o].name;0===d.indexOf("data-mce-p-")&&r.attr(d.substr(11),a[o].value)}"script"==n&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(s=new tinymce.html.Node("#text",3),s.raw=!0,s.value=unescape(c),r.append(s)),i.replace(r)}})}),e.on("ObjectSelected",
 function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!0})});
</del><span class="cx">\ No newline at end of file
</span><ins>+tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r<i.length;r++)if(-1!==t.indexOf(i[r].filter))return i[r]}function o(){function t(e){var t,i,a,c;t=r.find("#width")[0],i=r.find("#height")[0],a=t.value(),c=i.value(),r.find("#constrain")[0].checked()&&o&&m&&a&&c&&(e.control==t?(c=Math.round(a/o*c),i.value(c)):(a=Math.round(c/m*a),t.value(a))),o=a,m=c}function i(){u=n(this.value()),this.parent().parent().fromJSON(u)}var r,o,m,u,l=[{name:"source1",typ
 e:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onchange:function(e){tinymce.each(e.meta,function(e,t){r.find("#"+t).value(e)})}}];e.settings.media_alt_source!==!1&&l.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),e.settings.media_poster!==!1&&l.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),e.settings.media_dimensions!==!1&&l.push({type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:3,size:3,onchange:t},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:3,size:3,onchange:t},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain propor
 tions"}]}),u=s(e.selection.getNode()),o=u.width,m=u.height;var h={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:a(),multiline:!0,label:"Source"};h[d]=i,r=e.windowManager.open({title:"Insert/edit video",data:u,bodyType:"tabpanel",body:[{title:"General",type:"form",onShowTab:function(){u=n(this.next().find("#embed").value()),this.fromJSON(u)},items:l},{title:"Embed",type:"panel",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,onShowTab:function(){this.find("#embed").value(c(this.parent().toJSON()))},items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},h]}],onSubmit:function(){var t,i,r,o;for(t=e.dom.select("img[data-mce-object]"),e.insertContent(c(this.toJSON())),i=e.dom.select("img[data-mce-object]"),r=0;r<t.length
 ;r++)for(o=i.length-1;o>=0;o--)t[r]==i[o]&&i.splice(o,1);e.selection.select(i[0]),e.nodeChanged()}})}function a(){var t=e.selection.getNode();return t.getAttribute("data-mce-object")?e.selection.getContent():void 0}function c(o){var a="";if(!o.source1&&(tinymce.extend(o,n(o.embed)),!o.source1))return"";if(o.source2||(o.source2=""),o.poster||(o.poster=""),o.source1=e.convertURL(o.source1,"source"),o.source2=e.convertURL(o.source2,"source"),o.source1mime=i(o.source1),o.source2mime=i(o.source2),o.poster=e.convertURL(o.poster,"poster"),o.flashPlayerUrl=e.convertURL(t+"/moxieplayer.swf","movie"),tinymce.each(u,function(e){var t,i,r;if(t=e.regex.exec(o.source1)){for(r=e.url,i=0;t[i];i++)r=r.replace("$"+i,function(){return t[i]});o.source1=r,o.type=e.type,o.width=o.width||e.w,o.height=o.height||e.h}}),o.embed)a=m(o.embed,o,!0);else{var c=r(o.source1);c&&(
 o.type="script",o.width=c.width,o.height=c.height),o.width=o.width||300,o.height=o.height||150,tinymce.each(o,function(t,i){o[i]=e.dom.encode(t)}),"iframe"==o.type?a+='<iframe src="'+o.source1+'" width="'+o.width+'" height="'+o.height+'"></iframe>':"application/x-shockwave-flash"==o.source1mime?(a+='<object data="'+o.source1+'" width="'+o.width+'" height="'+o.height+'" type="application/x-shockwave-flash">',o.poster&&(a+='<img src="'+o.poster+'" width="'+o.width+'" height="'+o.height+'" />'),a+="</object>"):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='<audio controls="controls" src="'+o.source1+'">'+(o.source2?'\n<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"
 ':"")+" />\n":"")+"</audio>":"script"==o.type?a+='<script src="'+o.source1+'"></script>':a=e.settings.video_template_callback?e.settings.video_template_callback(o):'<video width="'+o.width+'" height="'+o.height+'"'+(o.poster?' poster="'+o.poster+'"':"")+' controls="controls">\n<source src="'+o.source1+'"'+(o.source1mime?' type="'+o.source1mime+'"':"")+" />\n"+(o.source2?'<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"':"")+" />\n":"")+"</video>"}return a}function n(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==
 e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o)return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function s(t){return t.getAttribute("data-mce-object")?n(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,o,a;for(i in t)if(o=""+t[i],e.map[i])for(r=e.length;r--;)a=e[r],a.name==i&&(o?(e.map[i]=o,a.value=o):(delete e.map[i],e.splice(r,1)));else o&&(e.push({name:i,value:o}),e.map[i]=o)}var o,a=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,specia
 l:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,n,s){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(n,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(n,{poster:t.poster,src:""}),t.source2&&r(n,{src:""});break;case"iframe":r(n,{src:t.source1});break;case"source":if(c++,2>=c&&(r(n,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,n,s)},end:function(e){if("video"==e&&i)for(var n=1;2>=n;n++)if(t["source"+n]){var s=[];s.map={},n>c&&(r(s,{src:t["source"+n],type:t["source"+n+"mime"]}),a.start("source",s,!0))}if(t.poster&&"object&
 quot;==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var u=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"'}],d=tinymce.Env.ie&&tinymce.Env.ie<=8?"onChange":"onInput";e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e
 .on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,n,s,m,u,d,l=t.length;l--;)if(a=t[l],a.parent&&("script"!=a.name||(d=r(a.attr("src"))))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,d&&(d.width&&a.attr("width",d.width.toString()),d.height&&a.attr("height",d.height.toString())),m=a.attributes,o=m.length;o--;)n=m[o].name,s=m[o].value,"width"!==n&&"height"!==n&&"style"!==n&&(("data"==n||"src&quot
 ;==n)&&(s=e.convertURL(s,n)),c.attr("data-mce-p-"+n,s));u=a.firstChild&&a.firstChild.value,u&&(c.attr("data-mce-html",escape(u)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,n,s,m=e.length;m--;)if(i=e[m],i.parent){for(s=i.attr(t),r=new tinymce.html.Node(s,1),"audio"!=s&&"script"!=s&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var u=a[o].name;0===u.indexOf("data-mce-p-")&&r.attr(u.substr(11),a[o].value)}"scr
 ipt"==s&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(n=new tinymce.html.Node("#text",3),n.raw=!0,n.value=unescape(c),r.append(n)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!
 0})});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginspastepluginjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js 2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js    2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -170,6 +170,10 @@
</span><span class="cx">                  }
</span><span class="cx">          }
</span><span class="cx"> 
</span><ins>+               html = filter(html, [
+                       /<!\[[^\]]+\]>/g // Conditional comments
+               ]);
+
</ins><span class="cx">           walk(domParser.parse(html));
</span><span class="cx"> 
</span><span class="cx">          return text;
</span><span class="lines">@@ -182,15 +186,15 @@
</span><span class="cx">   * @return {String} Html contents that got trimmed.
</span><span class="cx">   */
</span><span class="cx">  function trimHtml(html) {
</span><del>-               var trimSpaces = function(all, s1, s2) {
</del><ins>+                function trimSpaces(all, s1, s2) {
</ins><span class="cx">                   // WebKit &nbsp; meant to preserve multiple spaces but instead inserted around all inline tags,
</span><del>-                       // including the spans with inline stypes created on paste
</del><ins>+                        // including the spans with inline styles created on paste
</ins><span class="cx">                   if (!s1 && !s2) {
</span><span class="cx">                          return ' ';
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="cx">                  return '\u00a0';
</span><del>-               };
</del><ins>+                }
</ins><span class="cx"> 
</span><span class="cx">          html = filter(html, [
</span><span class="cx">                  /^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g, // Remove anything but the contents within the BODY element
</span><span class="lines">@@ -535,15 +539,25 @@
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="cx">          function getCaretRangeFromEvent(e) {
</span><del>-                       var doc = editor.getDoc(), rng;
</del><ins>+                        var doc = editor.getDoc(), rng, point;
</ins><span class="cx"> 
</span><span class="cx">                  if (doc.caretPositionFromPoint) {
</span><del>-                               var point = doc.caretPositionFromPoint(e.clientX, e.clientY);
</del><ins>+                                point = doc.caretPositionFromPoint(e.clientX, e.clientY);
</ins><span class="cx">                           rng = doc.createRange();
</span><span class="cx">                          rng.setStart(point.offsetNode, point.offset);
</span><span class="cx">                          rng.collapse(true);
</span><span class="cx">                  } else if (doc.caretRangeFromPoint) {
</span><span class="cx">                          rng = doc.caretRangeFromPoint(e.clientX, e.clientY);
</span><ins>+                       } else if (doc.body.createTextRange) {
+                               rng = doc.body.createTextRange();
+
+                               try {
+                                       rng.moveToPoint(e.clientX, e.clientY);
+                                       rng.collapse(true);
+                               } catch (ex) {
+                                       // Append to top or bottom depending on drop location
+                                       rng.collapse(e.clientY < doc.body.clientHeight);
+                               }
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  return rng;
</span><span class="lines">@@ -835,7 +849,55 @@
</span><span class="cx">                  function convertFakeListsToProperLists(node) {
</span><span class="cx">                          var currentListNode, prevListNode, lastLevel = 1;
</span><span class="cx"> 
</span><del>-                               function convertParagraphToLi(paragraphNode, listStartTextNode, listName, start) {
</del><ins>+                                function getText(node) {
+                                       var txt = '';
+
+                                       if (node.type === 3) {
+                                               return node.value;
+                                       }
+
+                                       if ((node = node.firstChild)) {
+                                               do {
+                                                       txt += getText(node);
+                                               } while ((node = node.next));
+                                       }
+
+                                       return txt;
+                               }
+
+                               function trimListStart(node, regExp) {
+                                       if (node.type === 3) {
+                                               if (regExp.test(node.value)) {
+                                                       node.value = node.value.replace(regExp, '');
+                                                       return false;
+                                               }
+                                       }
+
+                                       if ((node = node.firstChild)) {
+                                               do {
+                                                       if (!trimListStart(node, regExp)) {
+                                                               return false;
+                                                       }
+                                               } while ((node = node.next));
+                                       }
+
+                                       return true;
+                               }
+
+                               function removeIgnoredNodes(node) {
+                                       if (node._listIgnore) {
+                                               node.remove();
+                                               return;
+                                       }
+
+                                       if ((node = node.firstChild)) {
+                                               do {
+                                                       removeIgnoredNodes(node);
+                                               } while ((node = node.next));
+                                       }
+                               }
+
+                               function convertParagraphToLi(paragraphNode, listName, start) {
</ins><span class="cx">                                   var level = paragraphNode._listLevel || lastLevel;
</span><span class="cx"> 
</span><span class="cx">                                  // Handle list nesting
</span><span class="lines">@@ -866,19 +928,19 @@
</span><span class="cx">                                  }
</span><span class="cx"> 
</span><span class="cx">                                  paragraphNode.name = 'li';
</span><del>-                                       listStartTextNode.value = '';
</del><span class="cx"> 
</span><del>-                                       var nextNode = listStartTextNode.next;
-                                       if (nextNode && nextNode.type == 3) {
-                                               nextNode.value = nextNode.value.replace(/^\u00a0+/, '');
-                                       }
-
</del><span class="cx">                                   // Append list to previous list if it exists
</span><span class="cx">                                  if (level > lastLevel && prevListNode) {
</span><span class="cx">                                          prevListNode.lastChild.append(currentListNode);
</span><span class="cx">                                  }
</span><span class="cx"> 
</span><span class="cx">                                  lastLevel = level;
</span><ins>+
+                                       // Remove start of list item "1. " or "&middot; " etc
+                                       removeIgnoredNodes(paragraphNode);
+                                       trimListStart(paragraphNode, /^\u00a0+/);
+                                       trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u00d8\u25CF]|\w+\.)/);
+                                       trimListStart(paragraphNode, /^\u00a0+/);
</ins><span class="cx">                           }
</span><span class="cx"> 
</span><span class="cx">                          var paragraphs = node.getAll('p');
</span><span class="lines">@@ -888,26 +950,17 @@
</span><span class="cx"> 
</span><span class="cx">                                  if (node.name == 'p' && node.firstChild) {
</span><span class="cx">                                          // Find first text node in paragraph
</span><del>-                                               var nodeText = '';
</del><ins>+                                                var nodeText = getText(node);
</ins><span class="cx">                                           var listStartTextNode = node.firstChild;
</span><span class="cx"> 
</span><del>-                                               while (listStartTextNode) {
-                                                       nodeText = listStartTextNode.value;
-                                                       if (nodeText) {
-                                                               break;
-                                                       }
-
-                                                       listStartTextNode = listStartTextNode.firstChild;
-                                               }
-
</del><span class="cx">                                           // Detect unordered lists look for bullets
</span><del>-                                               if (/^\s*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*$/.test(nodeText)) {
-                                                       convertParagraphToLi(node, listStartTextNode, 'ul');
</del><ins>+                                                if (/^[\s\u00a0]*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*/.test(nodeText)) {
+                                                       convertParagraphToLi(node, 'ul');
</ins><span class="cx">                                                   continue;
</span><span class="cx">                                          }
</span><span class="cx"> 
</span><span class="cx">                                          // Detect ordered lists 1., a. or ixv.
</span><del>-                                               if (/^\s*\w+\.$/.test(nodeText)) {
</del><ins>+                                                if (/^[\s\u00a0]*\w+\./.test(nodeText) && !/^[\s\u00a0]*\w+\.\s*[^\s]+/.test(listStartTextNode.value)) {
</ins><span class="cx">                                                   // Parse OL start number
</span><span class="cx">                                                  var matches = /([0-9])\./.exec(nodeText);
</span><span class="cx">                                                  var start = 1;
</span><span class="lines">@@ -915,30 +968,43 @@
</span><span class="cx">                                                          start = parseInt(matches[1], 10);
</span><span class="cx">                                                  }
</span><span class="cx"> 
</span><del>-                                                       convertParagraphToLi(node, listStartTextNode, 'ol', start);
</del><ins>+                                                        convertParagraphToLi(node, 'ol', start);
</ins><span class="cx">                                                   continue;
</span><span class="cx">                                          }
</span><span class="cx"> 
</span><ins>+                                               // Convert paragraphs marked as lists but doesn't look like anything
+                                               if (node._listLevel) {
+                                                       convertParagraphToLi(node, 'ul', 1);
+                                                       continue;
+                                               }
+
</ins><span class="cx">                                           currentListNode = null;
</span><span class="cx">                                  }
</span><span class="cx">                          }
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="cx">                  function filterStyles(node, styleValue) {
</span><del>-                               var outputStyles = {}, styles = editor.dom.parseStyle(styleValue);
</del><ins>+                                var outputStyles = {}, matches, styles = editor.dom.parseStyle(styleValue);
</ins><span class="cx"> 
</span><del>-                               // Parse out list indent level for lists
-                               if (node.name === 'p') {
-                                       var matches = /mso-list:\w+ \w+([0-9]+)/.exec(styleValue);
-
-                                       if (matches) {
-                                               node._listLevel = parseInt(matches[1], 10);
-                                       }
-                               }
-
</del><span class="cx">                           Tools.each(styles, function(value, name) {
</span><span class="cx">                                  // Convert various MS styles to W3C styles
</span><span class="cx">                                  switch (name) {
</span><ins>+                                               case 'mso-list':
+                                                       // Parse out list indent level for lists
+                                                       matches = /\w+ \w+([0-9]+)/i.exec(styleValue);
+                                                       if (matches) {
+                                                               node._listLevel = parseInt(matches[1], 10);
+                                                       }
+
+                                                       // Remove these nodes <span style="mso-list:Ignore">o</span>
+                                                       // Since the span gets removed we mark the text node and the span
+                                                       if (/Ignore/i.test(value) && node.firstChild) {
+                                                               node._listIgnore = true;
+                                                               node.firstChild._listIgnore = true;
+                                                       }
+
+                                                       break;
+
</ins><span class="cx">                                           case "horiz-align":
</span><span class="cx">                                                  name = "text-align";
</span><span class="cx">                                                  break;
</span><span class="lines">@@ -1096,7 +1162,7 @@
</span><span class="cx">                                          node = nodes[i];
</span><span class="cx"> 
</span><span class="cx">                                          className = node.attr('class');
</span><del>-                                               if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {
</del><ins>+                                                if (/^(MsoCommentReference|MsoCommentText|msoDel|MsoCaption)$/i.test(className)) {
</ins><span class="cx">                                                   node.remove();
</span><span class="cx">                                          }
</span><span class="cx"> 
</span><span class="lines">@@ -1304,7 +1370,7 @@
</span><span class="cx">                                          return before + ' style="' + outputStyles + '"' + after;
</span><span class="cx">                                  }
</span><span class="cx"> 
</span><del>-                                       return '';
</del><ins>+                                        return before + after;
</ins><span class="cx">                           });
</span><span class="cx">                  } else {
</span><span class="cx">                          // Remove all external styles
</span><span class="lines">@@ -1443,5 +1509,5 @@
</span><span class="cx">  });
</span><span class="cx"> });
</span><span class="cx"> 
</span><del>-expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks","tinymce/pasteplugin/Plugin"]);
</del><ins>+expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/WordFilter"]);
</ins><span class="cx"> })(this);
</span><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginspastepluginminjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js     2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js        2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1 +1 @@
</span><del>-!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r<e.length;++r){if(n=s[e[r]]||a(e[r]),!n)throw"module definition dependecy not found: "+e[r];i.push(n)}t.apply(null,i)}function i(e,i,r){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(i===t)throw"invalid module definition, dependencies must be specified";if(r===t)throw"invalid module definition, definition function must be specified";n(i,function(){s[e]=r.apply(null,arguments)})}function r(e){return!!s[e]}function a(t){for(var n=e,i=t.split(/[.\/]/),r=0;r<i.length;++r){if(!n[i[r]])return;n=n[i[r]]}return n}function o(n){for(var i=0;i<n.length;i++){for(var r=e,a=n[i],o=a.split(/[.\/]/),l=0;l<o.length-1;++l)r[o[l]]===t&&(r[o[l]]={}),r=r[o[l]];r[o[o.length-1]]=s[a]}}var s={},l="tinymce/pasteplugin/Utils",c="tinymce/util/Tools",d="tinymce/html/DomParser&quo
 t;,f="tinymce/html/Schema",u="tinymce/pasteplugin/Clipboard",p="tinymce/Env",m="tinymce/util/VK",g="tinymce/pasteplugin/WordFilter",v="tinymce/html/Serializer",h="tinymce/html/Node",b="tinymce/pasteplugin/Quirks",y="tinymce/pasteplugin/Plugin",w="tinymce/PluginManager";i(l,[c,d,f],function(e,t,n){function i(t,n){return e.each(n,function(e){t=e.constructor==RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}function r(i){function r(e){var t=e.name,n=e;if("br"===t)return void(s+="\n");if(l[t]&&(s+=" "),c[t])return void(s+=" ");if(3==e.type&&(s+=e.value),!e.shortEnded&&(e=e.firstChild))do r(e);while(e=e.next);d[t]&&n.next&&(s+="\n","p"==t&&(s+="\n"))}var a=new n,o=new t({},a),s="",l=a.getShortEndedElements(),c=e.makeMap("script noscript style textare
 a video audio iframe object"," "),d=a.getBlockElements();return r(o.parse(i)),s}function a(e){var t=function(e,t,n){return t||n?"\u00a0":" "};return e=i(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,t],/<br>$/i])}return{filter:i,innerText:r,trimHtml:a}}),i(u,[p,m,l],function(e,t,n){return function(i){function r(e){var t,n=i.dom;if(t=i.fire("BeforePastePreProcess",{content:e}),t=i.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(i.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var r=n.add(i.getBody(),"div",{style:"display:none"},e);t=i.fire("PastePostProcess",{node:r}),n.remove(r),e=t.node.innerHTML}t.isDefaultPrevented()||i.insertContent(e,{merge:i.settings.paste_merge_formats!==
 !1})}}function a(e){e=i.dom.encode(e).replace(/\r\n/g,"\n");var t=i.dom.getParent(i.selection.getStart(),i.dom.isBlock),a=i.settings.forced_root_block,o;a&&(o=i.dom.createHTML(a,i.settings.forced_root_block_attrs),o=o.substr(0,o.length-3)+">"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!a?e=n.filter(e,[[/\n/g,"<br>"]]):(e=n.filter(e,[[/\n\n/g,"</p>"+o],[/^(.*<\/p>)(<p>)$/,o+"$1"],[/\n/g,"<br />"]]),-1!=e.indexOf("<p>")&&(e=o+e)),r(e)}function o(){var t=i.dom,n=i.getBody(),r=i.dom.getViewPort(i.getWin()),a=r.y,o=20,s;if(y=i.selection.getRng(),i.inline&&(s=i.selection.getScrollContainer(),s&&s.scrollTop>0&&(a=s.scrollTop)),y.getClientRects){var l=y.getClientRects();if(l.length)o=a+(l[0].top-t.getPos(n).y);else{o=a;var c=y.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&
 (o=t.getPos(c,s||n).y))}}b=t.add(i.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+o+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},x),(e.ie||e.gecko)&&t.setStyle(b,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(b,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),b.focus(),i.selection.select(b,!0)}function s(){if(b){for(var e;e=i.dom.get("mcepastebin");)i.dom.remove(e),i.dom.unbind(e);y&&i.selection.setRng(y)}b=y=null}function l(){var e="",t,n,r,a;for(t=i.dom.select("div[id=mcepastebin]"),n=0;n<t.length;n++)r=t[n],r.firstChild&&"mcepastebin"==r.firstChild.id&&(r=r.firstChild),a=r.innerHTML,e!=x&&(e+=a);return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n
 &&n.length>0&&(t["text/plain"]=n);for(var i=0;i<e.types.length;i++){var r=e.types[i];t[r]=e.getData(r)}}return t}function d(e){return c(e.clipboardData||i.getDoc().dataTransfer)}function f(e,t){function n(n){function a(){t&&(i.selection.setRng(t),t=null),r('<img src="'+l.result+'">')}var o,s,l;if(n)for(o=0;o<n.length;o++)if(s=n[o],/^image\/(jpeg|png|gif)$/.test(s.type))return l=new FileReader,l.onload=a,l.readAsDataURL(s.getAsFile?s.getAsFile():s),e.preventDefault(),!0}var a=e.clipboardData||e.dataTransfer;return i.settings.paste_data_images&&a?n(a.items)||n(a.files):void 0}function u(e){var t=e.clipboardData;return-1!=navigator.userAgent.indexOf("Android")&&t&&t.items&&0===t.items.length}function p(e){var t=i.getDoc(),n;if(t.caretPositionFromPoint){var r=t.caretPositionFromPoint(e.clientX,e.clientY);n=t.createRange(),n.setStart(r.offsetNode,r.offset),n.collapse(!0)}else t.caretRange
 FromPoint&&(n=t.caretRangeFromPoint(e.clientX,e.clientY));return n}function m(e,t){return t in e&&e[t].length>0}function g(e){return t.metaKeyPressed(e)&&86==e.keyCode||e.shiftKey&&45==e.keyCode}function v(){i.on("keydown",function(t){function n(e){g(e)&&!e.isDefaultPrevented()&&s()}if(g(t)&&!t.isDefaultPrevented()){if(P=t.shiftKey&&86==t.keyCode,P&&e.webkit&&-1!=navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),w=(new Date).getTime(),e.ie&&P)return t.preventDefault(),void i.fire("paste",{ieFake:!0});s(),o(),i.once("keyup",n),i.once("paste",function(){i.off("keyup",n)})}}),i.on("paste",function(t){var c=d(t),p=(new Date).getTime()-w<1e3,g="text"==h.pasteFormat||P;return P=!1,t.isDefaultPrevented()||u(t)?void s():f(t)?void s():(p||t.preventDefault(),!e.ie||p&&!t.ieFake||(o(),i
 .dom.bind(b,"paste",function(e){e.stopPropagation()}),i.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e;return m(c,"text/html")?e=c["text/html"]:(e=l(),e==x&&(g=!0)),e=n.trimHtml(e),b&&b.firstChild&&"mcepastebin"===b.firstChild.id&&(g=!0),s(),g&&(e=m(c,"text/plain")&&-1==e.indexOf("</p>")?c["text/plain"]:n.innerText(e)),e==x?void(p||i.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(g?a(e):r(e))},0))}),i.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",i.selection.getContent())}catch(t){}}),i.on("drop",function(e){var t=p(e);if(!e.isDefaultPrevented()&&!f(e,t)&&t){var n=c(e.dataTransfer),o=n["mce-internal"]||n["text/html"]||n["text/pla
 in"];o&&(e.preventDefault(),i.undoManager.transact(function(){n["mce-internal"]&&i.execCommand("Delete"),i.selection.setRng(t),n["text/html"]?r(o):a(o)}))}}),i.on("dragover dragend",function(e){var t,n=e.dataTransfer;if(i.settings.paste_data_images&&n)for(t=0;t<n.types.length;t++)if("Files"==n.types[t])return e.preventDefault(),!1})}var h=this,b,y,w=0,x="%MCEPASTEBIN%",P;h.pasteHtml=r,h.pasteText=a,i.on("preInit",function(){v(),i.parser.addNodeFilter("img",function(t){if(!i.settings.paste_data_images)for(var n=t.length;n--;){var r=t[n].attributes.map.src;r&&/^(data:image|webkit\-fake\-url)/.test(r)&&(t[n].attr("data-mce-object")||r===e.transparentSrc||t[n].remove())}})})}}),i(g,[c,d,f,v,h,l],function(e,t,n,i,r,a){function o(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordD
 ocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}function s(s){var l=s.settings;s.on("BeforePastePreProcess",function(c){function d(e){function t(e,t,o,s){var l=e._listLevel||a;l!=a&&(a>l?n&&(n=n.parent.parent):(i=n,n=null)),n&&n.name==o?n.append(e):(i=i||n,n=new r(o,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>a&&i&&i.lastChild.append(n),a=l}for(var n,i,a=1,o=e.getAll("p"),s=0;s<o.length;s++)if(e=o[s],"p"==e.name&&e.firstChild){for(var l="",c=e.firstChild;c&&!(l=c.value);)c=c.firstChild;if(/^\s*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*$/.test(l)){t(e,c,"ul");continue}if(/^\s*\w+\.$/.test(l)){var d=/([0-9])\./.exec(l),f=1;d&&(f=parseInt(d[1],10)),t(e,c,&qu
 ot;ol",f);continue}n=null}}function f(t,n){var i={},a=s.dom.parseStyle(n);if("p"===t.name){var o=/mso-list:\w+ \w+([0-9]+)/.exec(n);o&&(t._listLevel=parseInt(o[1],10))}return e.each(a,function(e,n){switch(n){case"horiz-align":n="text-align";break;case"vert-align":n="vertical-align";break;case"font-color":case"mso-foreground":n="color";break;case"mso-background":case"mso-highlight":n="background";break;case"font-weight":case"font-style":return void("normal"!=e&&(i[n]=e));case"mso-element":if(/^(comment|comment-list)$/i.test(e))return void t.remove()}return 0===n.indexOf("mso-comment")?void t.remove():void(0!==n.indexOf("mso-")&&("all"==p||m&&m[n])&&(i[n]=e))}),/(bold)/i.test(i["font-weight"])&&(delete i["font-weight"],t.wrap(new r(&quo
 t;b",1))),/(italic)/i.test(i["font-style"])&&(delete i["font-style"],t.wrap(new r("i",1))),i=s.dom.serializeStyle(i,t.name),i?i:null}var u=c.content,p,m;if(p=l.paste_retain_style_properties,p&&(m=e.makeMap(p.split(/[, ]/))),l.paste_enable_default_filters!==!1&&o(c.content)){c.wordContent=!0,u=a.filter(u,[/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\u00a0"):""}]]);var g=l.paste_word_valid_elements;g||(g="-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-table[width]
 ,-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br,del");var v=new n({valid_elements:g,valid_children:"-li[p]"});e.each(v.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var h=new t({},v);h.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",f(n,n.attr("style"))),"span"==n.name&&n.parent&&!n.attributes.length&&n.unwrap()}),h.addAttributeFilter("class",function(e){for(var t=e.length,n,i;t--;)n=e[t],i=n.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(i)&&n.remove(),n.attr("class",null)}),h.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),h.addNodeFilter("a",function(
 e){for(var t=e.length,n,i,r;t--;)if(n=e[t],i=n.attr("href"),r=n.attr("name"),i&&-1!=i.indexOf("#_msocom_"))n.remove();else if(i&&0===i.indexOf("file://")&&(i=i.split("#")[1],i&&(i="#"+i)),i||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){n.unwrap();continue}n.attr({href:i,name:r})}else n.unwrap()});var b=h.parse(u);d(b),c.content=new i({},v).serialize(b)}})}return s.isWordContent=o,s}),i(b,[p,c,g,l],function(e,t,n,i){return function(r){function a(e){r.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function o(e){if(!n.isWordContent(e))return e;var a=[];t.each(r.schema.getBlockElements(),function(e,t){a.push(t)});var o=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+a.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=i.filter(e,[[o,"$1"]]),e=i.filter(e,[[
 /<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function s(e){if(n.isWordContent(e))return e;var t=r.settings.paste_webkit_styles;if(r.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var i=r.dom,a=r.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,r,o){var s=i.parseStyle(r,"span"),l={};if("none"===t)return n+o;for(var c=0;c<t.length;c++){var d=s[t[c]],f=i.getStyle(a,t[c],!0);/color/.test(t[c])&&(d=i.toHex(d),f=i.toHex(f)),f!=d&&(l[t[c]]=d)}return l=i.serializeStyle(l,"span"),l?n+' style="'+l+'"'+o:""})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,i
 ){return t+' style="'+n+'"'+i})}e.webkit&&a(s),e.ie&&a(o)}}),i(y,[w,u,g,b],function(e,t,n,i){var r;e.add("paste",function(e){function a(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),r||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),r=!0))}var o=this,s,l=e.settings;o.clipboard=s=new t(e),o.quirks=new i(e),o.wordFilter=new n(e),e.settings.paste_as_text&&(o.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(o,o,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(o,o,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&o.clipboard.pasteHtml(t.content),t.text&&o.clipboard.pasteText(t.t
 ext)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:a,active:"text"==o.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:a})})}),o([l,u,g,b,y])}(this);
</del><span class="cx">\ No newline at end of file
</span><ins>+!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i<e.length;++i){if(n=s[e[i]]||o(e[i]),!n)throw"module definition dependecy not found: "+e[i];r.push(n)}t.apply(null,r)}function r(e,r,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(r===t)throw"invalid module definition, dependencies must be specified";if(i===t)throw"invalid module definition, definition function must be specified";n(r,function(){s[e]=i.apply(null,arguments)})}function i(e){return!!s[e]}function o(t){for(var n=e,r=t.split(/[.\/]/),i=0;i<r.length;++i){if(!n[r[i]])return;n=n[r[i]]}return n}function a(n){for(var r=0;r<n.length;r++){for(var i=e,o=n[r],a=o.split(/[.\/]/),l=0;l<a.length-1;++l)i[a[l]]===t&&(i[a[l]]={}),i=i[a[l]];i[a[a.length-1]]=s[o]}}var s={},l="tinymce/pasteplugin/Utils",c="tinymce/util/Tools",u="tinymce/html/DomParser&quo
 t;,d="tinymce/html/Schema",f="tinymce/pasteplugin/Clipboard",p="tinymce/Env",m="tinymce/util/VK",h="tinymce/pasteplugin/WordFilter",g="tinymce/html/Serializer",v="tinymce/html/Node",y="tinymce/pasteplugin/Quirks",b="tinymce/pasteplugin/Plugin",C="tinymce/PluginManager";r(l,[c,u,d],function(e,t,n){function r(t,n){return e.each(n,function(e){t=e.constructor==RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}function i(i){function o(e){var t=e.name,n=e;if("br"===t)return void(l+="\n");if(c[t]&&(l+=" "),u[t])return void(l+=" ");if(3==e.type&&(l+=e.value),!e.shortEnded&&(e=e.firstChild))do o(e);while(e=e.next);d[t]&&n.next&&(l+="\n","p"==t&&(l+="\n"))}var a=new n,s=new t({},a),l="",c=a.getShortEndedElements(),u=e.makeMap("script noscript style textare
 a video audio iframe object"," "),d=a.getBlockElements();return i=r(i,[/<!\[[^\]]+\]>/g]),o(s.parse(i)),l}function o(e){function t(e,t,n){return t||n?"\xa0":" "}return e=r(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,t],/<br>$/i])}return{filter:r,innerText:i,trimHtml:o}}),r(f,[p,m,l],function(e,t,n){return function(r){function i(e){var t,n=r.dom;if(t=r.fire("BeforePastePreProcess",{content:e}),t=r.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(r.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var i=n.add(r.getBody(),"div",{style:"display:none"},e);t=r.fire("PastePostProcess",{node:i}),n.remove(i),e=t.node.innerHTML}t.isDefaultPrevented()||r.insertContent(e,{merge:r.settin
 gs.paste_merge_formats!==!1})}}function o(e){e=r.dom.encode(e).replace(/\r\n/g,"\n");var t=r.dom.getParent(r.selection.getStart(),r.dom.isBlock),o=r.settings.forced_root_block,a;o&&(a=r.dom.createHTML(o,r.settings.forced_root_block_attrs),a=a.substr(0,a.length-3)+">"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"<br>"]]):(e=n.filter(e,[[/\n\n/g,"</p>"+a],[/^(.*<\/p>)(<p>)$/,a+"$1"],[/\n/g,"<br />"]]),-1!=e.indexOf("<p>")&&(e=a+e)),i(e)}function a(){var t=r.dom,n=r.getBody(),i=r.dom.getViewPort(r.getWin()),o=i.y,a=20,s;if(b=r.selection.getRng(),r.inline&&(s=r.selection.getScrollContainer(),s&&s.scrollTop>0&&(o=s.scrollTop)),b.getClientRects){var l=b.getClientRects();if(l.length)a=o+(l[0].top-t.getPos(n).y);else{a=o;var c=b.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode
 ),1==c.nodeType&&(a=t.getPos(c,s||n).y))}}y=t.add(r.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},x),(e.ie||e.gecko)&&t.setStyle(y,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(y,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),y.focus(),r.selection.select(y,!0)}function s(){if(y){for(var e;e=r.dom.get("mcepastebin");)r.dom.remove(e),r.dom.unbind(e);b&&r.selection.setRng(b)}y=b=null}function l(){var e="",t,n,i,o;for(t=r.dom.select("div[id=mcepastebin]"),n=0;n<t.length;n++)i=t[n],i.firstChild&&"mcepastebin"==i.firstChild.id&&(i=i.firstChild),o=i.innerHTML,e!=x&&(e+=o);return e}function c(e){var t={};if(e&&e.types){var n=e.ge
 tData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var r=0;r<e.types.length;r++){var i=e.types[r];t[i]=e.getData(i)}}return t}function u(e){return c(e.clipboardData||r.getDoc().dataTransfer)}function d(e,t){function n(n){function o(){t&&(r.selection.setRng(t),t=null),i('<img src="'+l.result+'">')}var a,s,l;if(n)for(a=0;a<n.length;a++)if(s=n[a],/^image\/(jpeg|png|gif)$/.test(s.type))return l=new FileReader,l.onload=o,l.readAsDataURL(s.getAsFile?s.getAsFile():s),e.preventDefault(),!0}var o=e.clipboardData||e.dataTransfer;return r.settings.paste_data_images&&o?n(o.items)||n(o.files):void 0}function f(e){var t=e.clipboardData;return-1!=navigator.userAgent.indexOf("Android")&&t&&t.items&&0===t.items.length}function p(e){var t=r.getDoc(),n,i;if(t.caretPositionFromPoint)i=t.caretPositionFromPoint(e.clientX,e.clientY),n=t.createRange(),n.setStart(i.offsetNode,i.offset),n.collapse
 (!0);else if(t.caretRangeFromPoint)n=t.caretRangeFromPoint(e.clientX,e.clientY);else if(t.body.createTextRange){n=t.body.createTextRange();try{n.moveToPoint(e.clientX,e.clientY),n.collapse(!0)}catch(o){n.collapse(e.clientY<t.body.clientHeight)}}return n}function m(e,t){return t in e&&e[t].length>0}function h(e){return t.metaKeyPressed(e)&&86==e.keyCode||e.shiftKey&&45==e.keyCode}function g(){r.on("keydown",function(t){function n(e){h(e)&&!e.isDefaultPrevented()&&s()}if(h(t)&&!t.isDefaultPrevented()){if(w=t.shiftKey&&86==t.keyCode,w&&e.webkit&&-1!=navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),C=(new Date).getTime(),e.ie&&w)return t.preventDefault(),void r.fire("paste",{ieFake:!0});s(),a(),r.once("keyup",n),r.once("paste",function(){r.off("keyup",n)})}}),r.on("paste",function(t){var c=u(t),p=(new Da
 te).getTime()-C<1e3,h="text"==v.pasteFormat||w;return w=!1,t.isDefaultPrevented()||f(t)?void s():d(t)?void s():(p||t.preventDefault(),!e.ie||p&&!t.ieFake||(a(),r.dom.bind(y,"paste",function(e){e.stopPropagation()}),r.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e;return m(c,"text/html")?e=c["text/html"]:(e=l(),e==x&&(h=!0)),e=n.trimHtml(e),y&&y.firstChild&&"mcepastebin"===y.firstChild.id&&(h=!0),s(),h&&(e=m(c,"text/plain")&&-1==e.indexOf("</p>")?c["text/plain"]:n.innerText(e)),e==x?void(p||r.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(h?o(e):i(e))},0))}),r.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",r.selection.getContent())}catch(t){}}),r.on("drop&
 quot;,function(e){var t=p(e);if(!e.isDefaultPrevented()&&!d(e,t)&&t){var n=c(e.dataTransfer),a=n["mce-internal"]||n["text/html"]||n["text/plain"];a&&(e.preventDefault(),r.undoManager.transact(function(){n["mce-internal"]&&r.execCommand("Delete"),r.selection.setRng(t),n["text/html"]?i(a):o(a)}))}}),r.on("dragover dragend",function(e){var t,n=e.dataTransfer;if(r.settings.paste_data_images&&n)for(t=0;t<n.types.length;t++)if("Files"==n.types[t])return e.preventDefault(),!1})}var v=this,y,b,C=0,x="%MCEPASTEBIN%",w;v.pasteHtml=i,v.pasteText=o,r.on("preInit",function(){g(),r.parser.addNodeFilter("img",function(t){if(!r.settings.paste_data_images)for(var n=t.length;n--;){var i=t[n].attributes.map.src;i&&/^(data:image|webkit\-fake\-url)/.test(i)&&(t[n].attr("data-mce-object")||i===e.transparentSrc||t[n].remove())}})
 })}}),r(h,[c,u,d,g,v,l],function(e,t,n,r,i,o){function a(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}function s(s){var l=s.settings;s.on("BeforePastePreProcess",function(c){function u(e){function t(e){var n="";if(3===e.type)return e.value;if(e=e.firstChild)do n+=t(e);while(e=e.next);return n}function n(e,t){if(3===e.type&&t.test(e.value))return e.value=e.value.replace(t,""),!1;if(e=e.firstChild)do if(!n(e,t))return!1;while(e=e.next);return!0}function r(e){if(e._listIgnore)return void e.remove();if(e=e.firstChild)do r(e);while(e=e.next)}function o(e,t,o){var c=e._listLevel||l;c!=l&&(l>c?a&&(a=a.parent.parent):(s=a,a=null)),a&&a.name==t?a.append(e):(s=s||a,a=new i(t,1),o>1&&a.attr("start",""+o),e.wrap(a)),e.name=
 "li",c>l&&s&&s.lastChild.append(a),l=c,r(e),n(e,/^\u00a0+/),n(e,/^\s*([\u2022\u00b7\u00a7\u00d8\u25CF]|\w+\.)/),n(e,/^\u00a0+/)}for(var a,s,l=1,c=e.getAll("p"),u=0;u<c.length;u++)if(e=c[u],"p"==e.name&&e.firstChild){var d=t(e),f=e.firstChild;if(/^[\s\u00a0]*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*/.test(d)){o(e,"ul");continue}if(/^[\s\u00a0]*\w+\./.test(d)&&!/^[\s\u00a0]*\w+\.\s*[^\s]+/.test(f.value)){var p=/([0-9])\./.exec(d),m=1;p&&(m=parseInt(p[1],10)),o(e,"ol",m);continue}if(e._listLevel){o(e,"ul",1);continue}a=null}}function d(t,n){var r={},o,a=s.dom.parseStyle(n);return e.each(a,function(e,i){switch(i){case"mso-list":o=/\w+ \w+([0-9]+)/i.exec(n),o&&(t._listLevel=parseInt(o[1],10)),/Ignore/i.test(e)&&t.firstChild&&(t._listIgnore=!0,t.firstChild._listIgnore=!0);break;case"horiz-align":i="text-align";break;case"vert-align&
 quot;:i="vertical-align";break;case"font-color":case"mso-foreground":i="color";break;case"mso-background":case"mso-highlight":i="background";break;case"font-weight":case"font-style":return void("normal"!=e&&(r[i]=e));case"mso-element":if(/^(comment|comment-list)$/i.test(e))return void t.remove()}return 0===i.indexOf("mso-comment")?void t.remove():void(0!==i.indexOf("mso-")&&("all"==p||m&&m[i])&&(r[i]=e))}),/(bold)/i.test(r["font-weight"])&&(delete r["font-weight"],t.wrap(new i("b",1))),/(italic)/i.test(r["font-style"])&&(delete r["font-style"],t.wrap(new i("i",1))),r=s.dom.serializeStyle(r,t.name),r?r:null}var f=c.content,p,m;if(p=l.paste_retain_style_properties,p&&(m=e.makeMap(p.split(/[, ]/))),l.paste_enable_default_filters!==!1&
 amp;&a(c.content)){c.wordContent=!0,f=o.filter(f,[/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var h=l.paste_word_valid_elements;h||(h="-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br,del");var g=new n({valid_elements:h,valid_children:"-li[p]"});e.each(g.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attri
 butes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var v=new t({},g);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",d(n,n.attr("style"))),"span"==n.name&&n.parent&&!n.attributes.length&&n.unwrap()}),v.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel|MsoCaption)$/i.test(r)&&n.remove(),n.attr("class",null)}),v.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,r,i;t--;)if(n=e[t],r=n.attr("href"),i=n.attr("name"),r&&-1!=r.indexOf("#_msocom_"))n.remove();else if(r&&0===r.indexOf("file://")&&(r=r.split("#")[1],r&&(r="#"+r)),r||i){if(i&&!/^_
 ?(?:toc|edn|ftn)/i.test(i)){n.unwrap();continue}n.attr({href:r,name:i})}else n.unwrap()});var y=v.parse(f);u(y),c.content=new r({},g).serialize(y)}})}return s.isWordContent=a,s}),r(y,[p,c,h,l],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+o.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function s(e){if(n.isWordContent(e))return e;var t=i.settings.paste_webkit_styles;if(i.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&
 amp;&(t=t.split(/[, ]/)),t){var r=i.dom,o=i.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,i,a){var s=r.parseStyle(i,"span"),l={};if("none"===t)return n+a;for(var c=0;c<t.length;c++){var u=s[t[c]],d=r.getStyle(o,t[c],!0);/color/.test(t[c])&&(u=r.toHex(u),d=r.toHex(d)),d!=u&&(l[t[c]]=u)}return l=r.serializeStyle(l,"span"),l?n+' style="'+l+'"'+a:n+a})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return t+' style="'+n+'"'+r})}e.webkit&&o(s),e.ie&&o(a)}}),r(b,[C,f,h,y],function(e,t,n,r){var i;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),i||(e.wind
 owManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),i=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new r(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()
 }),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,h])}(this);
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginstextcolorpluginjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.js     2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.js        2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -12,8 +12,25 @@
</span><span class="cx"> /*eslint consistent-this:0 */
</span><span class="cx"> 
</span><span class="cx"> tinymce.PluginManager.add('textcolor', function(editor) {
</span><del>-       var VK = tinymce.util.VK;
</del><ins>+        var cols, rows;
</ins><span class="cx"> 
</span><ins>+       rows = editor.settings.textcolor_rows || 5;
+       cols = editor.settings.textcolor_cols || 8;
+
+       function getCurrentColor(format) {
+               var color;
+
+               editor.dom.getParents(editor.selection.getStart(), function(elm) {
+                       var value;
+
+                       if ((value = elm.style[format == 'forecolor' ? 'color' : 'background-color'])) {
+                               color = value;
+                       }
+               });
+
+               return color;
+       }
+
</ins><span class="cx">   function mapColors() {
</span><span class="cx">          var i, colors = [], colorMap;
</span><span class="cx"> 
</span><span class="lines">@@ -49,21 +66,20 @@
</span><span class="cx">                  "00FFFF", "Aqua",
</span><span class="cx">                  "00CCFF", "Sky blue",
</span><span class="cx">                  "993366", "Red violet",
</span><del>-                       "C0C0C0", "Silver",
</del><ins>+                        "FFFFFF", "White",
</ins><span class="cx">                   "FF99CC", "Pink",
</span><span class="cx">                  "FFCC99", "Peach",
</span><span class="cx">                  "FFFF99", "Light yellow",
</span><span class="cx">                  "CCFFCC", "Pale green",
</span><span class="cx">                  "CCFFFF", "Pale cyan",
</span><span class="cx">                  "99CCFF", "Light sky blue",
</span><del>-                       "CC99FF", "Plum",
-                       "FFFFFF", "White"
</del><ins>+                        "CC99FF", "Plum"
</ins><span class="cx">           ];
</span><span class="cx"> 
</span><span class="cx">          for (i = 0; i < colorMap.length; i += 2) {
</span><span class="cx">                  colors.push({
</span><span class="cx">                          text: colorMap[i + 1],
</span><del>-                               color: colorMap[i]
</del><ins>+                                color: '#' + colorMap[i]
</ins><span class="cx">                   });
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="lines">@@ -71,14 +87,33 @@
</span><span class="cx">  }
</span><span class="cx"> 
</span><span class="cx">  function renderColorPicker() {
</span><del>-               var ctrl = this, colors, color, html, last, rows, cols, x, y, i;
</del><ins>+                var ctrl = this, colors, color, html, last, x, y, i, id = ctrl._id, count = 0;
</ins><span class="cx"> 
</span><ins>+               function getColorCellHtml(color, title) {
+                       var isNoColor = color == 'transparent';
+
+                       return (
+                               '<td class="mce-grid-cell' + (isNoColor ? ' mce-colorbtn-trans' : '') + '">' +
+                                       '<div id="' + id + '-' + (count++) + '"' +
+                                               ' data-mce-color="' + (color ? color : '') + '"' +
+                                               ' role="option"' +
+                                               ' tabIndex="-1"' +
+                                               ' style="' + (color ? 'background-color: ' + color : '') + '"' +
+                                               ' title="' + tinymce.translate(title) + '">' +
+                                               (isNoColor ? '&#215;' : '') +
+                                       '</div>' +
+                               '</td>'
+                       );
+               }
+
</ins><span class="cx">           colors = mapColors();
</span><ins>+               colors.push({
+                       text: tinymce.translate("No color"),
+                       color: "transparent"
+               });
</ins><span class="cx"> 
</span><span class="cx">          html = '<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>';
</span><span class="cx">          last = colors.length - 1;
</span><del>-               rows = editor.settings.textcolor_rows || 5;
-               cols = editor.settings.textcolor_cols || 8;
</del><span class="cx"> 
</span><span class="cx">          for (y = 0; y < rows; y++) {
</span><span class="cx">                  html += '<tr>';
</span><span class="lines">@@ -90,44 +125,32 @@
</span><span class="cx">                                  html += '<td></td>';
</span><span class="cx">                          } else {
</span><span class="cx">                                  color = colors[i];
</span><del>-                                       html += (
-                                               '<td>' +
-                                                       '<div id="' + ctrl._id + '-' + i + '"' +
-                                                               ' data-mce-color="' + color.color + '"' +
-                                                               ' role="option"' +
-                                                               ' tabIndex="-1"' +
-                                                               ' style="' + (color ? 'background-color: #' + color.color : '') + '"' +
-                                                               ' title="' + color.text + '">' +
-                                                       '</div>' +
-                                               '</td>'
-                                       );
</del><ins>+                                        html += getColorCellHtml(color.color, color.text);
</ins><span class="cx">                           }
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="cx">                  html += '</tr>';
</span><span class="cx">          }
</span><span class="cx"> 
</span><del>-               if (editor.settings.textcolor_enable_hex) {
-                       var hexIdN = last + 1;
-                       var hexInputColSpan = cols - 1;
</del><ins>+                if (editor.settings.color_picker_callback) {
</ins><span class="cx">                   html += (
</span><span class="cx">                          '<tr>' +
</span><del>-                                       '<td>' +
-                                               '<div id="' + ctrl._id + '-' + hexIdN + '"' +
-                                                       'data-mce-color=""' +
-                                                       'style="background-color: #FFFFFF"' +
-                                                       'data-mce-hex-picker="true"' +
-                                                       'role="option" ' +
-                                                       '>' +
</del><ins>+                                        '<td colspan="' + cols + '" class="mce-custom-color-btn">' +
+                                               '<div id="' + id + '-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" ' +
+                                                       'role="button" tabindex="-1" aria-labelledby="' + id + '-c" style="width: 100%">' +
+                                                       '<button type="button" role="presentation" tabindex="-1">' + tinymce.translate('Custom...') + '</button>' +
</ins><span class="cx">                                           '</div>' +
</span><span class="cx">                                  '</td>' +
</span><del>-                                       '<td colspan="' + hexInputColSpan + '">' +
-                                               '# <input type="text" class="mce-textcolor-hexpicker"' +
-                                               'role="textbox" name="mce-hexcolorpicker"' +
-                                               'id="' + ctrl._id + '-hexcolorpicker" maxlength="6" >' +
-                                       '</td>' +
</del><span class="cx">                           '</tr>'
</span><span class="cx">                  );
</span><ins>+
+                       html += '<tr>';
+
+                       for (x = 0; x < cols; x++) {
+                               html += getColorCellHtml('', 'Custom color');
+                       }
+
+                       html += '</tr>';
</ins><span class="cx">           }
</span><span class="cx"> 
</span><span class="cx">          html += '</tbody></table>';
</span><span class="lines">@@ -135,134 +158,101 @@
</span><span class="cx">          return html;
</span><span class="cx">  }
</span><span class="cx"> 
</span><ins>+       function applyFormat(format, value) {
+               editor.focus();
+               editor.formatter.apply(format, {value: value});
+               editor.nodeChanged();
+       }
+
+       function removeFormat(format) {
+               editor.focus();
+               editor.formatter.remove(format, {value: null}, null, true);
+               editor.nodeChanged();
+       }
+
</ins><span class="cx">   function onPanelClick(e) {
</span><span class="cx">          var buttonCtrl = this.parent(), value;
</span><del>-               
-               if (e.target.getAttribute('disabled')) {
-                       return;
-               }
-               if ((value = e.target.getAttribute('data-mce-color'))) {
-                       if (this.lastId) {
-                               document.getElementById(this.lastId).setAttribute('aria-selected', false);
-                       }
</del><span class="cx"> 
</span><del>-                       e.target.setAttribute('aria-selected', true);
-                       this.lastId = e.target.id;
-
</del><ins>+                function selectColor(value) {
</ins><span class="cx">                   buttonCtrl.hidePanel();
</span><del>-                       value = '#' + value;
</del><span class="cx">                   buttonCtrl.color(value);
</span><del>-                       editor.execCommand(buttonCtrl.settings.selectcmd, false, value);
</del><ins>+                        applyFormat(buttonCtrl.settings.format, value);
</ins><span class="cx">           }
</span><del>-       }
</del><span class="cx"> 
</span><del>-       function onButtonClick() {
-               var self = this;
-
-               if (self._color) {
-                       editor.execCommand(self.settings.selectcmd, false, self._color);
</del><ins>+                function setDivColor(div, value) {
+                       div.style.background = value;
+                       div.setAttribute('data-mce-color', value);
</ins><span class="cx">           }
</span><del>-       }
</del><span class="cx"> 
</span><del>-       /**
-        * isValidHex checks if the provided string is valid hex color string
-        *
-        * @param  {string}   hexString 3 or 6 chars string representing a color.
-        * @return {Boolean}  [true]  the string is valid hex color
-        *                    [false] the string is not valid hex color        
-        */
-       function isValidHex(hexString) {
-               return /(^[0-9A-F]{3,6}$)/i.test(hexString);
-       }
</del><ins>+                if (tinymce.DOM.getParent(e.target, '.mce-custom-color-btn')) {
+                       buttonCtrl.hidePanel();
</ins><span class="cx"> 
</span><del>-       /**
-        * isSpecialStroke checks if the keyCode is currently a special one:
-        *  backspace, delete, arrow keys (left/right)
-        *  or if it's a special ctrl+x/c/v
-        *
-        * @param  {string}  keyCode 
-        * @return {Boolean}  
-        */
-       function isSpecialStroke(e) {
-               var keyCode = e.keyCode;
-               // Allow delete and backspace
-               if (keyCode === VK.BACKSPACE || keyCode === VK.DELETE ) {
-                       return true;
-               }
</del><ins>+                        editor.settings.color_picker_callback.call(editor, function(value) {
+                               var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];
+                               var customColorCells, div, i;
</ins><span class="cx"> 
</span><del>-               // Allow arrow movements
-               if (keyCode === VK.LEFT || keyCode === VK.RIGHT) {
-                       return true;
-               }
</del><ins>+                                customColorCells = tinymce.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function(elm) {
+                                       return elm.firstChild;
+                               });
</ins><span class="cx"> 
</span><del>-               // Allow CTRL/CMD + C/V/X
-               if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) {
-                       return true;
-               }
</del><ins>+                                for (i = 0; i < customColorCells.length; i++) {
+                                       div = customColorCells[i];
+                                       if (!div.getAttribute('data-mce-color')) {
+                                               break;
+                                       }
+                               }
</ins><span class="cx"> 
</span><del>-               return false;
-       }
</del><ins>+                                // Shift colors to the right
+                               // TODO: Might need to be the left on RTL
+                               if (i == cols) {
+                                       for (i = 0; i < cols - 1; i++) {
+                                               setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));
+                                       }
+                               }
</ins><span class="cx"> 
</span><del>-       function initHexPicker(e) {
-               if (!editor.settings.textcolor_enable_hex) {
-                       return;
</del><ins>+                                setDivColor(div, value);
+                               selectColor(value);
+                       }, getCurrentColor(buttonCtrl.settings.format));
</ins><span class="cx">           }
</span><span class="cx"> 
</span><del>-               var wrapper = document.querySelector('#' + e.target._id);
-               var input = wrapper.querySelector('[name="mce-hexcolorpicker"]');
-               var hexcolorDiv = wrapper.querySelector('[data-mce-hex-picker]');
-               var inputEvent = 'input';
</del><ins>+                value = e.target.getAttribute('data-mce-color');
+               if (value) {
+                       if (this.lastId) {
+                               document.getElementById(this.lastId).setAttribute('aria-selected', false);
+                       }
</ins><span class="cx"> 
</span><del>-               editor.dom.events.bind(input, 'keydown', function(e){
-                       var keyCode = e.keyCode;
</del><ins>+                        e.target.setAttribute('aria-selected', true);
+                       this.lastId = e.target.id;
</ins><span class="cx"> 
</span><del>-                       if (isSpecialStroke(e)) {
</del><ins>+                        if (value == 'transparent') {
+                               removeFormat(buttonCtrl.settings.format);
+                               buttonCtrl.hidePanel();
</ins><span class="cx">                           return;
</span><span class="cx">                  }
</span><span class="cx"> 
</span><del>-                       // Look for anything which is not A-Z or 0-9 and it is not a special char.
-                       if (!((keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 70) || (keyCode >= 96 && keyCode <= 105)) ) {
-                               e.preventDefault();
-                       }
</del><ins>+                        selectColor(value);
+               } else if (value !== null) {
+                       buttonCtrl.hidePanel();
+               }
+       }
</ins><span class="cx"> 
</span><del>-                       // On Enter, take it like a click on the hexcolorDiv
-                       if ( (keyCode === VK.ENTER && isValidHex(input.value) ) ) {
-                               hexcolorDiv.click();
-                       }
</del><ins>+        function onButtonClick() {
+               var self = this;
</ins><span class="cx"> 
</span><del>-               });
-
-               // If IE8 we can't use the input event, so we have to
-               // listen for keypress and paste events.
-               // In IE9 the input implementation is buggy so
-               // we use the same events as we'd like on IE8
-               if (tinymce.Env.ie && tinymce.Env.ie <= 9) {
-                       inputEvent = 'keypress paste blur keydown keyup propertychange';
</del><ins>+                if (self._color) {
+                       applyFormat(self.settings.format, self._color);
</ins><span class="cx">           }
</span><del>-               
-               editor.dom.events.bind(input, inputEvent, function(){
-                       if (isValidHex(input.value)) {
-                               hexcolorDiv.setAttribute('data-mce-color', input.value);
-                               hexcolorDiv.setAttribute('style', 'background-color:#' + input.value);
-                               hexcolorDiv.removeAttribute('disabled');
-                       } else {
-                               hexcolorDiv.setAttribute('disabled', 'disabled');
-                       }
-                       
-               });
-
</del><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">  editor.addButton('forecolor', {
</span><span class="cx">          type: 'colorbutton',
</span><span class="cx">          tooltip: 'Text color',
</span><del>-               selectcmd: 'ForeColor',
</del><ins>+                format: 'forecolor',
</ins><span class="cx">           panel: {
</span><span class="cx">                  role: 'application',
</span><span class="cx">                  ariaRemember: true,
</span><span class="cx">                  html: renderColorPicker,
</span><del>-                       onclick: onPanelClick,
-                       onPostRender: initHexPicker
</del><ins>+                        onclick: onPanelClick
</ins><span class="cx">           },
</span><span class="cx">          onclick: onButtonClick
</span><span class="cx">  });
</span><span class="lines">@@ -270,13 +260,12 @@
</span><span class="cx">  editor.addButton('backcolor', {
</span><span class="cx">          type: 'colorbutton',
</span><span class="cx">          tooltip: 'Background color',
</span><del>-               selectcmd: 'HiliteColor',
</del><ins>+                format: 'hilitecolor',
</ins><span class="cx">           panel: {
</span><span class="cx">                  role: 'application',
</span><span class="cx">                  ariaRemember: true,
</span><span class="cx">                  html: renderColorPicker,
</span><del>-                       onclick: onPanelClick,
-                       onPostRender: initHexPicker
</del><ins>+                        onclick: onPanelClick
</ins><span class="cx">           },
</span><span class="cx">          onclick: onButtonClick
</span><span class="cx">  });
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcepluginstextcolorpluginminjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js 2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js    2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1 +1 @@
</span><del>-tinymce.PluginManager.add("textcolor",function(e){function t(){var t,o,r=[];for(o=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","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 blu
 e","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t<o.length;t+=2)r.push({text:o[t+1],color:o[t]});return r}function o(){var o,r,l,c,i,a,n,d,s,u=this;for(o=t(),l='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',c=o.length-1,i=e.settin
 gs.textcolor_rows||5,a=e.settings.textcolor_cols||8,d=0;i>d;d++){for(l+="<tr>",n=0;a>n;n++)s=d*a+n,s>c?l+="<td></td>":(r=o[s],l+='<td><div id="'+u._id+"-"+s+'" data-mce-color="'+r.color+'" role="option" tabIndex="-1" style="'+(r?"background-color: #"+r.color:"")+'" title="'+r.text+'"></div></td>');l+="</tr>"}if(e.settings.textcolor_enable_hex){var F=c+1,m=a-1;l+='<tr><td><div id="'+u._id+"-"+F+'"data-mce-color=""style="background-color: #FFFFFF"data-mce-hex-picker="true"role="option" ></div></td><td colspan="'+m+'"># <input type="text" class="mce-textcolor-hexpicker"role="textbox" name="mce-hexcolorpicker"id="'+u._id+'-hexcolorpicker" maxlength="6&
 quot; ></td></tr>'}return l+="</tbody></table>"}function r(t){var o,r=this.parent();t.target.getAttribute("disabled")||(o=t.target.getAttribute("data-mce-color"))&&(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,r.hidePanel(),o="#"+o,r.color(o),e.execCommand(r.settings.selectcmd,!1,o))}function l(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}function c(e){return/(^[0-9A-F]{3,6}$)/i.test(e)}function i(e){var t=e.keyCode;return t===n.BACKSPACE||t===n.DELETE?!0:t===n.LEFT||t===n.RIGHT?!0:(tinymce.isMac?e.metaKey:e.ctrlKey)&&(67==t||88==t||86==t)?!0:!1}function a(t){if(e.settings.textcolor_enable_hex){var o=document.querySelector("#"+t.target._id),r=o.querySelector('[name="mce-hexcolorpicker"]'),l=o.querySelector("[data-
 mce-hex-picker]"),a="input";e.dom.events.bind(r,"keydown",function(e){var t=e.keyCode;i(e)||(t>=48&&57>=t||t>=65&&70>=t||t>=96&&105>=t||e.preventDefault(),t===n.ENTER&&c(r.value)&&l.click())}),tinymce.Env.ie&&tinymce.Env.ie<=9&&(a="keypress paste blur keydown keyup propertychange"),e.dom.events.bind(r,a,function(){c(r.value)?(l.setAttribute("data-mce-color",r.value),l.setAttribute("style","background-color:#"+r.value),l.removeAttribute("disabled")):l.setAttribute("disabled","disabled")})}}var n=tinymce.util.VK;e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r,onPostRender:a},onclick:l}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Backgro
 und color",selectcmd:"HiliteColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r,onPostRender:a},onclick:l})});
</del><span class="cx">\ No newline at end of file
</span><ins>+tinymce.PluginManager.add("textcolor",function(t){function e(e){var o;return t.dom.getParents(t.selection.getStart(),function(t){var r;(r=t.style["forecolor"==e?"color":"background-color"])&&(o=r)}),o}function o(){var e,o,r=[];for(o=t.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","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","FF
 9900","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","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],e=0;e<o.length;e+=2)r.push({text:o[e+1],color:"#"+o[e]});return r}function r(){function e(t,e){var o="transparent&
 quot;==t;return'<td class="mce-grid-cell'+(o?" mce-colorbtn-trans":"")+'"><div id="'+m+"-"+F++ +'" data-mce-color="'+(t?t:"")+'" role="option" tabIndex="-1" style="'+(t?"background-color: "+t:"")+'" title="'+tinymce.translate(e)+'">'+(o?"&#215;":"")+"</div></td>"}var r,l,a,n,c,d,u,g=this,m=g._id,F=0;for(r=o(),r.push({text:tinymce.translate("No color"),color:"transparent"}),a='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',n=r.length-1,d=0;s>d;d++){for(a+="<tr>",c=0;i>c;c++)u=d*i+c,u>n?a+="<td></td>":(l=r[u],a+=e(l.color,l.text));a+="</tr>"}if(t.settings.color_picker_callback){for(a+='<tr><td colspan="'+i+'"
  class="mce-custom-color-btn"><div id="'+m+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+m+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+tinymce.translate("Custom...")+"</button></div></td></tr>",a+="<tr>",c=0;i>c;c++)a+=e("","Custom color");a+="</tr>"}return a+="</tbody></table>"}function l(e,o){t.focus(),t.formatter.apply(e,{value:o}),t.nodeChanged()}function a(e){t.focus(),t.formatter.remove(e,{value:null},null,!0),t.nodeChanged()}function n(o){function r(t){s.hidePanel(),s.color(t),l(s.settings.format,t)}function n(t,e){t.style.background=e,t.setAttribute("data-mce-color",e)}var c,s=this.parent();if(tinymce.DOM.getParent(o.target,".mce-c
 ustom-color-btn")&&(s.hidePanel(),t.settings.color_picker_callback.call(t,function(t){var e,o,l,a=s.panel.getEl().getElementsByTagName("table")[0];for(e=tinymce.map(a.rows[a.rows.length-1].childNodes,function(t){return t.firstChild}),l=0;l<e.length&&(o=e[l],o.getAttribute("data-mce-color"));l++);if(l==i)for(l=0;i-1>l;l++)n(e[l],e[l+1].getAttribute("data-mce-color"));n(o,t),r(t)},e(s.settings.format))),c=o.target.getAttribute("data-mce-color")){if(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),o.target.setAttribute("aria-selected",!0),this.lastId=o.target.id,"transparent"==c)return a(s.settings.format),void s.hidePanel();r(c)}else null!==c&&s.hidePanel()}function c(){var t=this;t._color&&l(t.settings.format,t._color)}var i,s;s=t.settings.textcolor_rows||5,i=t.settings.textcolor_cols||8,t.addButton("forecolor",{type:&quo
 t;colorbutton",tooltip:"Text color",format:"forecolor",panel:{role:"application",ariaRemember:!0,html:r,onclick:n},onclick:c}),t.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{role:"application",ariaRemember:!0,html:r,onclick:n},onclick:c})});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayskinie7mincss"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css        2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css   2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1 +1 @@
</span><del>-.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin
 :0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:focus{border-color:#a1a1a1}.mce-grid td div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transpare
 nt}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input.mce-textcolor-hexpicker{border:1px solid #d6d6d6;margin:2px;height:12px;font-size:11px}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0
 .6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px 
 rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:r
 gba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0,
  0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window ifram
 e{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:
 0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-styl
 e:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(25
 5, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #c
 cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inse
 t 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*li
 ne-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077
 b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:
 progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px
  solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radi
 us:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus 
 i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px sol
 id transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-
 combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-borde
 r-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{c
 olor:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;
 text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{dis
 play:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-activ
 e:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-r
 tl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-su
 b-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3
 px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);di
 splay:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('f
 onts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.
 currentStyle['-ie7-icon'].substr(1, 1) + '&nbsp;')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015
 "}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie
 7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB}
</del><span class="cx">\ No newline at end of file
</span><ins>+.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;p
 adding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0px;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#a1a1a1}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:sepa
 rate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb
 {position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{pos
 ition:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left
 :50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px r
 gba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .m
 ce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-sh
 adow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-ri
 ght-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rg
 ba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-
 linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-sha
 dow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.
 05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #0
 03cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:l
 inear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:
 0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-r
 ight:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d
 9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;
 *zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-color
 button button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-colorpicker{position:rel
 ative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selecto
 r1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border
 :0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:p
 re-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce
 -menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:
 #adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.
 mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 
 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-bloc
 k;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-sma
 ll .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1
 px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{fo
 nt-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom']
  = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + '&nbsp;')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce
 -i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:&quot
 ;\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB}
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymceskinslightgrayskinmincss"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css    2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css       2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1 +1 @@
</span><del>-.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin
 :0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:focus{border-color:#a1a1a1}.mce-grid td div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transpare
 nt}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input.mce-textcolor-hexpicker{border:1px solid #d6d6d6;margin:2px;height:12px;font-size:11px}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0
 .6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px 
 rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:r
 gba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0,
  0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window ifram
 e{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:
 0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-styl
 e:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(25
 5, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #c
 cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inse
 t 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*li
 ne-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077
 b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:
 progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px
  solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radi
 us:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus 
 i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px sol
 id transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-
 combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-borde
 r-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{c
 olor:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;
 text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{dis
 play:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-activ
 e:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-r
 tl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-su
 b-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3
 px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);di
 splay:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('f
 onts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:
 before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014&qu
 ot;}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-rest
 oredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb}
</del><span class="cx">\ No newline at end of file
</span><ins>+.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;p
 adding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0px;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#a1a1a1}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:sepa
 rate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb
 {position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{pos
 ition:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left
 :50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px r
 gba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .m
 ce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-sh
 adow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-ri
 ght-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rg
 ba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-
 linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-sha
 dow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.
 05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #0
 03cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:l
 inear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:
 0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-r
 ight:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d
 9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;
 *zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-color
 button button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-colorpicker{position:rel
 ative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selecto
 r1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border
 :0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:p
 re-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce
 -menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:
 #adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.
 mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 
 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-bloc
 k;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-sma
 ll .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1
 px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{fo
 nt-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tin
 ymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image
 :before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content
 :"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb}
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcethemesmodernthemejs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/themes/modern/theme.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/themes/modern/theme.js  2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/themes/modern/theme.js     2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -342,13 +342,13 @@
</span><span class="cx">                  width = Math.max(settings.min_width || 100, width);
</span><span class="cx">                  width = Math.min(settings.max_width || 0xFFFF, width);
</span><span class="cx"> 
</span><del>-                       DOM.css(containerElm, 'width', width + (containerSize.width - iframeSize.width));
-                       DOM.css(iframeElm, 'width', width);
</del><ins>+                        DOM.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));
+                       DOM.setStyle(iframeElm, 'width', width);
</ins><span class="cx">           }
</span><span class="cx"> 
</span><span class="cx">          height = Math.max(settings.min_height || 100, height);
</span><span class="cx">          height = Math.min(settings.max_height || 0xFFFF, height);
</span><del>-               DOM.css(iframeElm, 'height', height);
</del><ins>+                DOM.setStyle(iframeElm, 'height', height);
</ins><span class="cx"> 
</span><span class="cx">          editor.fire('ResizeEditor');
</span><span class="cx">  }
</span><span class="lines">@@ -383,7 +383,7 @@
</span><span class="cx">                                  deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);
</span><span class="cx">                          }
</span><span class="cx"> 
</span><del>-                               panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl']).moveBy(deltaX, deltaY);
</del><ins>+                                panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl', 'tr-br']).moveBy(deltaX, deltaY);
</ins><span class="cx">                   }
</span><span class="cx">          }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcethemesmodernthememinjs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js      2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js 2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1 +1 @@
</span><del>-tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_
 size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").sp
 lit(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l<r.length;l++)"|"==r[l].text&&(0===l||l==r.length-1)&&r.splice(l,1);if(n.menu=r,!n.menu.length)return null}return n}var n,o=[],r=[];if(u.menu)for(n in u.menu)r.push(n);else for(n in h)r.push(n);for(var a="string"==typeof u.menubar?u.menubar.split(/[ ,]/):r,s=0;s<a.length;s++){var l=a[s];l=i(l),l&&o.push(l)}return o}function n(t){function i(e){var i=t.find(e)[0];i&&i.focus(!0)}e.shortcuts.add("Alt+F9","",function(){i("menubar")}),e.shortcuts.add("Alt+F10","",fun
 ction(){i("toolbar")}),e.shortcuts.add("Alt+F11","",function(){i("elementpath")}),t.on("cancel",function(){e.focus()})}function o(t,i){function n(e){return{width:e.clientWidth,height:e.clientHeight}}var o,r,a,s;o=e.getContainer(),r=e.getContentAreaContainer().firstChild,a=n(o),s=n(r),null!==t&&(t=Math.max(u.min_width||100,t),t=Math.min(u.max_width||65535,t),m.css(o,"width",t+(a.width-s.width)),m.css(r,"width",t)),i=Math.max(u.min_height||100,i),i=Math.min(u.max_height||65535,i),m.css(r,"height",i),e.fire("ResizeEditor")}function r(t,i){var n=e.getContentAreaContainer();l.resizeTo(n.clientWidth+t,n.clientHeight+i)}function a(o){function r(){if(h&&h.moveRel&&h.visible()&&!h._fixed){var t=e.selection.getScrollContainer(),i=e.getBody(),n=0,o=0;if(t){var r=m.getPos(i),a=m.getPos(t);n=Math.max(0,a.x-r.x),o=Math.max(0,a.y-r.y)}h.fixed(!1).moveRel(i,e.rtl?["tr-br&qu
 ot;,"br-tr"]:["tl-bl","bl-tl"]).moveBy(n,o)}}function a(){h&&(h.show(),r(),m.addClass(e.getBody(),"mce-edit-focus"))}function s(){h&&(h.hide(),m.removeClass(e.getBody(),"mce-edit-focus"))}function d(){return h?void(h.visible()||a()):(h=l.panel=c.create({type:f?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!f,border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t()]}),e.fire("BeforeRenderUI"),h.renderTo(f||document.body).reflow(),n(h),a(),e.on("nodeChange",r),e.on("activate",a),e.on("deactivate",s),void e.nodeChanged())}var h,f;return u.fixed_toolbar_container&&(f=m.select(u.fixed_toolbar_container)[0]),u.content_editable=!0,e.on("focus",funct
 ion(){o.skinUiCss?tinymce.DOM.styleSheetLoader.load(o.skinUiCss,d,d):d()}),e.on("blur hide",s),e.on("remove",function(){h&&(h.remove(),h=null)}),o.skinUiCss&&tinymce.DOM.styleSheetLoader.load(o.skinUiCss),{}}function s(r){var a,s,d;return r.skinUiCss&&tinymce.DOM.loadCSS(r.skinUiCss),a=l.panel=c.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t(),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),u.resize!==!1&&(s={type:"resizehandle",direction:u.resize,onResizeStart:function(){var t=e.getContentAreaContainer().firstChild;d={width:t.clientWidth,height:t.clientHeight}},onResize:function(e){"both"==u.resize?o(d.width
 +e.deltaX,d.height+e.deltaY):o(null,d.height+e.deltaY)}}),u.statusbar!==!1&&a.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath"},s]}),u.readonly&&a.find("*").disabled(!0),e.fire("BeforeRenderUI"),a.renderBefore(r.targetNode).reflow(),u.width&&tinymce.DOM.setStyle(a.getEl(),"width",u.width),e.on("remove",function(){a.remove(),a=null}),n(a),{iframeContainer:a.find("#iframe")[0].getEl(),editorContainer:a.getEl()}}var l=this,u=e.settings,c=tinymce.ui.Factory,d=tinymce.each,m=tinymce.DOM,h={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format
 ",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},f="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";l.renderUI=function(t){var i=u.skin!==!1?u.skin||"lightgray":!1;if(i){var n=u.skin_url;n=n?e.documentBaseURI.toAbsolute(n):tinymce.baseURL+"/skins/"+i,t.skinUiCss=tinymce.Env.documentMode<=7?n+"/skin.ie7.min.css":n+"/skin.min.css",e.contentCSS.push(n+"/content"+(e.inline?".inline":"")+".min.css")}return e.on("ProgressState",function(e){l.throbber=l.throbber||new tinymce.ui.Throbber(l.panel.getEl("body")),e.state?l.throbber.show(e.time):l.throbber.hide()}),u.inline?a(t):s(t)},l.resizeTo=o,l.resizeBy=r});
</del><span class="cx">\ No newline at end of file
</span><ins>+tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_
 size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").sp
 lit(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l<r.length;l++)"|"==r[l].text&&(0===l||l==r.length-1)&&r.splice(l,1);if(n.menu=r,!n.menu.length)return null}return n}var n,o=[],r=[];if(u.menu)for(n in u.menu)r.push(n);else for(n in h)r.push(n);for(var a="string"==typeof u.menubar?u.menubar.split(/[ ,]/):r,s=0;s<a.length;s++){var l=a[s];l=i(l),l&&o.push(l)}return o}function n(t){function i(e){var i=t.find(e)[0];i&&i.focus(!0)}e.shortcuts.add("Alt+F9","",function(){i("menubar")}),e.shortcuts.add("Alt+F10","",fun
 ction(){i("toolbar")}),e.shortcuts.add("Alt+F11","",function(){i("elementpath")}),t.on("cancel",function(){e.focus()})}function o(t,i){function n(e){return{width:e.clientWidth,height:e.clientHeight}}var o,r,a,s;o=e.getContainer(),r=e.getContentAreaContainer().firstChild,a=n(o),s=n(r),null!==t&&(t=Math.max(u.min_width||100,t),t=Math.min(u.max_width||65535,t),m.setStyle(o,"width",t+(a.width-s.width)),m.setStyle(r,"width",t)),i=Math.max(u.min_height||100,i),i=Math.min(u.max_height||65535,i),m.setStyle(r,"height",i),e.fire("ResizeEditor")}function r(t,i){var n=e.getContentAreaContainer();l.resizeTo(n.clientWidth+t,n.clientHeight+i)}function a(o){function r(){if(h&&h.moveRel&&h.visible()&&!h._fixed){var t=e.selection.getScrollContainer(),i=e.getBody(),n=0,o=0;if(t){var r=m.getPos(i),a=m.getPos(t);n=Math.max(0,a.x-r.x),o=Math.max(0,a.y-r.y)}h.fixed(!1).moveRel(i,e.rtl?
 ["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(n,o)}}function a(){h&&(h.show(),r(),m.addClass(e.getBody(),"mce-edit-focus"))}function s(){h&&(h.hide(),m.removeClass(e.getBody(),"mce-edit-focus"))}function d(){return h?void(h.visible()||a()):(h=l.panel=c.create({type:f?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!f,border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t()]}),e.fire("BeforeRenderUI"),h.renderTo(f||document.body).reflow(),n(h),a(),e.on("nodeChange",r),e.on("activate",a),e.on("deactivate",s),void e.nodeChanged())}var h,f;return u.fixed_toolbar_container&&(f=m.select(u.fixed_toolbar_container)[0]),u.content_editabl
 e=!0,e.on("focus",function(){o.skinUiCss?tinymce.DOM.styleSheetLoader.load(o.skinUiCss,d,d):d()}),e.on("blur hide",s),e.on("remove",function(){h&&(h.remove(),h=null)}),o.skinUiCss&&tinymce.DOM.styleSheetLoader.load(o.skinUiCss),{}}function s(r){var a,s,d;return r.skinUiCss&&tinymce.DOM.loadCSS(r.skinUiCss),a=l.panel=c.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t(),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),u.resize!==!1&&(s={type:"resizehandle",direction:u.resize,onResizeStart:function(){var t=e.getContentAreaContainer().firstChild;d={width:t.clientWidth,height:t.clientHeight}},onResize:function(e){&qu
 ot;both"==u.resize?o(d.width+e.deltaX,d.height+e.deltaY):o(null,d.height+e.deltaY)}}),u.statusbar!==!1&&a.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath"},s]}),u.readonly&&a.find("*").disabled(!0),e.fire("BeforeRenderUI"),a.renderBefore(r.targetNode).reflow(),u.width&&tinymce.DOM.setStyle(a.getEl(),"width",u.width),e.on("remove",function(){a.remove(),a=null}),n(a),{iframeContainer:a.find("#iframe")[0].getEl(),editorContainer:a.getEl()}}var l=this,u=e.settings,c=tinymce.ui.Factory,d=tinymce.each,m=tinymce.DOM,h={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |&
 quot;},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},f="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";l.renderUI=function(t){var i=u.skin!==!1?u.skin||"lightgray":!1;if(i){var n=u.skin_url;n=n?e.documentBaseURI.toAbsolute(n):tinymce.baseURL+"/skins/"+i,t.skinUiCss=tinymce.Env.documentMode<=7?n+"/skin.ie7.min.css":n+"/skin.min.css",e.contentCSS.push(n+"/content"+(e.inline?".inline":"")+".min.css")}return e.on("ProgressState",function(e){l.throbber=l.throbber||new tinymce.ui.Throbber(l.panel.getEl("body")),e.state?l.throbber.show(e.time):l.throbber.hide()}),u.inline?a(t):s(t)},l.resizeTo=o,l.resizeBy=r});
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunksrcwpincludesjstinymcetinymcejs"></a>
<div class="modfile"><h4>Modified: trunk/src/wp-includes/js/tinymce/tinymce.js (29202 => 29203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/src/wp-includes/js/tinymce/tinymce.js      2014-07-17 00:49:11 UTC (rev 29202)
+++ trunk/src/wp-includes/js/tinymce/tinymce.js 2014-07-17 00:58:41 UTC (rev 29203)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-// 4.0.29 (2014-06-xx)
</del><ins>+// 4.1.2 (2014-07-15)
</ins><span class="cx"> 
</span><span class="cx"> /**
</span><span class="cx">  * Compiled inline version. (Library mode)
</span><span class="lines">@@ -662,24 +662,31 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /*jshint bitwise:false, expr:true, noempty:false, sub:true, eqnull:true, latedef:false, maxlen:255 */
</span><del>-/*eslint dot-notation:0, no-empty:0, no-cond-assign:0, no-unused-expressions:0, new-cap:0, no-nested-ternary:0, func-style:0, no-bitwise:0, max-len:0, brace-style:0 */
</del><ins>+/*eslint dot-notation:0, no-empty:0, no-cond-assign:0, no-unused-expressions:0, new-cap:0 */
+/*eslint no-nested-ternary:0, func-style:0, no-bitwise:0, max-len:0, brace-style:0, no-return-assign:0 */
</ins><span class="cx"> 
</span><del>-/*
- * Sizzle CSS Selector Engine
- *  Copyright, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
</del><ins>+/**
+ * Sizzle CSS Selector Engine v@VERSION
+ * http://sizzlejs.com/
+ *
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: @DATE
</ins><span class="cx">  */
</span><span class="cx"> define("tinymce/dom/Sizzle", [], function() {
</span><span class="cx"> var i,
</span><del>-       cachedruns,
</del><ins>+        support,
</ins><span class="cx">   Expr,
</span><span class="cx">  getText,
</span><span class="cx">  isXML,
</span><ins>+       tokenize,
</ins><span class="cx">   compile,
</span><ins>+       select,
</ins><span class="cx">   outermostContext,
</span><del>-       recompare,
</del><span class="cx">   sortInput,
</span><ins>+       hasDuplicate,
</ins><span class="cx"> 
</span><span class="cx">  // Local document vars
</span><span class="cx">  setDocument,
</span><span class="lines">@@ -694,20 +701,24 @@
</span><span class="cx">  // Instance-specific data
</span><span class="cx">  expando = "sizzle" + -(new Date()),
</span><span class="cx">  preferredDoc = window.document,
</span><del>-       support = {},
</del><span class="cx">   dirruns = 0,
</span><span class="cx">  done = 0,
</span><span class="cx">  classCache = createCache(),
</span><span class="cx">  tokenCache = createCache(),
</span><span class="cx">  compilerCache = createCache(),
</span><del>-       hasDuplicate = false,
-       sortOrder = function() { return 0; },
</del><ins>+        sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+               }
+               return 0;
+       },
</ins><span class="cx"> 
</span><span class="cx">  // General-purpose constants
</span><span class="cx">  strundefined = typeof undefined,
</span><span class="cx">  MAX_NEGATIVE = 1 << 31,
</span><span class="cx"> 
</span><del>-       // Array methods
</del><ins>+        // Instance methods
+       hasOwn = ({}).hasOwnProperty,
</ins><span class="cx">   arr = [],
</span><span class="cx">  pop = arr.pop,
</span><span class="cx">  push_native = arr.push,
</span><span class="lines">@@ -725,78 +736,83 @@
</span><span class="cx">          return -1;
</span><span class="cx">  },
</span><span class="cx"> 
</span><ins>+       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
</ins><span class="cx"> 
</span><span class="cx">  // Regular expressions
</span><span class="cx"> 
</span><del>-       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
</del><ins>+        // http://www.w3.org/TR/css3-selectors/#whitespace
</ins><span class="cx">   whitespace = "[\\x20\\t\\r\\n\\f]",
</span><del>-       // http://www.w3.org/TR/css3-syntax/#characters
-       characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
</del><span class="cx"> 
</span><del>-       // Loosely modeled on CSS identifier characters
-       // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
-       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-       identifier = characterEncoding.replace( "w", "w#" ),
</del><ins>+        // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
</ins><span class="cx"> 
</span><del>-       // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
-       operators = "([*^$|!~]?=)",
-       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
-               "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
</del><ins>+        // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+               // Operator (capture 2)
+               "*([*^$|!~]?=)" + whitespace +
+               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+               "*\\]",
</ins><span class="cx"> 
</span><del>-       // Prefer arguments quoted,
-       //   then not containing pseudos/brackets,
-       //   then attribute selectors/non-parenthetical expressions,
-       //   then anything else
-       // These preferences are here to reduce the number of selectors
-       //   needing tokenize in the PSEUDO preFilter
-       pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
</del><ins>+        pseudos = ":(" + identifier + ")(?:\\((" +
+               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+               // 1. quoted (capture 3; capture 4 or capture 5)
+               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+               // 2. simple (capture 6)
+               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+               // 3. anything else (capture 2)
+               ".*" +
+               ")\\)|)",
</ins><span class="cx"> 
</span><span class="cx">  // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
</span><span class="cx">  rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
</span><span class="cx"> 
</span><span class="cx">  rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
</span><del>-       rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
</del><ins>+        rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
</ins><span class="cx">   rpseudo = new RegExp( pseudos ),
</span><span class="cx">  ridentifier = new RegExp( "^" + identifier + "$" ),
</span><span class="cx"> 
</span><span class="cx">  matchExpr = {
</span><del>-               "ID": new RegExp( "^#(" + characterEncoding + ")" ),
-               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
-               "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
-               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
</del><ins>+                "ID": new RegExp( "^#(" + identifier + ")" ),
+               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
</ins><span class="cx">           "ATTR": new RegExp( "^" + attributes ),
</span><span class="cx">          "PSEUDO": new RegExp( "^" + pseudos ),
</span><span class="cx">          "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
</span><span class="cx">                  "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
</span><span class="cx">                  "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
</span><ins>+               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
</ins><span class="cx">           // For use in libraries implementing .is()
</span><span class="cx">          // We use this for POS matching in `select`
</span><span class="cx">          "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
</span><span class="cx">                  whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
</span><span class="cx">  },
</span><span class="cx"> 
</span><del>-       rsibling = /[\x20\t\r\n\f]*[+~]/,
</del><ins>+        rinputs = /^(?:input|select|textarea|button)$/i,
+       rheader = /^h\d$/i,
</ins><span class="cx"> 
</span><del>-       rnative = /^[^{]+\{\s*\[native code/,
</del><ins>+        rnative = /^[^{]+\{\s*\[native \w/,
</ins><span class="cx"> 
</span><span class="cx">  // Easily-parseable/retrievable ID or TAG or CLASS selectors
</span><del>-       rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
</del><ins>+        rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
</ins><span class="cx"> 
</span><del>-       rinputs = /^(?:input|select|textarea|button)$/i,
-       rheader = /^h\d$/i,
-
</del><ins>+        rsibling = /[+~]/,
</ins><span class="cx">   rescape = /'|\\/g,
</span><del>-       rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
</del><span class="cx"> 
</span><span class="cx">  // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
</span><del>-       runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
-       funescape = function( _, escaped ) {
</del><ins>+        runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+       funescape = function( _, escaped, escapedWhitespace ) {
</ins><span class="cx">           var high = "0x" + escaped - 0x10000;
</span><span class="cx">          // NaN means non-codepoint
</span><del>-               return high !== high ?
</del><ins>+                // Support: Firefox<24
+               // Workaround erroneous numeric interpretation of +"0x"
+               return high !== high || escapedWhitespace ?
</ins><span class="cx">                   escaped :
</span><del>-                       // BMP codepoint
</del><span class="cx">                   high < 0 ?
</span><ins>+                               // BMP codepoint
</ins><span class="cx">                           String.fromCharCode( high + 0x10000 ) :
</span><span class="cx">                          // Supplemental Plane codepoint (surrogate pair)
</span><span class="cx">                          String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
</span><span class="lines">@@ -831,63 +847,6 @@
</span><span class="cx">  };
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/**
- * For feature detection
- * @param {Function} fn The function to test for native support
- */
-function isNative( fn ) {
-       return rnative.test( fn + "" );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- *     deleting the oldest entry
- */
-function createCache() {
-       var cache,
-               keys = [];
-
-       cache = function( key, value ) {
-               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
-               if ( keys.push( key += " " ) > Expr.cacheLength ) {
-                       // Only keep the most recent entries
-                       delete cache[ keys.shift() ];
-               }
-               cache[ key ] = value;
-               return value;
-       };
-
-       return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-       fn[ expando ] = true;
-       return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
-       var div = document.createElement("div");
-
-       try {
-               return !!fn( div );
-       } catch (e) {
-               return false;
-       } finally {
-               // release memory in IE
-               div = null;
-       }
-}
-
</del><span class="cx"> function Sizzle( selector, context, results, seed ) {
</span><span class="cx">  var match, elem, m, nodeType,
</span><span class="cx">          // QSA vars
</span><span class="lines">@@ -917,7 +876,7 @@
</span><span class="cx">                          if ( nodeType === 9 ) {
</span><span class="cx">                                  elem = context.getElementById( m );
</span><span class="cx">                                  // Check parentNode to catch when Blackberry 4.6 returns
</span><del>-                                       // nodes that are no longer in the document #6963
</del><ins>+                                        // nodes that are no longer in the document (jQuery #6963)
</ins><span class="cx">                                   if ( elem && elem.parentNode ) {
</span><span class="cx">                                          // Handle the case where IE, Opera, and Webkit return items
</span><span class="cx">                                          // by name instead of ID
</span><span class="lines">@@ -943,16 +902,15 @@
</span><span class="cx">                          return results;
</span><span class="cx"> 
</span><span class="cx">                  // Speed-up: Sizzle(".CLASS")
</span><del>-                       } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
</del><ins>+                        } else if ( (m = match[3]) && support.getElementsByClassName ) {
</ins><span class="cx">                           push.apply( results, context.getElementsByClassName( m ) );
</span><span class="cx">                          return results;
</span><span class="cx">                  }
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="cx">          // QSA path
</span><del>-               if ( support.qsa && !rbuggyQSA.test(selector) ) {
-                       old = true;
-                       nid = expando;
</del><ins>+                if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+                       nid = old = expando;
</ins><span class="cx">                   newContext = context;
</span><span class="cx">                  newSelector = nodeType === 9 && selector;
</span><span class="cx"> 
</span><span class="lines">@@ -974,7 +932,7 @@
</span><span class="cx">                          while ( i-- ) {
</span><span class="cx">                                  groups[i] = nid + toSelector( groups[i] );
</span><span class="cx">                          }
</span><del>-                               newContext = rsibling.test( selector ) && context.parentNode || context;
</del><ins>+                                newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
</ins><span class="cx">                           newSelector = groups.join(",");
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="lines">@@ -999,8 +957,158 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><del>- * Detect xml
</del><ins>+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *     deleting the oldest entry
+ */
+function createCache() {
+       var keys = [];
+
+       function cache( key, value ) {
+               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+               if ( keys.push( key + " " ) > Expr.cacheLength ) {
+                       // Only keep the most recent entries
+                       delete cache[ keys.shift() ];
+               }
+               return (cache[ key + " " ] = value);
+       }
+       return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+       fn[ expando ] = true;
+       return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+       var div = document.createElement("div");
+
+       try {
+               return !!fn( div );
+       } catch (e) {
+               return false;
+       } finally {
+               // Remove from its parent by default
+               if ( div.parentNode ) {
+                       div.parentNode.removeChild( div );
+               }
+               // release memory in IE
+               div = null;
+       }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+       var arr = attrs.split("|"),
+               i = attrs.length;
+
+       while ( i-- ) {
+               Expr.attrHandle[ arr[i] ] = handler;
+       }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+       var cur = b && a,
+               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+                       ( ~b.sourceIndex || MAX_NEGATIVE ) -
+                       ( ~a.sourceIndex || MAX_NEGATIVE );
+
+       // Use IE sourceIndex if available on both nodes
+       if ( diff ) {
+               return diff;
+       }
+
+       // Check if b follows a
+       if ( cur ) {
+               while ( (cur = cur.nextSibling) ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+               }
+       }
+
+       return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return name === "input" && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return (name === "input" || name === "button") && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+       return markFunction(function( argument ) {
+               argument = +argument;
+               return markFunction(function( seed, matches ) {
+                       var j,
+                               matchIndexes = fn( [], seed.length, argument ),
+                               i = matchIndexes.length;
+
+                       // Match elements found at the specified indexes
+                       while ( i-- ) {
+                               if ( seed[ (j = matchIndexes[i]) ] ) {
+                                       seed[j] = !(matches[j] = seed[j]);
+                               }
+                       }
+               });
+       });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+       return context && typeof context.getElementsByTagName !== strundefined && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
</ins><span class="cx">  * @param {Element|Object} elem An element or a document
</span><ins>+ * @returns {Boolean} True iff elem is a non-HTML XML node
</ins><span class="cx">  */
</span><span class="cx"> isXML = Sizzle.isXML = function( elem ) {
</span><span class="cx">  // documentElement is verified for cases where it doesn't yet exist
</span><span class="lines">@@ -1015,7 +1123,9 @@
</span><span class="cx">  * @returns {Object} Returns the current document
</span><span class="cx">  */
</span><span class="cx"> setDocument = Sizzle.setDocument = function( node ) {
</span><del>-       var doc = node ? node.ownerDocument || node : preferredDoc;
</del><ins>+        var hasCompare,
+               doc = node ? node.ownerDocument || node : preferredDoc,
+               parent = doc.defaultView;
</ins><span class="cx"> 
</span><span class="cx">  // If no document and documentElement is available, return
</span><span class="cx">  if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
</span><span class="lines">@@ -1029,90 +1139,62 @@
</span><span class="cx">  // Support tests
</span><span class="cx">  documentIsHTML = !isXML( doc );
</span><span class="cx"> 
</span><del>-       // Check if getElementsByTagName("*") returns only elements
-       support.getElementsByTagName = assert(function( div ) {
-               div.appendChild( doc.createComment("") );
-               return !div.getElementsByTagName("*").length;
-       });
</del><ins>+        // Support: IE>8
+       // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+       // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+       // IE6-8 do not support the defaultView property so parent will be undefined
+       if ( parent && parent !== parent.top ) {
+               // IE11 does not have attachEvent, so all must suffer
+               if ( parent.addEventListener ) {
+                       parent.addEventListener( "unload", function() {
+                               setDocument();
+                       }, false );
+               } else if ( parent.attachEvent ) {
+                       parent.attachEvent( "onunload", function() {
+                               setDocument();
+                       });
+               }
+       }
</ins><span class="cx"> 
</span><del>-       // Check if attributes should be retrieved by attribute nodes
</del><ins>+        /* Attributes
+       ---------------------------------------------------------------------- */
+
+       // Support: IE<8
+       // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
</ins><span class="cx">   support.attributes = assert(function( div ) {
</span><del>-               div.innerHTML = "<select></select>";
-               var type = typeof div.lastChild.getAttribute("multiple");
-               // IE8 returns a string for some attributes even when not present
-               return type !== "boolean" && type !== "string";
</del><ins>+                div.className = "i";
+               return !div.getAttribute("className");
</ins><span class="cx">   });
</span><span class="cx"> 
</span><del>-       // Check if getElementsByClassName can be trusted
-       support.getElementsByClassName = assert(function( div ) {
-               // Opera can't find a second classname (in 9.6)
-               div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
-               if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
-                       return false;
-               }
</del><ins>+        /* getElement(s)By*
+       ---------------------------------------------------------------------- */
</ins><span class="cx"> 
</span><del>-               // Safari 3.2 caches class attributes and doesn't catch changes
-               div.lastChild.className = "e";
-               return div.getElementsByClassName("e").length === 2;
</del><ins>+        // Check if getElementsByTagName("*") returns only elements
+       support.getElementsByTagName = assert(function( div ) {
+               div.appendChild( doc.createComment("") );
+               return !div.getElementsByTagName("*").length;
</ins><span class="cx">   });
</span><span class="cx"> 
</span><del>-       // Check if getElementsByName privileges form controls or returns elements by ID
-       // If so, assume (for broader support) that getElementById returns elements by name
-       support.getByName = assert(function( div ) {
-               // Inject content
-               div.id = expando + 0;
-               // Support: Windows 8 Native Apps
-               // Assigning innerHTML with "name" attributes throws uncatchable exceptions
-               // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx
-               div.appendChild( document.createElement("a") ).setAttribute( "name", expando );
-               div.appendChild( document.createElement("i") ).setAttribute( "name", expando );
-               docElem.appendChild( div );
</del><ins>+        // Support: IE<9
+       support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
</ins><span class="cx"> 
</span><del>-               // Test
-               var pass = doc.getElementsByName &&
-                       // buggy browsers will return fewer than the correct 2
-                       doc.getElementsByName( expando ).length === 2 +
-                       // buggy browsers will return more than the correct 0
-                       doc.getElementsByName( expando + 0 ).length;
-
-               // Cleanup
-               docElem.removeChild( div );
-
-               return pass;
</del><ins>+        // Support: IE<10
+       // Check if getElementById returns elements by name
+       // The broken getElementById methods don't pick up programatically-set names,
+       // so use a roundabout getElementsByName test
+       support.getById = assert(function( div ) {
+               docElem.appendChild( div ).id = expando;
+               return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
</ins><span class="cx">   });
</span><span class="cx"> 
</span><del>-       // Support: Webkit<537.32
-       // Detached nodes confoundingly follow *each other*
-       support.sortDetached = assert(function( div1 ) {
-               return div1.compareDocumentPosition &&
-                       // Should return 1, but Webkit returns 4 (following)
-                       (div1.compareDocumentPosition( document.createElement("div") ) & 1);
-       });
-
-       // IE6/7 return modified attributes
-       Expr.attrHandle = assert(function( div ) {
-               div.innerHTML = "<a href='#'></a>";
-               return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
-                       div.firstChild.getAttribute("href") === "#";
-       }) ?
-               {} :
-               {
-                       "href": function( elem ) {
-                               return elem.getAttribute( "href", 2 );
-                       },
-                       "type": function( elem ) {
-                               return elem.getAttribute("type");
-                       }
-               };
-
</del><span class="cx">   // ID find and filter
</span><del>-       if ( support.getByName ) {
</del><ins>+        if ( support.getById ) {
</ins><span class="cx">           Expr.find["ID"] = function( id, context ) {
</span><span class="cx">                  if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
</span><span class="cx">                          var m = context.getElementById( id );
</span><span class="cx">                          // Check parentNode to catch when Blackberry 4.6 returns
</span><span class="cx">                          // nodes that are no longer in the document #6963
</span><del>-                               return m && m.parentNode ? [m] : [];
</del><ins>+                                return m && m.parentNode ? [ m ] : [];
</ins><span class="cx">                   }
</span><span class="cx">          };
</span><span class="cx">          Expr.filter["ID"] = function( id ) {
</span><span class="lines">@@ -1122,17 +1204,10 @@
</span><span class="cx">                  };
</span><span class="cx">          };
</span><span class="cx">  } else {
</span><del>-               Expr.find["ID"] = function( id, context ) {
-                       if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
-                               var m = context.getElementById( id );
</del><ins>+                // Support: IE6/7
+               // getElementById is not reliable as a find shortcut
+               delete Expr.find["ID"];
</ins><span class="cx"> 
</span><del>-                               return m ?
-                                       m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
-                                               [m] :
-                                               undefined :
-                                       [];
-                       }
-               };
</del><span class="cx">           Expr.filter["ID"] =  function( id ) {
</span><span class="cx">                  var attrId = id.replace( runescape, funescape );
</span><span class="cx">                  return function( elem ) {
</span><span class="lines">@@ -1168,31 +1243,29 @@
</span><span class="cx">                  return results;
</span><span class="cx">          };
</span><span class="cx"> 
</span><del>-       // Name
-       Expr.find["NAME"] = support.getByName && function( tag, context ) {
-               if ( typeof context.getElementsByName !== strundefined ) {
-                       return context.getElementsByName( name );
-               }
-       };
-
</del><span class="cx">   // Class
</span><span class="cx">  Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
</span><del>-               if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
</del><ins>+                if ( documentIsHTML ) {
</ins><span class="cx">                   return context.getElementsByClassName( className );
</span><span class="cx">          }
</span><span class="cx">  };
</span><span class="cx"> 
</span><ins>+       /* QSA/matchesSelector
+       ---------------------------------------------------------------------- */
+
</ins><span class="cx">   // QSA and matchesSelector support
</span><span class="cx"> 
</span><span class="cx">  // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
</span><span class="cx">  rbuggyMatches = [];
</span><span class="cx"> 
</span><del>-       // qSa(:focus) reports false when true (Chrome 21),
-       // no need to also add to buggyMatches since matches checks buggyQSA
-       // A support test would require too much code (would include document ready)
-       rbuggyQSA = [ ":focus" ];
</del><ins>+        // qSa(:focus) reports false when true (Chrome 21)
+       // We allow this because of a bug in IE8/9 that throws an error
+       // whenever `document.activeElement` is accessed on an iframe
+       // So, we allow :focus to pass through QSA all the time to avoid the IE error
+       // See http://bugs.jquery.com/ticket/13378
+       rbuggyQSA = [];
</ins><span class="cx"> 
</span><del>-       if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
</del><ins>+        if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
</ins><span class="cx">           // Build QSA regex
</span><span class="cx">          // Regex strategy adopted from Diego Perini
</span><span class="cx">          assert(function( div ) {
</span><span class="lines">@@ -1201,11 +1274,20 @@
</span><span class="cx">                  // setting a boolean content attribute,
</span><span class="cx">                  // since its presence should be enough
</span><span class="cx">                  // http://bugs.jquery.com/ticket/12359
</span><del>-                       div.innerHTML = "<select><option selected=''></option></select>";
</del><ins>+                        div.innerHTML = "<select msallowcapture=''><option selected=''></option></select>";
</ins><span class="cx"> 
</span><del>-                       // IE8 - Some boolean attributes are not treated correctly
</del><ins>+                        // Support: IE8, Opera 11-12.16
+                       // Nothing should be selected when empty strings follow ^= or $= or *=
+                       // The test attribute must be unknown in Opera but "safe" for WinRT
+                       // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+                       if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+                       }
+
+                       // Support: IE8
+                       // Boolean attributes and "value" are not treated correctly
</ins><span class="cx">                   if ( !div.querySelectorAll("[selected]").length ) {
</span><del>-                               rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
</del><ins>+                                rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  // Webkit/Opera - :checked should return selected option elements
</span><span class="lines">@@ -1217,12 +1299,16 @@
</span><span class="cx">          });
</span><span class="cx"> 
</span><span class="cx">          assert(function( div ) {
</span><ins>+                       // Support: Windows 8 Native Apps
+                       // The type and name attributes are restricted during .innerHTML assignment
+                       var input = doc.createElement("input");
+                       input.setAttribute( "type", "hidden" );
+                       div.appendChild( input ).setAttribute( "name", "D" );
</ins><span class="cx"> 
</span><del>-                       // Opera 10-12/IE8 - ^= $= *= and empty values
-                       // Should not select anything
-                       div.innerHTML = "<input type='hidden' i=''/>";
-                       if ( div.querySelectorAll("[i^='']").length ) {
-                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
</del><ins>+                        // Support: IE8
+                       // Enforce case-sensitivity of name attribute
+                       if ( div.querySelectorAll("[name=d]").length ) {
+                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
</span><span class="lines">@@ -1237,9 +1323,9 @@
</span><span class="cx">          });
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
</del><ins>+        if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+               docElem.webkitMatchesSelector ||
</ins><span class="cx">           docElem.mozMatchesSelector ||
</span><del>-               docElem.webkitMatchesSelector ||
</del><span class="cx">           docElem.oMatchesSelector ||
</span><span class="cx">          docElem.msMatchesSelector) )) ) {
</span><span class="cx"> 
</span><span class="lines">@@ -1255,13 +1341,17 @@
</span><span class="cx">          });
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
</del><ins>+        rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
</ins><span class="cx">   rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
</span><span class="cx"> 
</span><ins>+       /* Contains
+       ---------------------------------------------------------------------- */
+       hasCompare = rnative.test( docElem.compareDocumentPosition );
+
</ins><span class="cx">   // Element contains another
</span><del>-       // Purposefully does not implement inclusive descendant
</del><ins>+        // Purposefully does not implement inclusive descendent
</ins><span class="cx">   // As in, an element does not contain itself
</span><del>-       contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
</del><ins>+        contains = hasCompare || rnative.test( docElem.contains ) ?
</ins><span class="cx">           function( a, b ) {
</span><span class="cx">                  var adown = a.nodeType === 9 ? a.documentElement : a,
</span><span class="cx">                          bup = b && b.parentNode;
</span><span class="lines">@@ -1282,8 +1372,11 @@
</span><span class="cx">                  return false;
</span><span class="cx">          };
</span><span class="cx"> 
</span><ins>+       /* Sorting
+       ---------------------------------------------------------------------- */
+
</ins><span class="cx">   // Document order sorting
</span><del>-       sortOrder = docElem.compareDocumentPosition ?
</del><ins>+        sortOrder = hasCompare ?
</ins><span class="cx">   function( a, b ) {
</span><span class="cx"> 
</span><span class="cx">          // Flag for duplicate removal
</span><span class="lines">@@ -1292,34 +1385,46 @@
</span><span class="cx">                  return 0;
</span><span class="cx">          }
</span><span class="cx"> 
</span><del>-               var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
-
</del><ins>+                // Sort on method existence if only one input has compareDocumentPosition
+               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
</ins><span class="cx">           if ( compare ) {
</span><del>-                       // Disconnected nodes
-                       if ( compare & 1 ||
-                               (recompare && b.compareDocumentPosition( a ) === compare) ) {
</del><ins>+                        return compare;
+               }
</ins><span class="cx"> 
</span><del>-                               // Choose the first element that is related to our preferred document
-                               if ( a === doc || contains(preferredDoc, a) ) {
-                                       return -1;
-                               }
-                               if ( b === doc || contains(preferredDoc, b) ) {
-                                       return 1;
-                               }
</del><ins>+                // Calculate position if both inputs belong to the same document
+               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+                       a.compareDocumentPosition( b ) :
</ins><span class="cx"> 
</span><del>-                               // Maintain original order
-                               return sortInput ?
-                                       ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
-                                       0;
</del><ins>+                        // Otherwise we know they are disconnected
+                       1;
+
+               // Disconnected nodes
+               if ( compare & 1 ||
+                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+                       // Choose the first element that is related to our preferred document
+                       if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+                               return -1;
</ins><span class="cx">                   }
</span><ins>+                       if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+                               return 1;
+                       }
</ins><span class="cx"> 
</span><del>-                       return compare & 4 ? -1 : 1;
</del><ins>+                        // Maintain original order
+                       return sortInput ?
+                               ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+                               0;
</ins><span class="cx">           }
</span><span class="cx"> 
</span><del>-               // Not directly comparable, sort on existence of method
-               return a.compareDocumentPosition ? -1 : 1;
</del><ins>+                return compare & 4 ? -1 : 1;
</ins><span class="cx">   } :
</span><span class="cx">  function( a, b ) {
</span><ins>+               // Exit early if the nodes are identical
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
</ins><span class="cx">           var cur,
</span><span class="cx">                  i = 0,
</span><span class="cx">                  aup = a.parentNode,
</span><span class="lines">@@ -1327,17 +1432,14 @@
</span><span class="cx">                  ap = [ a ],
</span><span class="cx">                  bp = [ b ];
</span><span class="cx"> 
</span><del>-               // Exit early if the nodes are identical
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-
</del><span class="cx">           // Parentless nodes are either documents or disconnected
</span><del>-               } else if ( !aup || !bup ) {
</del><ins>+                if ( !aup || !bup ) {
</ins><span class="cx">                   return a === doc ? -1 :
</span><span class="cx">                          b === doc ? 1 :
</span><span class="cx">                          aup ? -1 :
</span><span class="cx">                          bup ? 1 :
</span><ins>+                               sortInput ?
+                               ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
</ins><span class="cx">                           0;
</span><span class="cx"> 
</span><span class="cx">          // If the nodes are siblings, we can do a quick check
</span><span class="lines">@@ -1370,7 +1472,7 @@
</span><span class="cx">                  0;
</span><span class="cx">  };
</span><span class="cx"> 
</span><del>-       return document;
</del><ins>+        return doc;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> Sizzle.matches = function( expr, elements ) {
</span><span class="lines">@@ -1386,8 +1488,10 @@
</span><span class="cx">  // Make sure that attribute selectors are quoted
</span><span class="cx">  expr = expr.replace( rattributeQuotes, "='$1']" );
</span><span class="cx"> 
</span><del>-       // rbuggyQSA always contains :focus, so no need for an existence check
-       if ( support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
</del><ins>+        if ( support.matchesSelector && documentIsHTML &&
+               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
</ins><span class="cx">           try {
</span><span class="cx">                  var ret = matches.call( elem, expr );
</span><span class="cx"> 
</span><span class="lines">@@ -1401,7 +1505,7 @@
</span><span class="cx">          } catch(e) {}
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       return Sizzle( expr, document, null, [elem] ).length > 0;
</del><ins>+        return Sizzle( expr, document, null, [ elem ] ).length > 0;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> Sizzle.contains = function( context, elem ) {
</span><span class="lines">@@ -1413,32 +1517,34 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> Sizzle.attr = function( elem, name ) {
</span><del>-       var val;
-
</del><span class="cx">   // Set document vars if needed
</span><span class="cx">  if ( ( elem.ownerDocument || elem ) !== document ) {
</span><span class="cx">          setDocument( elem );
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       if ( documentIsHTML ) {
-               name = name.toLowerCase();
-       }
-       if ( (val = Expr.attrHandle[ name ]) ) {
-               return val( elem );
-       }
-       if ( !documentIsHTML || support.attributes ) {
-               return elem.getAttribute( name );
-       }
-       return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
-               name :
-               val && val.specified ? val.value : null;
</del><ins>+        var fn = Expr.attrHandle[ name.toLowerCase() ],
+               // Don't get fooled by Object.prototype properties (jQuery #13807)
+               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+                       fn( elem, name, !documentIsHTML ) :
+                       undefined;
+
+       return val !== undefined ?
+               val :
+               support.attributes || !documentIsHTML ?
+                       elem.getAttribute( name ) :
+                       (val = elem.getAttributeNode(name)) && val.specified ?
+                               val.value :
+                               null;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> Sizzle.error = function( msg ) {
</span><span class="cx">  throw new Error( "Syntax error, unrecognized expression: " + msg );
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-// Document sorting and removing duplicates
</del><ins>+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
</ins><span class="cx"> Sizzle.uniqueSort = function( results ) {
</span><span class="cx">  var elem,
</span><span class="cx">          duplicates = [],
</span><span class="lines">@@ -1447,8 +1553,6 @@
</span><span class="cx"> 
</span><span class="cx">  // Unless we *know* we can detect duplicates, assume their presence
</span><span class="cx">  hasDuplicate = !support.detectDuplicates;
</span><del>-       // Compensate for sort limitations
-       recompare = !support.sortDetached;
</del><span class="cx">   sortInput = !support.sortStable && results.slice( 0 );
</span><span class="cx">  results.sort( sortOrder );
</span><span class="cx"> 
</span><span class="lines">@@ -1463,72 +1567,14 @@
</span><span class="cx">          }
</span><span class="cx">  }
</span><span class="cx"> 
</span><ins>+       // Clear input after sorting to release objects
+       // See https://github.com/jquery/sizzle/pull/225
+       sortInput = null;
+
</ins><span class="cx">   return results;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> /**
</span><del>- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns Returns -1 if a precedes b, 1 if a follows b
- */
-function siblingCheck( a, b ) {
-       var cur = b && a,
-               diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
-
-       // Use IE sourceIndex if available on both nodes
-       if ( diff ) {
-               return diff;
-       }
-
-       // Check if b follows a
-       if ( cur ) {
-               while ( (cur = cur.nextSibling) ) {
-                       if ( cur === b ) {
-                               return -1;
-                       }
-               }
-       }
-
-       return a ? 1 : -1;
-}
-
-// Returns a function to use in pseudos for input types
-function createInputPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return name === "input" && elem.type === type;
-       };
-}
-
-// Returns a function to use in pseudos for buttons
-function createButtonPseudo( type ) {
-       return function( elem ) {
-               var name = elem.nodeName.toLowerCase();
-               return (name === "input" || name === "button") && elem.type === type;
-       };
-}
-
-// Returns a function to use in pseudos for positionals
-function createPositionalPseudo( fn ) {
-       return markFunction(function( argument ) {
-               argument = +argument;
-               return markFunction(function( seed, matches ) {
-                       var j,
-                               matchIndexes = fn( [], seed.length, argument ),
-                               i = matchIndexes.length;
-
-                       // Match elements found at the specified indexes
-                       while ( i-- ) {
-                               if ( seed[ (j = matchIndexes[i]) ] ) {
-                                       seed[j] = !(matches[j] = seed[j]);
-                               }
-                       }
-               });
-       });
-}
-
-/**
</del><span class="cx">  * Utility function for retrieving the text value of an array of DOM nodes
</span><span class="cx">  * @param {Array|Element} elem
</span><span class="cx">  */
</span><span class="lines">@@ -1540,13 +1586,13 @@
</span><span class="cx"> 
</span><span class="cx">  if ( !nodeType ) {
</span><span class="cx">          // If no nodeType, this is expected to be an array
</span><del>-               for ( ; (node = elem[i]); i++ ) {
</del><ins>+                while ( (node = elem[i++]) ) {
</ins><span class="cx">                   // Do not traverse comment nodes
</span><span class="cx">                  ret += getText( node );
</span><span class="cx">          }
</span><span class="cx">  } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
</span><span class="cx">          // Use textContent for elements
</span><del>-               // innerText usage removed for consistency of new lines (see #11153)
</del><ins>+                // innerText usage removed for consistency of new lines (jQuery #11153)
</ins><span class="cx">           if ( typeof elem.textContent === "string" ) {
</span><span class="cx">                  return elem.textContent;
</span><span class="cx">          } else {
</span><span class="lines">@@ -1572,6 +1618,8 @@
</span><span class="cx"> 
</span><span class="cx">  match: matchExpr,
</span><span class="cx"> 
</span><ins>+       attrHandle: {},
+
</ins><span class="cx">   find: {},
</span><span class="cx"> 
</span><span class="cx">  relative: {
</span><span class="lines">@@ -1586,7 +1634,7 @@
</span><span class="cx">                  match[1] = match[1].replace( runescape, funescape );
</span><span class="cx"> 
</span><span class="cx">                  // Move the given value to match[3] whether quoted or unquoted
</span><del>-                       match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
</del><ins>+                        match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
</ins><span class="cx"> 
</span><span class="cx">                  if ( match[2] === "~=" ) {
</span><span class="cx">                          match[3] = " " + match[3] + " ";
</span><span class="lines">@@ -1629,15 +1677,15 @@
</span><span class="cx"> 
</span><span class="cx">          "PSEUDO": function( match ) {
</span><span class="cx">                  var excess,
</span><del>-                               unquoted = !match[5] && match[2];
</del><ins>+                                unquoted = !match[6] && match[2];
</ins><span class="cx"> 
</span><span class="cx">                  if ( matchExpr["CHILD"].test( match[0] ) ) {
</span><span class="cx">                          return null;
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="cx">                  // Accept quoted arguments as-is
</span><del>-                       if ( match[4] ) {
-                               match[2] = match[4];
</del><ins>+                        if ( match[3] ) {
+                               match[2] = match[4] || match[5] || "";
</ins><span class="cx"> 
</span><span class="cx">                  // Strip excess characters from unquoted arguments
</span><span class="cx">                  } else if ( unquoted && rpseudo.test( unquoted ) &&
</span><span class="lines">@@ -1658,15 +1706,13 @@
</span><span class="cx"> 
</span><span class="cx">  filter: {
</span><span class="cx"> 
</span><del>-               "TAG": function( nodeName ) {
-                       if ( nodeName === "*" ) {
-                               return function() { return true; };
-                       }
-
-                       nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
-                       return function( elem ) {
-                               return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-                       };
</del><ins>+                "TAG": function( nodeNameSelector ) {
+                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+                       return nodeNameSelector === "*" ?
+                               function() { return true; } :
+                               function( elem ) {
+                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+                               };
</ins><span class="cx">           },
</span><span class="cx"> 
</span><span class="cx">          "CLASS": function( className ) {
</span><span class="lines">@@ -1675,7 +1721,7 @@
</span><span class="cx">                  return pattern ||
</span><span class="cx">                          (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
</span><span class="cx">                          classCache( className, function( elem ) {
</span><del>-                                       return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
</del><ins>+                                        return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
</ins><span class="cx">                           });
</span><span class="cx">          },
</span><span class="cx"> 
</span><span class="lines">@@ -1867,6 +1913,7 @@
</span><span class="cx">          }),
</span><span class="cx"> 
</span><span class="cx">          "contains": markFunction(function( text ) {
</span><ins>+                       text = text.replace( runescape, funescape );
</ins><span class="cx">                   return function( elem ) {
</span><span class="cx">                          return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
</span><span class="cx">                  };
</span><span class="lines">@@ -1943,12 +1990,11 @@
</span><span class="cx">          // Contents
</span><span class="cx">          "empty": function( elem ) {
</span><span class="cx">                  // http://www.w3.org/TR/selectors/#empty-pseudo
</span><del>-                       // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
-                       //   not comment, processing instructions, or others
-                       // Thanks to Diego Perini for the nodeName shortcut
-                       //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
</del><ins>+                        // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+                       //   but not by others (comment: 8; processing instruction: 7; etc.)
+                       // nodeType < 6 works because attributes (2) do not appear as children
</ins><span class="cx">                   for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
</span><del>-                               if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
</del><ins>+                                if ( elem.nodeType < 6 ) {
</ins><span class="cx">                                   return false;
</span><span class="cx">                          }
</span><span class="cx">                  }
</span><span class="lines">@@ -1975,11 +2021,12 @@
</span><span class="cx"> 
</span><span class="cx">          "text": function( elem ) {
</span><span class="cx">                  var attr;
</span><del>-                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
-                       // use getAttribute instead to test this case
</del><span class="cx">                   return elem.nodeName.toLowerCase() === "input" &&
</span><span class="cx">                          elem.type === "text" &&
</span><del>-                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
</del><ins>+
+                               // Support: IE<8
+                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
</ins><span class="cx">           },
</span><span class="cx"> 
</span><span class="cx">          // Position-in-collection
</span><span class="lines">@@ -2029,6 +2076,8 @@
</span><span class="cx">  }
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
</ins><span class="cx"> // Add button/input type pseudos
</span><span class="cx"> for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
</span><span class="cx">  Expr.pseudos[ i ] = createInputPseudo( i );
</span><span class="lines">@@ -2037,7 +2086,12 @@
</span><span class="cx">  Expr.pseudos[ i ] = createButtonPseudo( i );
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-function tokenize( selector, parseOnly ) {
</del><ins>+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
</ins><span class="cx">   var matched, match, tokens, type,
</span><span class="cx">          soFar, groups, preFilters,
</span><span class="cx">          cached = tokenCache[ selector + " " ];
</span><span class="lines">@@ -2058,7 +2112,7 @@
</span><span class="cx">                          // Don't consume trailing commas as valid
</span><span class="cx">                          soFar = soFar.slice( match[0].length ) || soFar;
</span><span class="cx">                  }
</span><del>-                       groups.push( tokens = [] );
</del><ins>+                        groups.push( (tokens = []) );
</ins><span class="cx">           }
</span><span class="cx"> 
</span><span class="cx">          matched = false;
</span><span class="lines">@@ -2066,11 +2120,11 @@
</span><span class="cx">          // Combinators
</span><span class="cx">          if ( (match = rcombinators.exec( soFar )) ) {
</span><span class="cx">                  matched = match.shift();
</span><del>-                       tokens.push( {
</del><ins>+                        tokens.push({
</ins><span class="cx">                           value: matched,
</span><span class="cx">                          // Cast descendant combinators to space
</span><span class="cx">                          type: match[0].replace( rtrim, " " )
</span><del>-                       } );
</del><ins>+                        });
</ins><span class="cx">                   soFar = soFar.slice( matched.length );
</span><span class="cx">          }
</span><span class="cx"> 
</span><span class="lines">@@ -2079,11 +2133,11 @@
</span><span class="cx">                  if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
</span><span class="cx">                          (match = preFilters[ type ]( match ))) ) {
</span><span class="cx">                          matched = match.shift();
</span><del>-                               tokens.push( {
</del><ins>+                                tokens.push({
</ins><span class="cx">                                   value: matched,
</span><span class="cx">                                  type: type,
</span><span class="cx">                                  matches: match
</span><del>-                               } );
</del><ins>+                                });
</ins><span class="cx">                           soFar = soFar.slice( matched.length );
</span><span class="cx">                  }
</span><span class="cx">          }
</span><span class="lines">@@ -2102,7 +2156,7 @@
</span><span class="cx">                  Sizzle.error( selector ) :
</span><span class="cx">                  // Cache the tokens
</span><span class="cx">                  tokenCache( selector, groups ).slice( 0 );
</span><del>-}
</del><ins>+};
</ins><span class="cx"> 
</span><span class="cx"> function toSelector( tokens ) {
</span><span class="cx">  var i = 0,
</span><span class="lines">@@ -2131,8 +2185,8 @@
</span><span class="cx"> 
</span><span class="cx">          // Check against all ancestor/preceding elements
</span><span class="cx">          function( elem, context, xml ) {
</span><del>-                       var data, cache, outerCache,
-                               dirkey = dirruns + " " + doneName;
</del><ins>+                        var oldCache, outerCache,
+                               newCache = [ dirruns, doneName ];
</ins><span class="cx"> 
</span><span class="cx">                  // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
</span><span class="cx">                  if ( xml ) {
</span><span class="lines">@@ -2147,14 +2201,17 @@
</span><span class="cx">                          while ( (elem = elem[ dir ]) ) {
</span><span class="cx">                                  if ( elem.nodeType === 1 || checkNonElements ) {
</span><span class="cx">                                          outerCache = elem[ expando ] || (elem[ expando ] = {});
</span><del>-                                               if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
-                                                       if ( (data = cache[1]) === true || data === cachedruns ) {
-                                                               return data === true;
-                                                       }
</del><ins>+                                                if ( (oldCache = outerCache[ dir ]) &&
+                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+                                                       // Assign to newCache so results back-propagate to previous elements
+                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
</ins><span class="cx">                                           } else {
</span><del>-                                                       cache = outerCache[ dir ] = [ dirkey ];
-                                                       cache[1] = matcher( elem, context, xml ) || cachedruns;
-                                                       if ( cache[1] === true ) {
</del><ins>+                                                        // Reuse newcache so results back-propagate to previous elements
+                                                       outerCache[ dir ] = newCache;
+
+                                                       // A match means we're done; a fail means we have to keep checking
+                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
</ins><span class="cx">                                                           return true;
</span><span class="cx">                                                  }
</span><span class="cx">                                          }
</span><span class="lines">@@ -2178,6 +2235,15 @@
</span><span class="cx">          matchers[0];
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+function multipleContexts( selector, contexts, results ) {
+       var i = 0,
+               len = contexts.length;
+       for ( ; i < len; i++ ) {
+               Sizzle( selector, contexts[i], results );
+       }
+       return results;
+}
+
</ins><span class="cx"> function condense( unmatched, map, filter, context, xml ) {
</span><span class="cx">  var elem,
</span><span class="cx">          newUnmatched = [],
</span><span class="lines">@@ -2330,7 +2396,10 @@
</span><span class="cx">                          }
</span><span class="cx">                          return setMatcher(
</span><span class="cx">                                  i > 1 && elementMatcher( matchers ),
</span><del>-                                       i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
</del><ins>+                                        i > 1 && toSelector(
+                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+                                       ).replace( rtrim, "$1" ),
</ins><span class="cx">                                   matcher,
</span><span class="cx">                                  i < j && matcherFromTokens( tokens.slice( i, j ) ),
</span><span class="cx">                                  j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
</span><span class="lines">@@ -2345,31 +2414,30 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
</span><del>-       // A counter to specify which element is currently being matched
-       var matcherCachedRuns = 0,
-               bySet = setMatchers.length > 0,
</del><ins>+        var bySet = setMatchers.length > 0,
</ins><span class="cx">           byElement = elementMatchers.length > 0,
</span><del>-               superMatcher = function( seed, context, xml, results, expandContext ) {
</del><ins>+                superMatcher = function( seed, context, xml, results, outermost ) {
</ins><span class="cx">                   var elem, j, matcher,
</span><del>-                               setMatched = [],
</del><span class="cx">                           matchedCount = 0,
</span><span class="cx">                          i = "0",
</span><span class="cx">                          unmatched = seed && [],
</span><del>-                               outermost = expandContext != null,
</del><ins>+                                setMatched = [],
</ins><span class="cx">                           contextBackup = outermostContext,
</span><del>-                               // We must always have either seed elements or context
-                               elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
</del><ins>+                                // We must always have either seed elements or outermost context
+                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
</ins><span class="cx">                           // Use integer dirruns iff this is the outermost matcher
</span><del>-                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
</del><ins>+                                dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+                               len = elems.length;
</ins><span class="cx"> 
</span><span class="cx">                  if ( outermost ) {
</span><span class="cx">                          outermostContext = context !== document && context;
</span><del>-                               cachedruns = matcherCachedRuns;
</del><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  // Add elements passing elementMatchers directly to results
</span><span class="cx">                  // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
</span><del>-                       for ( ; (elem = elems[i]) != null; i++ ) {
</del><ins>+                        // Support: IE<9, Safari
+                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
</ins><span class="cx">                           if ( byElement && elem ) {
</span><span class="cx">                                  j = 0;
</span><span class="cx">                                  while ( (matcher = elementMatchers[j++]) ) {
</span><span class="lines">@@ -2380,7 +2448,6 @@
</span><span class="cx">                                  }
</span><span class="cx">                                  if ( outermost ) {
</span><span class="cx">                                          dirruns = dirrunsUnique;
</span><del>-                                               cachedruns = ++matcherCachedRuns;
</del><span class="cx">                                   }
</span><span class="cx">                          }
</span><span class="cx"> 
</span><span class="lines">@@ -2445,7 +2512,7 @@
</span><span class="cx">          superMatcher;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
</del><ins>+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
</ins><span class="cx">   var i,
</span><span class="cx">          setMatchers = [],
</span><span class="cx">          elementMatchers = [],
</span><span class="lines">@@ -2453,12 +2520,12 @@
</span><span class="cx"> 
</span><span class="cx">  if ( !cached ) {
</span><span class="cx">          // Generate a function of recursive functions that can be used to check each element
</span><del>-               if ( !group ) {
-                       group = tokenize( selector );
</del><ins>+                if ( !match ) {
+                       match = tokenize( selector );
</ins><span class="cx">           }
</span><del>-               i = group.length;
</del><ins>+                i = match.length;
</ins><span class="cx">           while ( i-- ) {
</span><del>-                       cached = matcherFromTokens( group[i] );
</del><ins>+                        cached = matcherFromTokens( match[i] );
</ins><span class="cx">                   if ( cached[ expando ] ) {
</span><span class="cx">                          setMatchers.push( cached );
</span><span class="cx">                  } else {
</span><span class="lines">@@ -2468,206 +2535,259 @@
</span><span class="cx"> 
</span><span class="cx">          // Cache the compiled function
</span><span class="cx">          cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
</span><ins>+
+               // Save selector and tokenization
+               cached.selector = selector;
</ins><span class="cx">   }
</span><span class="cx">  return cached;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-function multipleContexts( selector, contexts, results ) {
-       var i = 0,
-               len = contexts.length;
-       for ( ; i < len; i++ ) {
-               Sizzle( selector, contexts[i], results );
-       }
-       return results;
-}
-
-function select( selector, context, results, seed ) {
</del><ins>+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
</ins><span class="cx">   var i, tokens, token, type, find,
</span><del>-               match = tokenize( selector );
</del><ins>+                compiled = typeof selector === "function" && selector,
+               match = !seed && tokenize( (selector = compiled.selector || selector) );
</ins><span class="cx"> 
</span><del>-       if ( !seed ) {
-               // Try to minimize operations if there is only one group
-               if ( match.length === 1 ) {
</del><ins>+        results = results || [];
</ins><span class="cx"> 
</span><del>-                       // Take a shortcut and set the context if the root selector is an ID
-                       tokens = match[0] = match[0].slice( 0 );
-                       if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-                                       context.nodeType === 9 && documentIsHTML &&
-                                       Expr.relative[ tokens[1].type ] ) {
</del><ins>+        // Try to minimize operations if there is no seed and only one group
+       if ( match.length === 1 ) {
</ins><span class="cx"> 
</span><del>-                               context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-                               if ( !context ) {
-                                       return results;
-                               }
</del><ins>+                // Take a shortcut and set the context if the root selector is an ID
+               tokens = match[0] = match[0].slice( 0 );
+               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+                               support.getById && context.nodeType === 9 && documentIsHTML &&
+                               Expr.relative[ tokens[1].type ] ) {
</ins><span class="cx"> 
</span><del>-                               selector = selector.slice( tokens.shift().value.length );
</del><ins>+                        context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+                       if ( !context ) {
+                               return results;
+
+                       // Precompiled matchers will still verify ancestry, so step up a level
+                       } else if ( compiled ) {
+                               context = context.parentNode;
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><del>-                       // Fetch a seed set for right-to-left matching
-                       i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
-                       while ( i-- ) {
-                               token = tokens[i];
</del><ins>+                        selector = selector.slice( tokens.shift().value.length );
+               }
</ins><span class="cx"> 
</span><del>-                               // Abort if we hit a combinator
-                               if ( Expr.relative[ (type = token.type) ] ) {
-                                       break;
-                               }
-                               if ( (find = Expr.find[ type ]) ) {
-                                       // Search, expanding context for leading sibling combinators
-                                       if ( (seed = find(
-                                               token.matches[0].replace( runescape, funescape ),
-                                               rsibling.test( tokens[0].type ) && context.parentNode || context
-                                       )) ) {
</del><ins>+                // Fetch a seed set for right-to-left matching
+               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+               while ( i-- ) {
+                       token = tokens[i];
</ins><span class="cx"> 
</span><del>-                                               // If seed is empty or no tokens remain, we can return early
-                                               tokens.splice( i, 1 );
-                                               selector = seed.length && toSelector( tokens );
-                                               if ( !selector ) {
-                                                       push.apply( results, seed );
-                                                       return results;
-                                               }
</del><ins>+                        // Abort if we hit a combinator
+                       if ( Expr.relative[ (type = token.type) ] ) {
+                               break;
+                       }
+                       if ( (find = Expr.find[ type ]) ) {
+                               // Search, expanding context for leading sibling combinators
+                               if ( (seed = find(
+                                       token.matches[0].replace( runescape, funescape ),
+                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+                               )) ) {
</ins><span class="cx"> 
</span><del>-                                               break;
</del><ins>+                                        // If seed is empty or no tokens remain, we can return early
+                                       tokens.splice( i, 1 );
+                                       selector = seed.length && toSelector( tokens );
+                                       if ( !selector ) {
+                                               push.apply( results, seed );
+                                               return results;
</ins><span class="cx">                                   }
</span><ins>+
+                                       break;
</ins><span class="cx">                           }
</span><span class="cx">                  }
</span><span class="cx">          }
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       // Compile and execute a filtering function
</del><ins>+        // Compile and execute a filtering function if one is not provided
</ins><span class="cx">   // Provide `match` to avoid retokenization if we modified the selector above
</span><del>-       compile( selector, match )(
</del><ins>+        ( compiled || compile( selector, match ) )(
</ins><span class="cx">           seed,
</span><span class="cx">          context,
</span><span class="cx">          !documentIsHTML,
</span><span class="cx">          results,
</span><del>-               rsibling.test( selector )
</del><ins>+                rsibling.test( selector ) && testContext( context.parentNode ) || context
</ins><span class="cx">   );
</span><span class="cx">  return results;
</span><del>-}
</del><ins>+};
</ins><span class="cx"> 
</span><del>-// Deprecated
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
</del><ins>+// One-time assignments
</ins><span class="cx"> 
</span><del>-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-// Check sort stability
</del><ins>+// Sort stability
</ins><span class="cx"> support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
</span><span class="cx"> 
</span><del>-// Initialize with the default document
</del><ins>+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
</ins><span class="cx"> setDocument();
</span><span class="cx"> 
</span><del>-// Always assume the presence of duplicates if sort doesn't
-// pass them to our comparison function (as in Google Chrome).
-[0, 0].sort( sortOrder );
-support.detectDuplicates = hasDuplicate;
</del><ins>+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+       // Should return 1, but returns 4 (following)
+       return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
</ins><span class="cx"> 
</span><del>-/*
-// EXPOSE
-if ( typeof define === "function" && define.amd ) {
-       define(function() { return Sizzle; });
-} else {
-       window.Sizzle = Sizzle;
</del><ins>+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+       div.innerHTML = "<a href='#'></a>";
+       return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+       addHandle( "type|href|height|width", function( elem, name, isXML ) {
+               if ( !isXML ) {
+                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+               }
+       });
</ins><span class="cx"> }
</span><del>-*/
</del><span class="cx"> 
</span><ins>+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+       div.innerHTML = "<input/>";
+       div.firstChild.setAttribute( "value", "" );
+       return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+       addHandle( "value", function( elem, name, isXML ) {
+               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+                       return elem.defaultValue;
+               }
+       });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+       return div.getAttribute("disabled") == null;
+}) ) {
+       addHandle( booleans, function( elem, name, isXML ) {
+               var val;
+               if ( !isXML ) {
+                       return elem[ name ] === true ? name.toLowerCase() :
+                                       (val = elem.getAttributeNode( name )) && val.specified ?
+                                       val.value :
+                               null;
+               }
+       });
+}
+
</ins><span class="cx"> // EXPOSE
</span><span class="cx"> return Sizzle;
</span><span class="cx"> });
</span><span class="cx"> 
</span><del>-// Included from: js/tinymce/classes/dom/DomQuery.js
</del><ins>+// Included from: js/tinymce/classes/util/Tools.js
</ins><span class="cx"> 
</span><span class="cx"> /**
</span><del>- * DomQuery.js
</del><ins>+ * Tools.js
</ins><span class="cx">  *
</span><span class="cx">  * Copyright, Moxiecode Systems AB
</span><span class="cx">  * Released under LGPL License.
</span><span class="cx">  *
</span><span class="cx">  * License: http://www.tinymce.com/license
</span><span class="cx">  * Contributing: http://www.tinymce.com/contributing
</span><del>- *
- * Some of this logic is based on jQuery code that is released under
- * MIT license that grants us to sublicense it under LGPL.
- *
- * @ignore-file
</del><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> /**
</span><del>- * @class tinymce.dom.DomQuery
</del><ins>+ * This class contains various utlity functions. These are also exposed
+ * directly on the tinymce namespace.
+ *
+ * @class tinymce.util.Tools
</ins><span class="cx">  */
</span><del>-define("tinymce/dom/DomQuery", [
-       "tinymce/dom/EventUtils",
-       "tinymce/dom/Sizzle"
-], function(EventUtils, Sizzle) {
-       var doc = document, push = Array.prototype.push, slice = Array.prototype.slice;
-       var rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
-       var Event = EventUtils.Event;
</del><ins>+define("tinymce/util/Tools", [], function() {
+       /**
+        * Removes whitespace from the beginning and end of a string.
+        *
+        * @method trim
+        * @param {String} s String to remove whitespace from.
+        * @return {String} New string with removed whitespace.
+        */
+       var whiteSpaceRegExp = /^\s*|\s*$/g;
</ins><span class="cx"> 
</span><del>-       function isDefined(obj) {
-               return typeof obj !== "undefined";
</del><ins>+        function trim(str) {
+               return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
</ins><span class="cx">   }
</span><span class="cx"> 
</span><del>-       function isString(obj) {
-               return typeof obj === "string";
-       }
</del><ins>+        /**
+        * Returns true/false if the object is an array or not.
+        *
+        * @method isArray
+        * @param {Object} obj Object to check.
+        * @return {boolean} true/false state if the object is an array or not.
+        */
+       var isArray = Array.isArray || function(obj) {
+               return Object.prototype.toString.call(obj) === "[object Array]";
+       };
</ins><span class="cx"> 
</span><del>-       function createFragment(html) {
-               var frag, node, container;
</del><ins>+        /**
+        * Checks if a object is of a specific type for example an array.
+        *
+        * @method is
+        * @param {Object} o Object to check type of.
+        * @param {string} t Optional type to check for.
+        * @return {Boolean} true/false if the object is of the specified type.
+        */
+       function is(o, t) {
+               if (!t) {
+                       return o !== undefined;
+               }
</ins><span class="cx"> 
</span><del>-               container = doc.createElement("div");
-               frag = doc.createDocumentFragment();
-               container.innerHTML = html;
-
-               while ((node = container.firstChild)) {
-                       frag.appendChild(node);
</del><ins>+                if (t == 'array' && isArray(o)) {
+                       return true;
</ins><span class="cx">           }
</span><span class="cx"> 
</span><del>-               return frag;
</del><ins>+                return typeof(o) == t;
</ins><span class="cx">   }
</span><span class="cx"> 
</span><del>-       function domManipulate(targetNodes, sourceItem, callback) {
-               var i;
</del><ins>+        /**
+        * Converts the specified object into a real JavaScript array.
+        *
+        * @method toArray
+        * @param {Object} obj Object to convert into array.
+        * @return {Array} Array object based in input.
+        */
+       function toArray(obj) {
+               var array = obj, i, l;
</ins><span class="cx"> 
</span><del>-               if (typeof sourceItem === "string") {
-                       sourceItem = createFragment(sourceItem);
-               } else if (sourceItem.length) {
-                       for (i = 0; i < sourceItem.length; i++) {
-                               domManipulate(targetNodes, sourceItem[i], callback);
</del><ins>+                if (!isArray(obj)) {
+                       array = [];
+                       for (i = 0, l = obj.length; i < l; i++) {
+                               array[i] = obj[i];
</ins><span class="cx">                   }
</span><del>-
-                       return targetNodes;
</del><span class="cx">           }
</span><span class="cx"> 
</span><del>-               i = targetNodes.length;
-               while (i--) {
-                       callback.call(targetNodes[i], sourceItem.parentNode ? sourceItem : sourceItem);
-               }
-
-               return targetNodes;
</del><ins>+                return array;
</ins><span class="cx">   }
</span><span class="cx"> 
</span><del>-       function hasClass(node, className) {
-               return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;
-       }
-
</del><span class="cx">   /**
</span><del>-        * Makes a map object out of a string that gets separated by a delimiter.
</del><ins>+         * Makes a name/object map out of an array with names.
</ins><span class="cx">    *
</span><span class="cx">   * @method makeMap
</span><del>-        * @param {String} items Item string to split.
-        * @param {Object} map Optional object to add items to.
-        * @return {Object} name/value object with items as keys.
</del><ins>+         * @param {Array/String} items Items to make map out of.
+        * @param {String} delim Optional delimiter to split string by.
+        * @param {Object} map Optional map to add items to.
+        * @return {Object} Name/value map of items.
</ins><span class="cx">    */
</span><del>-       function makeMap(items, map) {
</del><ins>+        function makeMap(items, delim, map) {
</ins><span class="cx">           var i;
</span><span class="cx"> 
</span><span class="cx">          items = items || [];
</span><ins>+               delim = delim || ',';
</ins><span class="cx"> 
</span><span class="cx">          if (typeof(items) == "string") {
</span><del>-                       items = items.split(' ');
</del><ins>+                        items = items.split(delim);
</ins><span class="cx">           }
</span><span class="cx"> 
</span><span class="cx">          map = map || {};
</span><span class="lines">@@ -2680,60 +2800,681 @@
</span><span class="cx">          return map;
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       var numericCssMap = makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom');
</del><ins>+        /**
+        * Performs an iteration of all items in a collection such as an object or array. This method will execure the
+        * callback function for each item in the collection, if the callback returns false the iteration will terminate.
+        * The callback has the following format: cb(value, key_or_index).
+        *
+        * @method each
+        * @param {Object} o Collection to iterate.
+        * @param {function} cb Callback function to execute for each item.
+        * @param {Object} s Optional scope to execute the callback in.
+        * @example
+        * // Iterate an array
+        * tinymce.each([1,2,3], function(v, i) {
+        *     console.debug("Value: " + v + ", Index: " + i);
+        * });
+        *
+        * // Iterate an object
+        * tinymce.each({a: 1, b: 2, c: 3], function(v, k) {
+        *     console.debug("Value: " + v + ", Key: " + k);
+        * });
+        */
+       function each(o, cb, s) {
+               var n, l;
</ins><span class="cx"> 
</span><del>-       function DomQuery(selector, context) {
-               /*eslint new-cap:0 */
-               return new DomQuery.fn.init(selector, context);
</del><ins>+                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;
</ins><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">  /**
</span><del>-        * Extends the specified object with another object.
</del><ins>+         * Creates a new array by the return value of each iteration function call. This enables you to convert
+        * one array list into another.
</ins><span class="cx">    *
</span><del>-        * @method extend
-        * @param {Object} target Object to extend.
-        * @param {Object..} obj Multiple objects to extend with.
-        * @return {Object} Same as target, the extended object.
</del><ins>+         * @method map
+        * @param {Array} a Array of items to iterate.
+        * @param {function} f Function to call for each item. It's return value will be the new value.
+        * @return {Array} Array with new values based on function return values.
</ins><span class="cx">    */
</span><del>-       function extend(target) {
-               var args = arguments, arg, i, key;
</del><ins>+        function map(a, f) {
+               var o = [];
</ins><span class="cx"> 
</span><del>-               for (i = 1; i < args.length; i++) {
-                       arg = args[i];
</del><ins>+                each(a, function(v) {
+                       o.push(f(v));
+               });
</ins><span class="cx"> 
</span><del>-                       for (key in arg) {
-                               target[key] = arg[key];
</del><ins>+                return o;
+       }
+
+       /**
+        * Filters out items from the input array by calling the specified function for each item.
+        * If the function returns false the item will be excluded if it returns true it will be included.
+        *
+        * @method grep
+        * @param {Array} a Array of items to loop though.
+        * @param {function} f Function to call for each item. Include/exclude depends on it's return value.
+        * @return {Array} New array with values imported and filtered based in input.
+        * @example
+        * // Filter out some items, this will return an array with 4 and 5
+        * var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;});
+        */
+       function grep(a, f) {
+               var o = [];
+
+               each(a, function(v) {
+                       if (!f || f(v)) {
+                               o.push(v);
</ins><span class="cx">                   }
</span><del>-               }
</del><ins>+                });
</ins><span class="cx"> 
</span><del>-               return target;
</del><ins>+                return o;
</ins><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">  /**
</span><del>-        * Converts the specified object into a real JavaScript array.
</del><ins>+         * Creates a class, subclass or static singleton.
+        * More details on this method can be found in the Wiki.
</ins><span class="cx">    *
</span><del>-        * @method toArray
-        * @param {Object} obj Object to convert into array.
-        * @return {Array} Array object based in input.
</del><ins>+         * @method create
+        * @param {String} s Class name, inheritage and prefix.
+        * @param {Object} p Collection of methods to add to the class.
+        * @param {Object} root Optional root object defaults to the global window object.
+        * @example
+        * // Creates a basic class
+        * tinymce.create('tinymce.somepackage.SomeClass', {
+        *     SomeClass: function() {
+        *         // Class constructor
+        *     },
+        *
+        *     method: function() {
+        *         // Some method
+        *     }
+        * });
+        *
+        * // Creates a basic subclass class
+        * tinymce.create('tinymce.somepackage.SomeSubClass:tinymce.somepackage.SomeClass', {
+        *     SomeSubClass: function() {
+        *         // Class constructor
+        *         this.parent(); // Call parent constructor
+        *     },
+        *
+        *     method: function() {
+        *         // Some method
+        *         this.parent(); // Call parent method
+        *     },
+        *
+        *     'static': {
+        *         staticMethod: function() {
+        *             // Static method
+        *         }
+        *     }
+        * });
+        *
+        * // Creates a singleton/static class
+        * tinymce.create('static tinymce.somepackage.SomeSingletonClass', {
+        *     method: function() {
+        *         // Some method
+        *     }
+        * });
</ins><span class="cx">    */
</span><del>-       function toArray(obj) {
-               var array = [], i, l;
</del><ins>+        function create(s, p, root) {
+               var self = this, sp, ns, cn, scn, c, de = 0;
</ins><span class="cx"> 
</span><del>-               for (i = 0, l = obj.length; i < l; i++) {
-                       array[i] = obj[i];
</del><ins>+                // 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 = self.createNS(s[3].replace(/\.\w+$/, ''), root);
+
+               // Class already exists
+               if (ns[cn]) {
+                       return;
</ins><span class="cx">           }
</span><span class="cx"> 
</span><del>-               return array;
</del><ins>+                // 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];
+               self.extend(ns[cn].prototype, p);
+
+               // Extend
+               if (s[5]) {
+                       sp = self.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
+                       self.each(sp, function(f, n) {
+                               ns[cn].prototype[n] = sp[n];
+                       });
+
+                       // Add overridden methods
+                       self.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
+               /*jshint sub:true*/
+               self.each(p['static'], function(f, n) {
+                       ns[cn][n] = f;
+               });
</ins><span class="cx">   }
</span><span class="cx"> 
</span><span class="cx">  /**
</span><del>-        * Returns the index of the specified item inside the array.
</del><ins>+         * Returns the index of a value in an array, this method will return -1 if the item wasn't found.
</ins><span class="cx">    *
</span><span class="cx">   * @method inArray
</span><del>-        * @param {Object} item Item to look for.
-        * @param {Array} array Array to look for item in.
-        * @return {Number} Index of the item or -1.
</del><ins>+         * @param {Array} a Array/Object to search for value in.
+        * @param {Object} v Value to check for inside the array.
+        * @return {Number/String} Index of item inside the array inside an object. Or -1 if it wasn't found.
+        * @example
+        * // Get index of value in array this will alert 1 since 2 is at that index
+        * alert(tinymce.inArray([1,2,3], 2));
</ins><span class="cx">    */
</span><ins>+       function inArray(a, v) {
+               var i, l;
+
+               if (a) {
+                       for (i = 0, l = a.length; i < l; i++) {
+                               if (a[i] === v) {
+                                       return i;
+                               }
+                       }
+               }
+
+               return -1;
+       }
+
+       function extend(obj, ext) {
+               var i, l, name, args = arguments, value;
+
+               for (i = 1, l = args.length; i < l; i++) {
+                       ext = args[i];
+                       for (name in ext) {
+                               if (ext.hasOwnProperty(name)) {
+                                       value = ext[name];
+
+                                       if (value !== undefined) {
+                                               obj[name] = value;
+                                       }
+                               }
+                       }
+               }
+
+               return obj;
+       }
+
+       /**
+        * Executed the specified function for each item in a object tree.
+        *
+        * @method walk
+        * @param {Object} o Object tree to walk though.
+        * @param {function} f Function to call for each item.
+        * @param {String} n Optional name of collection inside the objects to walk for example childNodes.
+        * @param {String} s Optional scope to execute the function in.
+        */
+       function walk(o, f, n, s) {
+               s = s || this;
+
+               if (o) {
+                       if (n) {
+                               o = o[n];
+                       }
+
+                       each(o, function(o, i) {
+                               if (f.call(s, o, i, n) === false) {
+                                       return false;
+                               }
+
+                               walk(o, f, n, s);
+                       });
+               }
+       }
+
+       /**
+        * Creates a namespace on a specific object.
+        *
+        * @method createNS
+        * @param {String} n Namespace to create for example a.b.c.d.
+        * @param {Object} o Optional object to add namespace to, defaults to window.
+        * @return {Object} New namespace object the last item in path.
+        * @example
+        * // Create some namespace
+        * tinymce.createNS('tinymce.somepackage.subpackage');
+        *
+        * // Add a singleton
+        * var tinymce.somepackage.subpackage.SomeSingleton = {
+        *     method: function() {
+        *         // Some method
+        *     }
+        * };
+        */
+       function createNS(n, o) {
+               var i, v;
+
+               o = o || window;
+
+               n = n.split('.');
+               for (i = 0; i < n.length; i++) {
+                       v = n[i];
+
+                       if (!o[v]) {
+                               o[v] = {};
+                       }
+
+                       o = o[v];
+               }
+
+               return o;
+       }
+
+       /**
+        * Resolves a string and returns the object from a specific structure.
+        *
+        * @method resolve
+        * @param {String} n Path to resolve for example a.b.c.d.
+        * @param {Object} o Optional object to search though, defaults to window.
+        * @return {Object} Last object in path or null if it couldn't be resolved.
+        * @example
+        * // Resolve a path into an object reference
+        * var obj = tinymce.resolve('a.b.c.d');
+        */
+       function resolve(n, o) {
+               var i, l;
+
+               o = o || window;
+
+               n = n.split('.');
+               for (i = 0, l = n.length; i < l; i++) {
+                       o = o[n[i]];
+
+                       if (!o) {
+                               break;
+                       }
+               }
+
+               return o;
+       }
+
+       /**
+        * Splits a string but removes the whitespace before and after each value.
+        *
+        * @method explode
+        * @param {string} s String to split.
+        * @param {string} d Delimiter to split by.
+        * @example
+        * // Split a string into an array with a,b,c
+        * var arr = tinymce.explode('a, b,   c');
+        */
+       function explode(s, d) {
+               if (!s || is(s, 'array')) {
+                       return s;
+               }
+
+               return map(s.split(d || ','), trim);
+       }
+
+       return {
+               trim: trim,
+               isArray: isArray,
+               is: is,
+               toArray: toArray,
+               makeMap: makeMap,
+               each: each,
+               map: map,
+               grep: grep,
+               inArray: inArray,
+               extend: extend,
+               create: create,
+               walk: walk,
+               createNS: createNS,
+               resolve: resolve,
+               explode: explode
+       };
+});
+
+// Included from: js/tinymce/classes/Env.js
+
+/**
+ * Env.js
+ *
+ * Copyright, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This class contains various environment constants like browser versions etc.
+ * Normally you don't want to sniff specific browser versions but sometimes you have
+ * to when it's impossible to feature detect. So use this with care.
+ *
+ * @class tinymce.Env
+ * @static
+ */
+define("tinymce/Env", [], function() {
+       var nav = navigator, userAgent = nav.userAgent;
+       var opera, webkit, ie, ie11, gecko, mac, iDevice;
+
+       opera = window.opera && window.opera.buildNumber;
+       webkit = /WebKit/.test(userAgent);
+       ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName);
+       ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
+       ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false;
+       ie = ie || ie11;
+       gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
+       mac = userAgent.indexOf('Mac') != -1;
+       iDevice = /(iPad|iPhone)/.test(userAgent);
+
+       // Is a iPad/iPhone and not on iOS5 sniff the WebKit version since older iOS WebKit versions
+       // says it has contentEditable support but there is no visible caret.
+       var contentEditable = !iDevice || userAgent.match(/AppleWebKit\/(\d*)/)[1] >= 534;
+
+       return {
+               /**
+                * Constant that is true if the browser is Opera.
+                *
+                * @property opera
+                * @type Boolean
+                * @final
+                */
+               opera: opera,
+
+               /**
+                * Constant that is true if the browser is WebKit (Safari/Chrome).
+                *
+                * @property webKit
+                * @type Boolean
+                * @final
+                */
+               webkit: webkit,
+
+               /**
+                * Constant that is more than zero if the browser is IE.
+                *
+                * @property ie
+                * @type Boolean
+                * @final
+                */
+               ie: ie,
+
+               /**
+                * Constant that is true if the browser is Gecko.
+                *
+                * @property gecko
+                * @type Boolean
+                * @final
+                */
+               gecko: gecko,
+
+               /**
+                * Constant that is true if the os is Mac OS.
+                *
+                * @property mac
+                * @type Boolean
+                * @final
+                */
+               mac: mac,
+
+               /**
+                * Constant that is true if the os is iOS.
+                *
+                * @property iOS
+                * @type Boolean
+                * @final
+                */
+               iOS: iDevice,
+
+               /**
+                * Constant that is true if the browser supports editing.
+                *
+                * @property contentEditable
+                * @type Boolean
+                * @final
+                */
+               contentEditable: contentEditable,
+
+               /**
+                * Transparent image data url.
+                *
+                * @property transparentSrc
+                * @type Boolean
+                * @final
+                */
+               transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
+
+               /**
+                * Returns true/false if the browser can or can't place the caret after a inline block like an image.
+                *
+                * @property noCaretAfter
+                * @type Boolean
+                * @final
+                */
+               caretAfter: ie != 8,
+
+               /**
+                * Constant that is true if the browser supports native DOM Ranges. IE 9+.
+                *
+                * @property range
+                * @type Boolean
+                */
+               range: window.getSelection && "Range" in window,
+
+               /**
+                * Returns the IE document mode for non IE browsers this will fake IE 10.
+                *
+                * @property documentMode
+                * @type Number
+                */
+               documentMode: ie ? (document.documentMode || 7) : 10
+       };
+});
+
+// Included from: js/tinymce/classes/dom/DomQuery.js
+
+/**
+ * DomQuery.js
+ *
+ * Copyright, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://www.tinymce.com/license
+ * Contributing: http://www.tinymce.com/contributing
+ */
+
+/**
+ * This class mimics most of the jQuery API:
+ *
+ * This is whats currently implemented:
+ * - Utility functions
+ * - DOM traversial
+ * - DOM manipulation
+ * - Event binding
+ *
+ * This is not currently implemented:
+ * - Dimension
+ * - Ajax
+ * - Animation
+ * - Advanced chaining
+ *
+ * @example
+ * var $ = tinymce.dom.DomQuery;
+ * $('p').attr('attr', 'value').addClass('class');
+ *
+ * @class tinymce.dom.DomQuery
+ */
+define("tinymce/dom/DomQuery", [
+       "tinymce/dom/EventUtils",
+       "tinymce/dom/Sizzle",
+       "tinymce/util/Tools",
+       "tinymce/Env"
+], function(EventUtils, Sizzle, Tools, Env) {
+       var doc = document, push = Array.prototype.push, slice = Array.prototype.slice;
+       var rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
+       var Event = EventUtils.Event, undef;
+
+       function isDefined(obj) {
+               return typeof obj !== 'undefined';
+       }
+
+       function isString(obj) {
+               return typeof obj === 'string';
+       }
+
+       function createFragment(html, fragDoc) {
+               var frag, node, container;
+
+               fragDoc = fragDoc || doc;
+               container = fragDoc.createElement('div');
+               frag = fragDoc.createDocumentFragment();
+               container.innerHTML = html;
+
+               while ((node = container.firstChild)) {
+                       frag.appendChild(node);
+               }
+
+               return frag;
+       }
+
+       function domManipulate(targetNodes, sourceItem, callback, reverse) {
+               var i;
+
+               if (isString(sourceItem)) {
+                       sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));
+               } else if (sourceItem.length && !sourceItem.nodeType) {
+                       sourceItem = DomQuery.makeArray(sourceItem);
+
+                       if (reverse) {
+                               for (i = sourceItem.length - 1; i >= 0; i--) {
+                                       domManipulate(targetNodes, sourceItem[i], callback, reverse);
+                               }
+                       } else {
+                               for (i = 0; i < sourceItem.length; i++) {
+                                       domManipulate(targetNodes, sourceItem[i], callback, reverse);
+                               }
+                       }
+
+                       return targetNodes;
+               }
+
+               if (sourceItem.nodeType) {
+                       i = targetNodes.length;
+                       while (i--) {
+                               callback.call(targetNodes[i], sourceItem);
+                       }
+               }
+
+               return targetNodes;
+       }
+
+       function hasClass(node, className) {
+               return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;
+       }
+
+       function wrap(elements, wrapper, all) {
+               var lastParent, newWrapper;
+
+               wrapper = DomQuery(wrapper)[0];
+
+               elements.each(function() {
+                       var self = this;
+
+                       if (!all || lastParent != self.parentNode) {
+                               lastParent = self.parentNode;
+                               newWrapper = wrapper.cloneNode(false);
+                               self.parentNode.insertBefore(newWrapper, self);
+                               newWrapper.appendChild(self);
+                       } else {
+                               newWrapper.appendChild(self);
+                       }
+               });
+
+               return elements;
+       }
+
+       var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');
+       var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');
+       var propFix = {
+               'for': 'htmlFor',
+               'class': 'className',
+               'readonly': 'readOnly'
+       };
+       var cssFix = {
+               float: 'cssFloat'
+       };
+
+       var attrHooks = {}, cssHooks = {};
+
+       function DomQuery(selector, context) {
+               /*eslint new-cap:0 */
+               return new DomQuery.fn.init(selector, context);
+       }
+
</ins><span class="cx">   function inArray(item, array) {
</span><span class="cx">          var i;
</span><span class="cx"> 
</span><span class="lines">@@ -2751,31 +3492,12 @@
</span><span class="cx">          return -1;
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       /**
-        * Returns true/false if the specified object is an array.
-        *
-        * @method isArray
-        * @param {Object} obj Object to check if it's an array.
-        * @return {Boolean} true/false if the input object is array or not.
-        */
-       var isArray = Array.isArray || function(obj) {
-               return Object.prototype.toString.call(obj) === "[object Array]";
-       };
-
</del><span class="cx">   var whiteSpaceRegExp = /^\s*|\s*$/g;
</span><span class="cx"> 
</span><span class="cx">  function trim(str) {
</span><del>-               return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
</del><ins>+                return (str === null || str === undef) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
</ins><span class="cx">   }
</span><span class="cx"> 
</span><del>-       /**
-        * Executes the callback function for each item in array/object. If you return false in the
-        * callback it will break the loop.
-        *
-        * @method each
-        * @param {Object} obj Object to iterate.
-        * @param {function} callback Callback function to execute for each item.
-        */
</del><span class="cx">   function each(obj, callback) {
</span><span class="cx">          var length, key, i, undef, value;
</span><span class="cx"> 
</span><span class="lines">@@ -2787,7 +3509,7 @@
</span><span class="cx">                          for (key in obj) {
</span><span class="cx">                                  if (obj.hasOwnProperty(key)) {
</span><span class="cx">                                          value = obj[key];
</span><del>-                                               if (callback.call(value, value, key) === false) {
</del><ins>+                                                if (callback.call(value, key, value) === false) {
</ins><span class="cx">                                                   break;
</span><span class="cx">                                          }
</span><span class="cx">                                  }
</span><span class="lines">@@ -2796,7 +3518,7 @@
</span><span class="cx">                          // Loop array items
</span><span class="cx">                          for (i = 0; i < length; i++) {
</span><span class="cx">                                  value = obj[i];
</span><del>-                                       if (callback.call(value, value, key) === false) {
</del><ins>+                                        if (callback.call(value, i, value) === false) {
</ins><span class="cx">                                           break;
</span><span class="cx">                                  }
</span><span class="cx">                          }
</span><span class="lines">@@ -2806,11 +3528,65 @@
</span><span class="cx">          return obj;
</span><span class="cx">  }
</span><span class="cx"> 
</span><ins>+       function grep(array, callback) {
+               var out = [];
+
+               each(array, function(i, item) {
+                       if (callback(item, i)) {
+                               out.push(item);
+                       }
+               });
+
+               return out;
+       }
+
+       function getElementDocument(element) {
+               if (!element) {
+                       return doc;
+               }
+
+               if (element.nodeType == 9) {
+                       return element;
+               }
+
+               return element.ownerDocument;
+       }
+
</ins><span class="cx">   DomQuery.fn = DomQuery.prototype = {
</span><span class="cx">          constructor: DomQuery,
</span><ins>+
+               /**
+                * Selector for the current set.
+                *
+                * @property selector
+                * @type String
+                */
</ins><span class="cx">           selector: "",
</span><ins>+
+               /**
+                * Context used to create the set.
+                *
+                * @property context
+                * @type Element
+                */
+               context: null,
+
+               /**
+                * Number of items in the current set.
+                *
+                * @property length
+                * @type Number
+                */
</ins><span class="cx">           length: 0,
</span><span class="cx"> 
</span><ins>+               /**
+                * Constructs a new DomQuery instance with the specified selector or context.
+                *
+                * @constructor
+                * @method init
+                * @param {String/Array/DomQuery} selector Optional CSS selector/Array or array like object or HTML string.
+                * @param {Document/Element} context Optional context to search in.
+                */
</ins><span class="cx">           init: function(selector, context) {
</span><span class="cx">                  var self = this, match, node;
</span><span class="cx"> 
</span><span class="lines">@@ -2825,7 +3601,19 @@
</span><span class="cx">                          return self;
</span><span class="cx">                  }
</span><span class="cx"> 
</span><ins>+                       if (context && context.nodeType) {
+                               self.context = context;
+                       } else {
+                               if (context) {
+                                       return DomQuery(selector).attr(context);
+                               } else {
+                                       self.context = context = document;
+                               }
+                       }
+
</ins><span class="cx">                   if (isString(selector)) {
</span><ins>+                               self.selector = selector;
+
</ins><span class="cx">                           if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) {
</span><span class="cx">                                  match = [null, selector, null];
</span><span class="cx">                          } else {
</span><span class="lines">@@ -2834,14 +3622,19 @@
</span><span class="cx"> 
</span><span class="cx">                          if (match) {
</span><span class="cx">                                  if (match[1]) {
</span><del>-                                               node = createFragment(selector).firstChild;
</del><ins>+                                                node = createFragment(selector, getElementDocument(context)).firstChild;
+
</ins><span class="cx">                                           while (node) {
</span><del>-                                                       this.add(node);
</del><ins>+                                                        push.call(self, node);
</ins><span class="cx">                                                   node = node.nextSibling;
</span><span class="cx">                                          }
</span><span class="cx">                                  } else {
</span><del>-                                               node = doc.getElementById(match[2]);
</del><ins>+                                                node = getElementDocument(context).getElementById(match[2]);
</ins><span class="cx"> 
</span><ins>+                                               if (!node) {
+                                                       return self;
+                                               }
+
</ins><span class="cx">                                           if (node.id !== match[2]) {
</span><span class="cx">                                                  return self.find(selector);
</span><span class="cx">                                          }
</span><span class="lines">@@ -2850,70 +3643,189 @@
</span><span class="cx">                                          self[0] = node;
</span><span class="cx">                                  }
</span><span class="cx">                          } else {
</span><del>-                                       return DomQuery(context || document).find(selector);
</del><ins>+                                        return DomQuery(context).find(selector);
</ins><span class="cx">                           }
</span><span class="cx">                  } else {
</span><del>-                               this.add(selector);
</del><ins>+                                this.add(selector, false);
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  return self;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Converts the current set to an array.
+                *
+                * @method toArray
+                * @param {Array} Array of all nodes in set.
+                */
</ins><span class="cx">           toArray: function() {
</span><del>-                       return toArray(this);
</del><ins>+                        return Tools.toArray(this);
</ins><span class="cx">           },
</span><span class="cx"> 
</span><del>-               add: function(items) {
-                       var self = this;
</del><ins>+                /**
+                * Adds new nodes to the set.
+                *
+                * @method add
+                * @param {Array/tinymce.dom.DomQuery} items Array of all nodes to add to set.
+                * @return {tinymce.dom.DomQuery} New instance with nodes added.
+                */
+               add: function(items, sort) {
+                       var self = this, nodes, i;
</ins><span class="cx"> 
</span><del>-                       // Force single item into array
-                       if (!isArray(items)) {
-                               if (items instanceof DomQuery) {
-                                       self.add(items.toArray());
-                               } else {
-                                       push.call(self, items);
</del><ins>+                        if (isString(items)) {
+                               return self.add(DomQuery(items));
+                       }
+
+                       if (items.nodeType) {
+                               return self.add([items]);
+                       }
+
+                       if (sort !== false) {
+                               nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));
+                               self.length = nodes.length;
+                               for (i = 0; i < nodes.length; i++) {
+                                       self[i] = nodes[i];
</ins><span class="cx">                           }
</span><span class="cx">                  } else {
</span><del>-                               push.apply(self, items);
</del><ins>+                                push.apply(self, DomQuery.makeArray(items));
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  return self;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Sets/gets attributes on the elements in the current set.
+                *
+                * @method attr
+                * @param {String/Object} name Name of attribute to get or an object with attributes to set.
+                * @param {String} value Optional value to set.
+                * @return {tinymce.dom.DomQuery/String} Current set or the specified attribute when only the name is specified.
+                */
</ins><span class="cx">           attr: function(name, value) {
</span><del>-                       var self = this;
</del><ins>+                        var self = this, hook;
</ins><span class="cx"> 
</span><span class="cx">                  if (typeof name === "object") {
</span><del>-                               each(name, function(value, name) {
</del><ins>+                                each(name, function(name, value) {
</ins><span class="cx">                                   self.attr(name, value);
</span><span class="cx">                          });
</span><span class="cx">                  } else if (isDefined(value)) {
</span><span class="cx">                          this.each(function() {
</span><ins>+                                       var hook;
+
</ins><span class="cx">                                   if (this.nodeType === 1) {
</span><del>-                                               this.setAttribute(name, value);
</del><ins>+                                                hook = attrHooks[name];
+                                               if (hook && hook.set) {
+                                                       hook.set(this, value);
+                                                       return;
+                                               }
+
+                                               if (value === null) {
+                                                       this.removeAttribute(name, 2);
+                                               } else {
+                                                       this.setAttribute(name, value, 2);
+                                               }
</ins><span class="cx">                                   }
</span><span class="cx">                          });
</span><span class="cx">                  } else {
</span><del>-                               return self[0] && self[0].nodeType === 1 ? self[0].getAttribute(name) : undefined;
</del><ins>+                                if (self[0] && self[0].nodeType === 1) {
+                                       hook = attrHooks[name];
+                                       if (hook && hook.get) {
+                                               return hook.get(self[0], name);
+                                       }
+
+                                       if (booleanMap[name]) {
+                                               return self.prop(name) ? name : undef;
+                                       }
+
+                                       value = self[0].getAttribute(name, 2);
+
+                                       if (value === null) {
+                                               value = undef;
+                                       }
+                               }
+
+                               return value;
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  return self;
</span><span class="cx">          },
</span><span class="cx"> 
</span><del>-               css: function(name, value) {
</del><ins>+                /**
+                * Removes attributse on the elements in the current set.
+                *
+                * @method removeAttr
+                * @param {String/Object} name Name of attribute to remove.
+                * @return {tinymce.dom.DomQuery/String} Current set.
+                */
+               removeAttr: function(name) {
+                       return this.attr(name, null);
+               },
+
+               /**
+                * Sets/gets properties on the elements in the current set.
+                *
+                * @method attr
+                * @param {String/Object} name Name of property to get or an object with properties to set.
+                * @param {String} value Optional value to set.
+                * @return {tinymce.dom.DomQuery/String} Current set or the specified property when only the name is specified.
+                */
+               prop: function(name, value) {
</ins><span class="cx">                   var self = this;
</span><span class="cx"> 
</span><ins>+                       name = propFix[name] || name;
+
</ins><span class="cx">                   if (typeof name === "object") {
</span><del>-                               each(name, function(value, name) {
-                                       self.css(name, value);
</del><ins>+                                each(name, function(name, value) {
+                                       self.prop(name, value);
</ins><span class="cx">                           });
</span><ins>+                       } else if (isDefined(value)) {
+                               this.each(function() {
+                                       if (this.nodeType == 1) {
+                                               this[name] = value;
+                                       }
+                               });
</ins><span class="cx">                   } else {
</span><del>-                               // Camelcase it, if needed
-                               name = name.replace(/-(\D)/g, function(a, b) {
</del><ins>+                                if (self[0] && self[0].nodeType && name in self[0]) {
+                                       return self[0][name];
+                               }
+
+                               return value;
+                       }
+
+                       return self;
+               },
+
+               /**
+                * Sets/gets styles on the elements in the current set.
+                *
+                * @method css
+                * @param {String/Object} name Name of style to get or an object with styles to set.
+                * @param {String} value Optional value to set.
+                * @return {tinymce.dom.DomQuery/String} Current set or the specified style when only the name is specified.
+                */
+               css: function(name, value) {
+                       var self = this, elm, hook;
+
+                       function camel(name) {
+                               return name.replace(/-(\D)/g, function(a, b) {
</ins><span class="cx">                                   return b.toUpperCase();
</span><span class="cx">                          });
</span><ins>+                       }
</ins><span class="cx"> 
</span><ins>+                       function dashed(name) {
+                               return name.replace(/[A-Z]/g, function(a) {
+                                       return '-' + a;
+                               });
+                       }
+
+                       if (typeof name === "object") {
+                               each(name, function(name, value) {
+                                       self.css(name, value);
+                               });
+                       } else {
</ins><span class="cx">                           if (isDefined(value)) {
</span><ins>+                                       name = camel(name);
+
</ins><span class="cx">                                   // Default px suffix on these
</span><span class="cx">                                  if (typeof(value) === 'number' && !numericCssMap[name]) {
</span><span class="cx">                                          value += 'px';
</span><span class="lines">@@ -2922,25 +3834,55 @@
</span><span class="cx">                                  self.each(function() {
</span><span class="cx">                                          var style = this.style;
</span><span class="cx"> 
</span><del>-                                               // IE specific opacity
-                                               if (name === "opacity" && this.runtimeStyle && typeof(this.runtimeStyle.opacity) === "undefined") {
-                                                       style.filter = value === '' ? '' : "alpha(opacity=" + (value * 100) + ")";
</del><ins>+                                                hook = cssHooks[name];
+                                               if (hook && hook.set) {
+                                                       hook.set(this, value);
+                                                       return;
</ins><span class="cx">                                           }
</span><span class="cx"> 
</span><span class="cx">                                          try {
</span><del>-                                                       style[name] = value;
</del><ins>+                                                        this.style[cssFix[name] || name] = value;
</ins><span class="cx">                                           } catch (ex) {
</span><span class="cx">                                                  // Ignore
</span><span class="cx">                                          }
</span><ins>+
+                                               if (value === null || value === '') {
+                                                       if (style.removeProperty) {
+                                                               style.removeProperty(dashed(name));
+                                                       } else {
+                                                               style.removeAttribute(name);
+                                                       }
+                                               }
</ins><span class="cx">                                   });
</span><span class="cx">                          } else {
</span><del>-                                       return self[0] ? self[0].style[name] : undefined;
</del><ins>+                                        elm = self[0];
+
+                                       hook = cssHooks[name];
+                                       if (hook && hook.get) {
+                                               return hook.get(elm);
+                                       }
+
+                                       if (elm.ownerDocument.defaultView) {
+                                               try {
+                                                       return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));
+                                               } catch (ex) {
+                                                       return undef;
+                                               }
+                                       } else if (elm.currentStyle) {
+                                               return elm.currentStyle[camel(name)];
+                                       }
</ins><span class="cx">                           }
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="cx">                  return self;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Removes all nodes in set from the document.
+                *
+                * @method remove
+                * @return {tinymce.dom.DomQuery} Current set with the removed nodes.
+                */
</ins><span class="cx">           remove: function() {
</span><span class="cx">                  var self = this, node, i = this.length;
</span><span class="cx"> 
</span><span class="lines">@@ -2956,6 +3898,12 @@
</span><span class="cx">                  return this;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Empties all elements in set.
+                *
+                * @method empty
+                * @return {tinymce.dom.DomQuery} Current set with the empty nodes.
+                */
</ins><span class="cx">           empty: function() {
</span><span class="cx">                  var self = this, node, i = this.length;
</span><span class="cx"> 
</span><span class="lines">@@ -2969,13 +3917,26 @@
</span><span class="cx">                  return this;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Sets or gets the HTML of the current set or first set node.
+                *
+                * @method html
+                * @param {String} value Optional innerHTML value to set on each element.
+                * @return {tinymce.dom.DomQuery/String} Current set or the innerHTML of the first element.
+                */
</ins><span class="cx">           html: function(value) {
</span><span class="cx">                  var self = this, i;
</span><span class="cx"> 
</span><span class="cx">                  if (isDefined(value)) {
</span><span class="cx">                          i = self.length;
</span><del>-                               while (i--) {
-                                       self[i].innerHTML = value;
</del><ins>+
+                               try {
+                                       while (i--) {
+                                               self[i].innerHTML = value;
+                                       }
+                               } catch (ex) {
+                                       // Workaround for "Unkown runtime error" when DIV is added to P on IE
+                                       DomQuery(self[i]).empty().append(value);
</ins><span class="cx">                           }
</span><span class="cx"> 
</span><span class="cx">                          return self;
</span><span class="lines">@@ -2984,21 +3945,39 @@
</span><span class="cx">                  return self[0] ? self[0].innerHTML : '';
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Sets or gets the text of the current set or first set node.
+                *
+                * @method text
+                * @param {String} value Optional innerText value to set on each element.
+                * @return {tinymce.dom.DomQuery/String} Current set or the innerText of the first element.
+                */
</ins><span class="cx">           text: function(value) {
</span><span class="cx">                  var self = this, i;
</span><span class="cx"> 
</span><span class="cx">                  if (isDefined(value)) {
</span><span class="cx">                          i = self.length;
</span><span class="cx">                          while (i--) {
</span><del>-                                       self[i].innerText = self[0].textContent = value;
</del><ins>+                                        if ("innerText" in self[i]) {
+                                               self[i].innerText = value;
+                                       } else {
+                                               self[0].textContent = value;
+                                       }
</ins><span class="cx">                           }
</span><span class="cx"> 
</span><span class="cx">                          return self;
</span><span class="cx">                  }
</span><span class="cx"> 
</span><del>-                       return self[0] ? self[0].innerText || self[0].textContent : '';
</del><ins>+                        return self[0] ? (self[0].innerText || self[0].textContent) : '';
</ins><span class="cx">           },
</span><span class="cx"> 
</span><ins>+               /**
+                * Appends the specified node/html or node set to the current set nodes.
+                *
+                * @method append
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to append to each element in set.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           append: function() {
</span><span class="cx">                  return domManipulate(this, arguments, function(node) {
</span><span class="cx">                          if (this.nodeType === 1) {
</span><span class="lines">@@ -3007,70 +3986,216 @@
</span><span class="cx">                  });
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Prepends the specified node/html or node set to the current set nodes.
+                *
+                * @method prepend
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to prepend to each element in set.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           prepend: function() {
</span><span class="cx">                  return domManipulate(this, arguments, function(node) {
</span><span class="cx">                          if (this.nodeType === 1) {
</span><span class="cx">                                  this.insertBefore(node, this.firstChild);
</span><span class="cx">                          }
</span><del>-                       });
</del><ins>+                        }, true);
</ins><span class="cx">           },
</span><span class="cx"> 
</span><ins>+               /**
+                * Adds the specified elements before current set nodes.
+                *
+                * @method before
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to add before to each element in set.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           before: function() {
</span><span class="cx">                  var self = this;
</span><span class="cx"> 
</span><span class="cx">                  if (self[0] && self[0].parentNode) {
</span><span class="cx">                          return domManipulate(self, arguments, function(node) {
</span><del>-                                       this.parentNode.insertBefore(node, this.nextSibling);
</del><ins>+                                        this.parentNode.insertBefore(node, this);
</ins><span class="cx">                           });
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="cx">                  return self;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Adds the specified elements after current set nodes.
+                *
+                * @method after
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to add after to each element in set.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           after: function() {
</span><span class="cx">                  var self = this;
</span><span class="cx"> 
</span><span class="cx">                  if (self[0] && self[0].parentNode) {
</span><span class="cx">                          return domManipulate(self, arguments, function(node) {
</span><del>-                                       this.parentNode.insertBefore(node, this);
-                               });
</del><ins>+                                        this.parentNode.insertBefore(node, this.nextSibling);
+                               }, true);
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  return self;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Appends the specified set nodes to the specified selector/instance.
+                *
+                * @method appendTo
+                * @param {String/Element/Array/tinymce.dom.DomQuery} val Item to append the current set to.
+                * @return {tinymce.dom.DomQuery} Current set with the appended nodes.
+                */
</ins><span class="cx">           appendTo: function(val) {
</span><span class="cx">                  DomQuery(val).append(this);
</span><span class="cx"> 
</span><span class="cx">                  return this;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Prepends the specified set nodes to the specified selector/instance.
+                *
+                * @method prependTo
+                * @param {String/Element/Array/tinymce.dom.DomQuery} val Item to prepend the current set to.
+                * @return {tinymce.dom.DomQuery} Current set with the prepended nodes.
+                */
+               prependTo: function(val) {
+                       DomQuery(val).prepend(this);
+
+                       return this;
+               },
+
+               /**
+                * Replaces the nodes in set with the specified content.
+                *
+                * @method replaceWith
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to replace nodes with.
+                * @return {tinymce.dom.DomQuery} Set with replaced nodes.
+                */
+               replaceWith: function(content) {
+                       return this.before(content).remove();
+               },
+
+               /**
+                * Wraps all elements in set with the specified wrapper.
+                *
+                * @method wrap
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to wrap nodes with.
+                * @return {tinymce.dom.DomQuery} Set with wrapped nodes.
+                */
+               wrap: function(wrapper) {
+                       return wrap(this, wrapper);
+               },
+
+               /**
+                * Wraps all nodes in set with the specified wrapper. If the nodes are siblings all of them
+                * will be wrapped in the same wrapper.
+                *
+                * @method wrapAll
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to wrap nodes with.
+                * @return {tinymce.dom.DomQuery} Set with wrapped nodes.
+                */
+               wrapAll: function(wrapper) {
+                       return wrap(this, wrapper, true);
+               },
+
+               /**
+                * Wraps all elements inner contents in set with the specified wrapper.
+                *
+                * @method wrapInner
+                * @param {String/Element/Array/tinymce.dom.DomQuery} content Content to wrap nodes with.
+                * @return {tinymce.dom.DomQuery} Set with wrapped nodes.
+                */
+               wrapInner: function(wrapper) {
+                       this.each(function() {
+                               DomQuery(this).contents().wrapAll(wrapper);
+                       });
+
+                       return this;
+               },
+
+               /**
+                * Unwraps all elements by removing the parent element of each item in set.
+                *
+                * @method unwrap
+                * @return {tinymce.dom.DomQuery} Set with unwrapped nodes.
+                */
+               unwrap: function() {
+                       return this.parent().each(function() {
+                               DomQuery(this).replaceWith(this.childNodes);
+                       });
+               },
+
+               /**
+                * Clones all nodes in set.
+                *
+                * @method clone
+                * @return {tinymce.dom.DomQuery} Set with cloned nodes.
+                */
+               clone: function() {
+                       var result = [];
+
+                       this.each(function() {
+                               result.push(this.cloneNode(true));
+                       });
+
+                       return DomQuery(result);
+               },
+
+               /**
+                * Adds the specified class name to the current set elements.
+                *
+                * @method addClass
+                * @param {String} className Class name to add.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           addClass: function(className) {
</span><span class="cx">                  return this.toggleClass(className, true);
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Removes the specified class name to the current set elements.
+                *
+                * @method removeClass
+                * @param {String} className Class name to remove.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           removeClass: function(className) {
</span><span class="cx">                  return this.toggleClass(className, false);
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Toggles the specified class name on the current set elements.
+                *
+                * @method toggleClass
+                * @param {String} className Class name to add/remove.
+                * @param {Boolean} state Optional state to toggle on/off.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           toggleClass: function(className, state) {
</span><span class="cx">                  var self = this;
</span><span class="cx"> 
</span><ins>+                       // Functions are not supported
+                       if (typeof className != 'string') {
+                               return self;
+                       }
+
</ins><span class="cx">                   if (className.indexOf(' ') !== -1) {
</span><span class="cx">                          each(className.split(' '), function() {
</span><span class="cx">                                  self.toggleClass(this, state);
</span><span class="cx">                          });
</span><span class="cx">                  } else {
</span><del>-                               self.each(function(node) {
-                                       var existingClassName;
</del><ins>+                                self.each(function(index, node) {
+                                       var existingClassName, classState;
</ins><span class="cx"> 
</span><del>-                                       if (hasClass(node, className) !== state) {
</del><ins>+                                        classState = hasClass(node, className);
+                                       if (classState !== state) {
</ins><span class="cx">                                           existingClassName = node.className;
</span><span class="cx"> 
</span><del>-                                               if (state) {
</del><ins>+                                                if (classState) {
+                                                       node.className = trim((" " + existingClassName + " ").replace(' ' + className + ' ', ' '));
+                                               } else {
</ins><span class="cx">                                                   node.className += existingClassName ? ' ' + className : className;
</span><del>-                                               } else {
-                                                       node.className = trim((" " + existingClassName + " ").replace(' ' + className + ' ', ' '));
</del><span class="cx">                                           }
</span><span class="cx">                                  }
</span><span class="cx">                          });
</span><span class="lines">@@ -3079,100 +4204,234 @@
</span><span class="cx">                  return self;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Returns true/false if the first item in set has the specified class.
+                *
+                * @method hasClass
+                * @param {String} className Class name to check for.
+                * @return {Boolean} True/false if the set has the specified class.
+                */
</ins><span class="cx">           hasClass: function(className) {
</span><span class="cx">                  return hasClass(this[0], className);
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Executes the callback function for each item DomQuery collection. If you return false in the
+                * callback it will break the loop.
+                *
+                * @method each
+                * @param {function} callback Callback function to execute for each item.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           each: function(callback) {
</span><span class="cx">                  return each(this, callback);
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Binds an event with callback function to the elements in set.
+                *
+                * @method on
+                * @param {String} name Name of the event to bind.
+                * @param {function} callback Callback function to execute when the event occurs.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           on: function(name, callback) {
</span><span class="cx">                  return this.each(function() {
</span><span class="cx">                          Event.bind(this, name, callback);
</span><span class="cx">                  });
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Unbinds an event with callback function to the elements in set.
+                *
+                * @method off
+                * @param {String} name Optional name of the event to bind.
+                * @param {function} callback Optional callback function to execute when the event occurs.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           off: function(name, callback) {
</span><span class="cx">                  return this.each(function() {
</span><span class="cx">                          Event.unbind(this, name, callback);
</span><span class="cx">                  });
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Triggers the specified event by name or event object.
+                *
+                * @method trigger
+                * @param {String/Object} name Name of the event to trigger or event object.
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
+               trigger: function(name) {
+                       return this.each(function() {
+                               if (typeof name == 'object') {
+                                       Event.fire(this, name.type, name);
+                               } else {
+                                       Event.fire(this, name);
+                               }
+                       });
+               },
+
+               /**
+                * Shows all elements in set.
+                *
+                * @method show
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           show: function() {
</span><span class="cx">                  return this.css('display', '');
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Hides all elements in set.
+                *
+                * @method hide
+                * @return {tinymce.dom.DomQuery} Current set.
+                */
</ins><span class="cx">           hide: function() {
</span><span class="cx">                  return this.css('display', 'none');
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Slices the current set.
+                *
+                * @method slice
+                * @param {Number} start Start index to slice at.
+                * @param {Number} end Optional ened index to end slice at.
+                * @return {tinymce.dom.DomQuery} Sliced set.
+                */
</ins><span class="cx">           slice: function() {
</span><span class="cx">                  return new DomQuery(slice.apply(this, arguments));
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Makes the set equal to the specified index.
+                *
+                * @method eq
+                * @param {Number} index Index to set it equal to.
+                * @return {tinymce.dom.DomQuery} Single item set.
+                */
</ins><span class="cx">           eq: function(index) {
</span><span class="cx">                  return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Makes the set equal to first element in set.
+                *
+                * @method first
+                * @return {tinymce.dom.DomQuery} Single item set.
+                */
</ins><span class="cx">           first: function() {
</span><span class="cx">                  return this.eq(0);
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Makes the set equal to last element in set.
+                *
+                * @method last
+                * @return {tinymce.dom.DomQuery} Single item set.
+                */
</ins><span class="cx">           last: function() {
</span><span class="cx">                  return this.eq(-1);
</span><span class="cx">          },
</span><span class="cx"> 
</span><del>-               replaceWith: function(content) {
-                       var self = this;
</del><ins>+                /**
+                * Finds elements by the specified selector for each element in set.
+                *
+                * @method find
+                * @param {String} selector Selector to find elements by.
+                * @return {tinymce.dom.DomQuery} Set with matches elements.
+                */
+               find: function(selector) {
+                       var i, l, ret = [];
</ins><span class="cx"> 
</span><del>-                       if (self[0]) {
-                               self[0].parentNode.replaceChild(DomQuery(content)[0], self[0]);
</del><ins>+                        for (i = 0, l = this.length; i < l; i++) {
+                               DomQuery.find(selector, this[i], ret);
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><del>-                       return self;
</del><ins>+                        return DomQuery(ret);
</ins><span class="cx">           },
</span><span class="cx"> 
</span><del>-               wrap: function(wrapper) {
-                       wrapper = DomQuery(wrapper)[0];
</del><ins>+                /**
+                * Filters the current set with the specified selector.
+                *
+                * @method filter
+                * @param {String/function} selector Selector to filter elements by.
+                * @return {tinymce.dom.DomQuery} Set with filtered elements.
+                */
+               filter: function(selector) {
+                       if (typeof selector == 'function') {
+                               return DomQuery(grep(this.toArray(), function(item, i) {
+                                       return selector(i, item);
+                               }));
+                       }
</ins><span class="cx"> 
</span><del>-                       return this.each(function() {
-                               var self = this, newWrapper = wrapper.cloneNode(false);
-                               self.parentNode.insertBefore(newWrapper, self);
-                               newWrapper.appendChild(self);
-                       });
</del><ins>+                        return DomQuery(DomQuery.filter(selector, this.toArray()));
</ins><span class="cx">           },
</span><span class="cx"> 
</span><del>-               unwrap: function() {
-                       return this.each(function() {
-                               var self = this, node = self.firstChild, currentNode;
</del><ins>+                /**
+                * Gets the current node or any partent matching the specified selector.
+                *
+                * @method closest
+                * @param {String/Element/tinymce.dom.DomQuery} selector Selector or element to find.
+                * @return {tinymce.dom.DomQuery} Set with closest elements.
+                */
+               closest: function(selector) {
+                       var result = [];
</ins><span class="cx"> 
</span><ins>+                       if (selector instanceof DomQuery) {
+                               selector = selector[0];
+                       }
+
+                       this.each(function(i, node) {
</ins><span class="cx">                           while (node) {
</span><del>-                                       currentNode = node;
-                                       node = node.nextSibling;
-                                       self.parentNode.insertBefore(currentNode, self);
</del><ins>+                                        if (typeof selector == 'string' && DomQuery(node).is(selector)) {
+                                               result.push(node);
+                                               break;
+                                       } else if (node == selector) {
+                                               result.push(node);
+                                               break;
+                                       }
+
+                                       node = node.parentNode;
</ins><span class="cx">                           }
</span><span class="cx">                  });
</span><ins>+
+                       return DomQuery(result);
</ins><span class="cx">           },
</span><span class="cx"> 
</span><del>-               clone: function() {
-                       var result = [];
</del><ins>+                /**
+                * Returns the offset of the first element in set or sets the top/left css properties of all elements in set.
+                *
+                * @method offset
+                * @param {Object} offset Optional offset object to set on each item.
+                * @return {Object/tinymce.dom.DomQuery} Returns the first element offset or the current set if you specified an offset.
+                */
+               offset: function(offset) {
+                       var elm, doc, docElm;
+                       var x = 0, y = 0, pos;
</ins><span class="cx"> 
</span><del>-                       this.each(function() {
-                               result.push(this.cloneNode(true));
-                       });
</del><ins>+                        if (!offset) {
+                               elm = this[0];
</ins><span class="cx"> 
</span><del>-                       return DomQuery(result);
-               },
</del><ins>+                                if (elm) {
+                                       doc = elm.ownerDocument;
+                                       docElm = doc.documentElement;
</ins><span class="cx"> 
</span><del>-               find: function(selector) {
-                       var i, l, ret = [];
</del><ins>+                                        if (elm.getBoundingClientRect) {
+                                               pos = elm.getBoundingClientRect();
+                                               x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;
+                                               y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;
+                                       }
+                               }
</ins><span class="cx"> 
</span><del>-                       for (i = 0, l = this.length; i < l; i++) {
-                               DomQuery.find(selector, this[i], ret);
</del><ins>+                                return {
+                                       left: x,
+                                       top: y
+                               };
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><del>-                       return DomQuery(ret);
</del><ins>+                        return this.css(offset);
</ins><span class="cx">           },
</span><span class="cx"> 
</span><span class="cx">          push: push,
</span><span class="lines">@@ -3181,21 +4440,90 @@
</span><span class="cx">  };
</span><span class="cx"> 
</span><span class="cx">  // Static members
</span><del>-       extend(DomQuery, {
-               extend: extend,
-               toArray: toArray,
</del><ins>+        Tools.extend(DomQuery, {
+               /**
+                * Extends the specified object with one or more objects.
+                *
+                * @static
+                * @method extend
+                * @param {Object} target Target object to extend with new items.
+                * @param {Object..} object Object to extend the target with.
+                * @return {Object} Extended input object.
+                */
+               extend: Tools.extend,
+
+               /**
+                * Creates an array out of an array like object.
+                *
+                * @static
+                * @method makeArray
+                * @param {Object} object Object to convert to array.
+                * @return {Arrau} Array produced from object.
+                */
+               makeArray: Tools.toArray,
+
+               /**
+                * Returns the index of the specified item inside the array.
+                *
+                * @static
+                * @method inArray
+                * @param {Object} item Item to look for.
+                * @param {Array} array Array to look for item in.
+                * @return {Number} Index of the item or -1.
+                */
</ins><span class="cx">           inArray: inArray,
</span><del>-               isArray: isArray,
</del><ins>+
+               /**
+                * Returns true/false if the specified object is an array or not.
+                *
+                * @static
+                * @method isArray
+                * @param {Object} array Object to check if it's an array or not.
+                * @return {Boolean} True/false if the object is an array.
+                */
+               isArray: Tools.isArray,
+
+               /**
+                * Executes the callback function for each item in array/object. If you return false in the
+                * callback it will break the loop.
+                *
+                * @static
+                * @method each
+                * @param {Object} obj Object to iterate.
+                * @param {function} callback Callback function to execute for each item.
+                */
</ins><span class="cx">           each: each,
</span><ins>+
+               /**
+                * Removes whitespace from the beginning and end of a string.
+                *
+                * @static
+                * @method trim
+                * @param {String} str String to remove whitespace from.
+                * @return {String} New string with removed whitespace.
+                */
</ins><span class="cx">           trim: trim,
</span><del>-               makeMap: makeMap,
</del><span class="cx"> 
</span><ins>+               /**
+                * Filters out items from the input array by calling the specified function for each item.
+                * If the function returns false the item will be excluded if it returns true it will be included.
+                *
+                * @static
+                * @method grep
+                * @param {Array} array Array of items to loop though.
+                * @param {function} callback Function to call for each item. Include/exclude depends on it's return value.
+                * @return {Array} New array with values imported and filtered based in input.
+                * @example
+                * // Filter out some items, this will return an array with 4 and 5
+                * var items = DomQuery.grep([1, 2, 3, 4, 5], function(v) {return v > 3;});
+                */
+               grep: grep,
+
</ins><span class="cx">           // Sizzle
</span><span class="cx">          find: Sizzle,
</span><span class="cx">          expr: Sizzle.selectors,
</span><span class="cx">          unique: Sizzle.uniqueSort,
</span><span class="cx">          text: Sizzle.getText,
</span><del>-               isXMLDoc: Sizzle.isXML,
</del><span class="cx">           contains: Sizzle.contains,
</span><span class="cx">          filter: function(expr, elems, not) {
</span><span class="cx">                  if (not) {
</span><span class="lines">@@ -3215,7 +4543,21 @@
</span><span class="cx">  function dir(el, prop, until) {
</span><span class="cx">          var matched = [], cur = el[prop];
</span><span class="cx"> 
</span><del>-               while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !DomQuery(cur).is(until))) {
</del><ins>+                if (typeof until != 'string' && until instanceof DomQuery) {
+                       until = until[0];
+               }
+
+               while (cur && cur.nodeType !== 9) {
+                       if (until !== undefined) {
+                               if (cur === until) {
+                                       break;
+                               }
+
+                               if (typeof until == 'string' && DomQuery(cur).is(until)) {
+                                       break;
+                               }
+                       }
+
</ins><span class="cx">                   if (cur.nodeType === 1) {
</span><span class="cx">                          matched.push(cur);
</span><span class="cx">                  }
</span><span class="lines">@@ -3226,71 +4568,139 @@
</span><span class="cx">          return matched;
</span><span class="cx">  }
</span><span class="cx"> 
</span><del>-       function sibling(n, el, siblingName, nodeType) {
-               var r = [];
</del><ins>+        function sibling(node, siblingName, nodeType, until) {
+               var result = [];
</ins><span class="cx"> 
</span><del>-               for(; n; n = n[siblingName]) {
-                       if ((!nodeType || n.nodeType === nodeType) && n !== el) {
-                               r.push(n);
</del><ins>+                if (until instanceof DomQuery) {
+                       until = until[0];
+               }
+
+               for (; node; node = node[siblingName]) {
+                       if (nodeType && node.nodeType !== nodeType) {
+                               continue;
</ins><span class="cx">                   }
</span><ins>+
+                       if (until !== undefined) {
+                               if (node === until) {
+                                       break;
+                               }
+
+                               if (typeof until == 'string' && DomQuery(node).is(until)) {
+                                       break;
+                               }
+                       }
+
+                       result.push(node);
</ins><span class="cx">           }
</span><span class="cx"> 
</span><del>-               return r;
</del><ins>+                return result;
</ins><span class="cx">   }
</span><span class="cx"> 
</span><ins>+       function firstSibling(node, siblingName, nodeType) {
+               for (node = node[siblingName]; node; node = node[siblingName]) {
+                       if (node.nodeType == nodeType) {
+                               return node;
+                       }
+               }
+
+               return null;
+       }
+
</ins><span class="cx">   each({
</span><ins>+               /**
+                * Returns a new collection with the parent of each item in current collection matching the optional selector.
+                *
+                * @method parent
+                * @param {String} selector Selector to match parents agains.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching parents.
+                */
</ins><span class="cx">           parent: function(node) {
</span><span class="cx">                  var parent = node.parentNode;
</span><span class="cx"> 
</span><span class="cx">                  return parent && parent.nodeType !== 11 ? parent : null;
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Returns a new collection with the all the parents of each item in current collection matching the optional selector.
+                *
+                * @method parents
+                * @param {String} selector Selector to match parents agains.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching parents.
+                */
</ins><span class="cx">           parents: function(node) {
</span><span class="cx">                  return dir(node, "parentNode");
</span><span class="cx">          },
</span><span class="cx"> 
</span><del>-               parentsUntil: function(node, until) {
-                       return dir(node, "parentNode", until);
-               },
-
</del><ins>+                /**
+                * Returns a new collection with next sibling of each item in current collection matching the optional selector.
+                *
+                * @method next
+                * @param {String} selector Selector to match the next element against.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
+                */
</ins><span class="cx">           next: function(node) {
</span><del>-                       return sibling(node, 'nextSibling', 1);
</del><ins>+                        return firstSibling(node, 'nextSibling', 1);
</ins><span class="cx">           },
</span><span class="cx"> 
</span><ins>+               /**
+                * Returns a new collection with previous sibling of each item in current collection matching the optional selector.
+                *
+                * @method prev
+                * @param {String} selector Selector to match the previous element against.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
+                */
</ins><span class="cx">           prev: function(node) {
</span><del>-                       return sibling(node, 'previousSibling', 1);
</del><ins>+                        return firstSibling(node, 'previousSibling', 1);
</ins><span class="cx">           },
</span><span class="cx"> 
</span><del>-               nextNodes: function(node) {
-                       return sibling(node, 'nextSibling');
-               },
-
-               prevNodes: function(node) {
-                       return sibling(node, 'previousSibling');
-               },
-
</del><ins>+                /**
+                * Returns all child elements matching the optional selector.
+                *
+                * @method children
+                * @param {String} selector Selector to match the elements against.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
+                */
</ins><span class="cx">           children: function(node) {
</span><span class="cx">                  return sibling(node.firstChild, 'nextSibling', 1);
</span><span class="cx">          },
</span><span class="cx"> 
</span><ins>+               /**
+                * Returns all child nodes matching the optional selector.
+                *
+                * @method contents
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
+                */
</ins><span class="cx">           contents: function(node) {
</span><del>-                       return toArray((node.nodeName === "iframe" ? node.contentDocument || node.contentWindow.document : node).childNodes);
</del><ins>+                        return Tools.toArray((node.nodeName === "iframe" ? node.contentDocument || node.contentWindow.document : node).childNodes);
</ins><span class="cx">           }
</span><del>-       }, function(name, fn){
</del><ins>+        }, function(name, fn) {
</ins><span class="cx">           DomQuery.fn[name] = function(selector) {
</span><del>-                       var self = this, result;
</del><ins>+                        var self = this, result = [];
</ins><span class="cx"> 
</span><del>-                       if (self.length > 1) {
-                               throw new Error("DomQuery only supports traverse functions on a single node.");
-                       }
</del><ins>+                        self.each(function() {
+                               var nodes = fn.call(result, this, selector, result);
</ins><span class="cx"> 
</span><del>-                       if (self[0]) {
-                               result = fn(self[0], selector);
</del><ins>+                                if (nodes) {
+                                       if (DomQuery.isArray(nodes)) {
+                                               result.push.apply(result, nodes);
+                                       } else {
+                                               result.push(nodes);
+                                       }
+                               }
+                       });
+
+                       // If traversing on multiple elements we might get the same elements twice
+                       if (this.length > 1) {
+                               result = DomQuery.unique(result);
+
+                               if (name.indexOf('parents') === 0) {
+                                       result = result.reverse();
+                               }
</ins><span class="cx">                   }
</span><span class="cx"> 
</span><span class="cx">                  result = DomQuery(result);
</span><span class="cx"> 
</span><del>-                       if (selector && name !== "parentsUntil") {
</del><ins>+                        if (selector) {
</ins><span class="cx">                           return result.filter(selector);
</span><span class="cx">                  }
</span><span class="cx"> 
</span><span class="lines">@@ -3298,16 +4708,185 @@
</span><span class="cx">          };
</span><span class="cx">  });
</span><span class="cx"> 
</span><del>-       DomQuery.fn.filter = function(selector) {
-               return DomQuery.filter(selector);
-       };
</del><ins>+        each({
+               /**
+                * Returns a new collection with the all the parents until the matching selector/element
+                * of each item in current collection matching the optional selector.
+                *
+                * @method parentsUntil
+                * @param {String/Element/tinymce.dom.DomQuery} until Until the matching selector or element.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching parents.
+                */
+               parentsUntil: function(node, until) {
+                       return dir(node, "parentNode", until);
+               },
</ins><span class="cx"> 
</span><ins>+               /**
+                * Returns a new collection with all next siblings of each item in current collection matching the optional selector.
+                *
+                * @method nextUntil
+                * @param {String/Element/tinymce.dom.DomQuery} until Until the matching selector or element.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
+                */
+               nextUntil: function(node, until) {
+                       return sibling(node, 'nextSibling', 1, until).slice(1);
+               },
+
+               /**
+                * Returns a new collection with all previous siblings of each item in current collection matching the optional selector.
+                *
+                * @method prevUntil
+                * @param {String/Element/tinymce.dom.DomQuery} until Until the matching selector or element.
+                * @return {tinymce.dom.DomQuery} New DomQuery instance with all matching elements.
+                */
+               prevUntil: function(node, until) {
+                       return sibling(node, 'previousSibling', 1, until).slice(1);
+               }
+       }, function(name, fn) {
+               DomQuery.fn[name] = function(selector, filter) {
+                       var self = this, result = [];
+
+                       self.each(function() {
+                               var nodes = fn.call(result, this, selector, result);
+
+                               if (nodes) {
+                                       if (DomQuery.isArray(nodes)) {
+                                               result.push.apply(result, nodes);
+                                       } else {
+                                               result.push(nodes);
+                                       }
+                               }
+                       });
+
+                       // If traversing on multiple elements we might get the same elements twice
+                       if (this.length > 1) {
+                               result = DomQuery.unique(result);
+
+                               if (name.indexOf('parents') === 0 || name === 'prevUntil') {
+                                       result = result.reverse();
+                               }
+                       }
+
+                       result = DomQuery(result);
+
+                       if (filter) {
+                               return result.filter(filter);
+                       }
+
+                       return result;
+               };
+       });
+
+       /**
+        * Returns true/false if the current set items matches the selector.
+        *
+        * @method is
+        * @param {String} selector Selector to match the elements against.
+        * @return {Boolean} True/false if the current set matches the selector.
+        */
</ins><span class="cx">   DomQuery.fn.is = function(selector) {
</span><span class="cx">          return !!selector && this.filter(selector).length > 0;
</span><span class="cx">  };
</span><span class="cx"> 
</span><span class="cx">  DomQuery.fn.init.prototype = DomQuery.fn;
</span><span class="cx"> 
</span><ins>+       DomQuery.overrideDefaults = function(callback) {
+               var defaults;
+
+               function jQuerySub(selector, context) {
+                       defaults = defaults || callback();
+
+                       if (arguments.length === 0) {
+                               selector = defaults.element;
+                       }
+
+                       if (!context) {
+                               context = defaults.context;
+                       }
+
+                       return new jQuerySub.fn.init(selector, context);
+               }
+
+               DomQuery.extend(jQuerySub, this);
+
+               return jQuerySub;
+       };
+
+       function appendHooks(targetHooks, prop, hooks) {
+               each(hooks, function(name, func) {
+                       targetHooks[name] = targetHooks[name] || {};
+                       targetHooks[name][prop] = func;
+               });
+       }
+
+       if (Env.ie && Env.ie < 8) {
+               appendHooks(attrHooks, 'get', {
+                       maxlength: function(elm) {
+                               var value = elm.maxLength;
+
+                               if (value === 0x7fffffff) {
+                                       return undef;
+                               }
+
+                               return value;
+                       },
+
+                       size: function(elm) {
+                               var value = elm.size;
+
+                               if (value === 20) {
+                                       return undef;
+                               }
+
+                               return value;
+                       },
+
+                       'class': function(elm) {
+                               return elm.className;
+                       },
+
+                       style: function(elm) {
+                               var value = elm.style.cssText;
+
+                               if (value.length === 0) {
+                                       return undef;
+                               }
+
+                               return value;
+                       }
+               });
+
+               appendHooks(attrHooks, 'set', {
+                       'class': function(elm, value) {
+                               elm.className = value;
+                       },
+
+                       style: function(elm, value) {
+                               elm.style.cssText = value;
+                       }
+               });
+       }
+
+       if (Env.ie && Env.ie < 9) {
+               cssFix.float = 'styleFloat';
+
+               appendHooks(cssHooks, 'set', {
+                       opacity: function(elm, value) {
+                               var style = elm.style;
+
+                               if (value === null || value === '') {
+                                       style.removeAttribute('filter');
+                               } else {
+                                       style.zoom = 1;
+                                       style.filter = 'alpha(opacity=' + (value * 100) + ')';
+                               }
+                       }
+               });
+       }
+
+       DomQuery.attrHooks = attrHooks;
+       DomQuery.cssHooks = cssHooks;
+
</ins><span class="cx">   return DomQuery;
</span><span class="cx"> });
</span><span class="cx"> 
</span><span class="lines">@@ -3693,30 +5272,44 @@
</span><span class="cx">  * TreeWalker class enables you to walk the DOM in a linear manner.
</span><span class="cx">  *
</span><span class="cx">  * @class tinymce.dom.TreeWalker
</span><ins>+ * @example
+ * var walker = new tinymce.dom.TreeWalker(startNode);
+ *
+ * do {
+ *     console.log(walker.current());
+ * } while (walker.next());
</ins><span class="cx">  */
</span><span class="cx"> define("tinymce/dom/TreeWalker", [], function() {
</span><del>-       return function(start_node, root_node) {
-               var node = start_node;
</del><ins>+        /**
+        * Constructs a new TreeWalker instance.
+        *
+        * @constructor
+        * @method TreeWalker
+        * @param {Node} startNode Node to start walking from.
+        * @param {node} rootNode Optional root node to never walk out of.
+        */
+       return function(startNode, rootNode) {
+               var node = startNode;
</ins><span class="cx"> 
</span><del>-               function findSibling(node, start_name, sibling_name, shallow) {
</del><ins>+                function findSibling(node, startName, siblingName, shallow) {
</ins><span class="cx">                   var sibling, parent;
</span><span class="cx"> 
</span><span class="cx">                  if (node) {
</span><span class="cx">                          // Walk into nodes if it has a start
</span><del>-                               if (!shallow && node[start_name]) {
-                                       return node[start_name];
</del><ins>+                                if (!shallow && node[startName]) {
+                                       return node[startName];
</ins><span class="cx">                           }
</span><span class="cx"> 
</span><span class="cx">                          // Return the sibling if it has one
</span><del>-                               if (node != root_node) {
-                                       sibling = node[sibling_name];
</del><ins>+                                if (node != rootNode) {
+                                       sibling = node[siblingName];
</ins><span class="cx">                                   if (sibling) {
</span><span class="cx">                                          return sibling;
</span><span class="cx">                                  }
</span><span class="cx"> 
</span><span class="cx">                                  // Walk up the parents to look for siblings
</span><del>-                                       for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {
-                                               sibling = parent[sibling_name];
</del><ins>+                                        for (parent = node.parentNode; parent && parent != rootNode; parent = parent.parentNode) {
+                                               sibling = parent[siblingName];
</ins><span class="cx">                                           if (sibling) {
</span><span class="cx">                                                  return sibling;
</span><span class="cx">                                          }
</span><span class="lines">@@ -3759,512 +5352,6 @@
</span><span class="cx">  };
</span><span class="cx"> });
</span><span class="cx"> 
</span><del>-// Included