// wupload.js
if(!RedactorPlugins){var RedactorPlugins={}}RedactorPlugins.wupload=function(){return{_boundGlobalUploadEvents:false,_dropArea:{},_timer:null,_isDragging:false,_isFile:false,init:function(){var a=".redactor_"+this.$textarea.wcfIdentify();$(document).on("dragover"+a,$.proxy(this.wupload._dragOver,this));$(document).on("dragleave"+a,$.proxy(this.wupload._dragLeave,this));$(document).on("drop"+a,(function(b){b.preventDefault();this.wupload._revertDropArea(undefined,this.$textarea.wcfIdentify())}).bind(this));if(!this.wupload._boundGlobalUploadEvents){this.wupload._boundGlobalUploadEvents=true;$(document).on("dragend",function(b){b.preventDefault()})}WCF.System.Event.addListener("com.woltlab.wcf.attachment","autoInsert_"+this.$textarea.wcfIdentify(),$.proxy(this.wupload.insertPastedImageAttachment,this))},_dragOver:function(d){d=d.originalEvent;if(!d.dataTransfer||!d.dataTransfer.types){return}var e=false;for(var c in d.dataTransfer){if(/^moz/.test(c)){e=true;break}}this.wupload._isFile=false;if(e){if(d.dataTransfer.types[0]==="application/x-moz-file"){this.wupload._isFile=true}}else{for(var g=0;g<d.dataTransfer.types.length;g++){if(d.dataTransfer.types[g]==="Files"){this.wupload._isFile=true;break}}}if(!this.wupload._isFile){return}this.wupload._isFile=true;d.preventDefault();if(!this.wupload._isDragging){var b=this.$textarea.wcfIdentify();if(this.wupload._dropArea[b]===undefined){this.wupload._dropArea[b]=$('<div class="redactorDropArea">'+WCF.Language.get("wcf.attachment.dragAndDrop.dropHere")+"</div>").hide().appendTo(document.body);this.wupload._dropArea[b].on("dragover",$.proxy(this.wupload._hoverDropArea,this)).on("dragleave",$.proxy(this.wupload._revertDropArea,this)).on("drop",$.proxy(this.wupload._drop,this))}var a=(this.wutil.inWysiwygMode())?this.$editor.getDimensions("outer"):this.$textarea.getDimensions("outer");var f=(this.wutil.inWysiwygMode())?this.$editor.getOffsets("offset"):this.$textarea.getOffsets("offset");this.wupload._dropArea[b].css({height:a.height+"px",left:f.left+"px",lineHeight:a.height+"px",top:f.top+"px",width:a.width+"px"}).show();this.wupload._isDragging=true}d.preventDefault()},_hoverDropArea:function(a){this.wupload._dropArea[this.$textarea.wcfIdentify()].addClass("active").text(WCF.Language.get("wcf.attachment.dragAndDrop.dropNow"))},_revertDropArea:function(c,a){if(!this.wupload._isFile){return}var b=a||this.$textarea.wcfIdentify();this.wupload._dropArea[b].removeClass("active").text(WCF.Language.get("wcf.attachment.dragAndDrop.dropHere"));if(a){this.wupload._dropArea[b].hide()}},_dragLeave:function(){if(!this.wupload._isDragging||!this.wupload._isFile){return}if(this.wupload._timer===null){this.wupload._timer=new WCF.PeriodicalExecuter((function(a){a.stop();if(!this.wupload._isDragging){this.wupload._dropArea[this.$textarea.wcfIdentify()].hide()}}).bind(this),100)}else{this.wupload._timer.resume()}this.wupload._isDragging=false},_drop:function(c){if(!this.wupload._isFile){return}c=c.originalEvent||c;if(c.dataTransfer&&c.dataTransfer.files.length){c.preventDefault();var b=this.$textarea.wcfIdentify();this.wupload._revertDropArea(undefined,b);for(var d=0;d<c.dataTransfer.files.length;d++){var a=c.dataTransfer.files[d];if(a.type){WCF.System.Event.fireEvent("com.woltlab.wcf.redactor","upload_"+b,{file:a})}}}},pasteClipboardUploadMozilla:function(){this.$editor.find("img[data-mozilla-paste-image]").each($.proxy(function(d,g){var f=$(g);var a=f.prop("src").split(",");var e=a[0].split(";")[0].split(":")[1];var c=a[1];var b={blob:WCF.base64toBlob(c,e),uploadID:null};WCF.System.Event.fireEvent("com.woltlab.wcf.redactor","upload_"+this.$textarea.wcfIdentify(),b);f.replaceWith('<span class="redactor-pastedImageFromClipboard-'+b.uploadID+'" />')},this))},insertPastedImageAttachment:function(b){var a=this.$editor.find("span.redactor-pastedImageFromClipboard-"+b.uploadID);a.before(b.attachment);a.remove()}}};
// wutil.js
-if(!RedactorPlugins){var RedactorPlugins={}}RedactorPlugins.wutil=function(){var b="";var c=null;var a=false;var d=null;return{_autosaveWorker:null,_range:null,init:function(){this.$textarea.parents("form").submit($.proxy(this.wutil.submit,this));if(this.wutil.getOption("woltlab.autosave").active){this.wutil.autosaveEnable();if(this.wutil.getOption("woltlab.autosave").saveOnInit||this.$textarea.data("saveOnInit")){this.wutil.setOption("woltlab.autosaveOnce",true)}else{this.wutil.autosaveRestore()}}this.wutil.setOption("autosave",false);var e=this.core.destroy;this.core.destroy=(function(){this.wutil.autosaveDisable();e.call(this)}).bind(this)},saveSelection:function(){var e=getSelection();if(e.rangeCount){this.wutil._range=e.getRangeAt(0)}},restoreSelection:function(){if(document.activeElement!==this.$editor[0]){this.$editor.focus()}if(this.wutil._range!==null){var e=window.getSelection();e.removeAllRanges();e.addRange(this.wutil._range);this.wutil._range=null}},clearSelection:function(){this._wutil.range=null},insertAtCaret:function(f){if(this.opts.visual){console.debug("insertAtCaret() failed: Editor is in WYSIWYG-mode.");return false}this.$textarea.focus();var g=this.$textarea.getCaret();if(g==-1){console.debug("insertAtCaret() failed: Source is not input[type=text], input[type=password] or textarea.")}var e=this.$textarea.val();e=e.substr(0,g)+f+e.substr(g);this.$textarea.val(e);return true},insertDynamic:function(e,f){if(this.wutil.inWysiwygMode()){this.insert.html(e,false)}else{if(f===undefined||f===null){f=e}this.wutil.insertAtCaret(f)}},setOption:function(e,f){if(e.indexOf(".")!==-1){e=e.split(".",2);this.opts[e[0]][e[1]]=f}else{this.opts[e]=f}},getOption:function(e){if(e.indexOf(".")!==-1){e=e.split(".",2);if(this.opts[e[0]][e[1]]){return this.opts[e[0]][e[1]]}}else{if(this.opts[e]){return this.opts[e]}}return null},inPlainMode:function(){return !this.opts.visual},inWysiwygMode:function(){return(this.opts.visual)},replaceRangesWith:function(e){getSelection().removeAllRanges();getSelection().addRange(e)},getText:function(){if(this.wutil.inWysiwygMode()){this.code.startSync();var e=this.$textarea.val();this.$textarea.val($.trim(this.wbbcode.convertFromHtml(e)))}var f=$.trim(this.$textarea.val());f=f.replace(/\[\/quote\]\n/g,"[/quote]");return f},isEmptyEditor:function(){if(this.opts.visual){return this.utils.isEmpty(this.$editor.html())}return(!$.trim(this.$textarea.val()))},submit:function(){if(this.wutil.inWysiwygMode()){this.code.startSync();this.$textarea.val($.trim(this.wbbcode.convertFromHtml(this.$textarea.val())))}this.wutil.autosavePurge()},reset:function(){if(this.opts.visual){this.$editor.html("<p>"+this.opts.invisibleSpace+"</p>");this.wutil.saveSelection()}this.$textarea.val("");WCF.System.Event.fireEvent("com.woltlab.wcf.redactor","reset",{wysiwygContainerID:this.$textarea.wcfIdentify()})},autosaveEnable:function(e){if(!this.wutil.getOption("woltlab.autosave").active){this.wutil.setOption("woltlab.autosave",{active:true,key:e})}if(this.wutil._autosaveWorker===null){this.wutil.autosavePurgeOutdated();this.wutil._autosaveWorker=new WCF.PeriodicalExecuter((function(f){this.wutil.saveTextToStorage(false)}).bind(this),15*1000)}return true},saveTextToStorage:function(g){var f=this.wutil.getText();if(b==f&&!g){return}try{localStorage.setItem(this.wutil.getOption("woltlab.autosave").key,JSON.stringify({content:f,timestamp:Date.now()}));b=f;a=true;if(d===null){d=new WCF.PeriodicalExecuter((function(e){if(a===false){e.stop();d=null;return}this.wutil.autosaveShowNotice("saved");a=false}).bind(this),120*1000)}}catch(h){console.debug("[wutil.saveTextToStorage] Unable to access local storage: "+h.message)}},autosaveDisable:function(){if(!this.wutil.getOption("woltlab.autosave").active){return false}this.wutil._autosaveWorker.stop();this.wutil._autosaveWorker=null;this.wutil.setOption("woltlab.autosave",{active:false,key:""});return true},autosavePurge:function(){try{localStorage.removeItem(this.wutil.getOption("woltlab.autosave").key)}catch(f){console.debug("[wutil.autosavePurge] Unable to access local storage: "+f.message)}},autosaveRestore:function(){var f=this.wutil.getOption("woltlab.autosave");var g=null;try{g=localStorage.getItem(f.key)}catch(h){console.debug("[wutil.autosaveRestore] Unable to access local storage: "+h.message)}try{g=(g===null)?null:JSON.parse(g)}catch(h){g=null}if(g===null||!g.content){return false}if(this.wutil.inWysiwygMode()){this.wutil.setOption("woltlab.originalValue",g.content)}else{this.$textarea.val(g.content)}this.wutil.autosaveShowNotice("restored",{timestamp:g.timestamp});WCF.DOMNodeInsertedHandler.execute();return true},autosaveShowNotice:function(h,j){if(c===null){c=$('<div class="redactorAutosaveNotice"><span class="redactorAutosaveMessage" /></div>');c.appendTo(this.$box);c.on("transitionend webkitTransitionEnd",(function(k){if(k.originalEvent.propertyName!=="opacity"){return}if(c.hasClass("open")){if(c.data("callbackOpen")){c.data("callbackOpen")()}}else{if(c.data("callbackClose")){c.data("callbackClose")()}c.removeData("callbackClose");c.removeData("callbackOpen");c.removeClass("redactorAutosaveNoticeRestore");c.empty();$('<span class="redactorAutosaveMessage" />').appendTo(c)}}).bind(this))}var g="";switch(h){case"restored":$('<span class="icon icon16 fa-info blue jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.restored.version",{date:new Date(j.timestamp).toLocaleString()})+'"></span>').prependTo(c);var i=$('<span class="icon icon16 fa-check green pointer jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.restored.confirm")+'"></span>').appendTo(c);var e=$('<span class="icon icon16 fa-times red pointer jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.restored.revert")+'"></span>').appendTo(c);i.click(function(){c.removeClass("open")});e.click((function(){WCF.System.Confirmation.show(WCF.Language.get("wcf.message.autosave.restored.revert.confirmMessage"),(function(k){if(k==="confirm"){this.wutil.reset();this.wutil.autosavePurge();c.removeClass("open")}}).bind(this))}).bind(this));g=WCF.Language.get("wcf.message.autosave.restored");c.addClass("redactorAutosaveNoticeRestore");var f="";f=WCF.System.Event.addListener("com.woltlab.wcf.redactor","keydown_"+this.$textarea.wcfIdentify(),(function(k){WCF.System.Event.removeListener("com.woltlab.wcf.redactor","keydown_"+this.$textarea.wcfIdentify(),f);setTimeout(function(){i.trigger("click")},3000)}).bind(this));break;case"saved":if(c.hasClass("open")){return}setTimeout(function(){c.removeClass("open")},2000);g=WCF.Language.get("wcf.message.autosave.saved");break}c.children("span.redactorAutosaveMessage").text(g);c.addClass("open")},autosavePurgeOutdated:function(){var j=0;var m=this.wutil.getOption("woltlab.autosave").prefix;var l=m+"_wcf_master";try{j=localStorage.getItem(l)}catch(k){console.debug("[wutil.autosavePurgeOutdated] Unable to access local storage: "+k.message)}if(j===0){return}var f=Date.now()-(7*24*3600*1000);if(j===null||j<f){var i=new RegExp("^"+m+"_");for(var h in localStorage){if(h.match(i)&&h!==l){var g=localStorage.getItem(h);try{g=JSON.parse(g)}catch(k){g={timestamp:0}}if(g===null||!g.timestamp||g.timestamp<f){try{localStorage.removeItem(h)}catch(k){console.debug("[wutil.autosavePurgeOutdated] Unable to access local storage: "+k.message)}}}}try{localStorage.setItem(l,Date.now())}catch(k){console.debug("[wutil.autosavePurgeOutdated] Unable to access local storage: "+k.message)}}},buttonReplace:function(h,f,i,k,j){var e=this.buttonGet(h);var g=this.buttonAddAfter(h,f,i,k,j);if(e.parent().hasClass("separator")){g.parent().addClass("separator")}e.parent().remove();return g},removeZeroWidthSpace:function(e){var f="";for(var i=0,h=e.length;i<h;i++){var g=e.charCodeAt(i).toString(16);if(g!="200b"){f+=e[i]}}return f},getSource:function(){return this.$textarea},getName:function(){return this.$textarea.wcfIdentify()},selectionEndOfEditor:function(){this.focus.setEnd();var e=this.$editor.children(":last")[0];if(e.tagName==="P"){if(e.innerHTML===""){e.remove();e=$(this.opts.emptyHtml).appendTo(this.$editor)[0]}if(e.lastChild.nodeType===Element.TEXT_NODE){this.caret.set(e.lastChild,e.lastChild.length,e.lastChild,e.lastChild.length)}else{this.caret.setEnd(e)}}else{this.wutil.setCaretAfter(e)}this.wutil.saveSelection()},adjustSelectionForBlockElement:function(){if(document.activeElement!==this.$editor[0]){this.wutil.restoreSelection()}if(getSelection().getRangeAt(0).collapsed){var g=getSelection().getRangeAt(0).startContainer;if(g.nodeType===Node.TEXT_NODE&&g.textContent==="\u200b"&&g.parentElement.tagName==="P"&&g.parentElement.parentElement===this.$editor[0]){return}else{var e=$(g).parentsUntil(this.$editor[0]).last();if(e[0]===document.body.parentElement){this.wutil.selectionEndOfEditor()}else{var f=$("<p><br></p>").insertAfter(e);this.caret.setEnd(f)}}}},isCaret:function(){this.selection.get();return this.range.collapsed},isEndOfElement:function(e){this.selection.get();if(!this.wutil.isCaret()){return false}if(this.range.endContainer.nodeType===Element.TEXT_NODE){if(this.range.endOffset<this.range.endContainer.length){return false}}if(!this.wutil.isNodeWithin(this.range.endContainer,e)){return false}var f=this.range.endContainer;while(f!==e){if(f.nextSibling){return false}f=f.parentNode}return true},isNodeWithin:function(g,f){var e=$(g);while(e[0]!==this.$editor[0]){if(e[0]===f){return true}e=e.parent()}return false},containsTag:function(f,e){switch(f.nodeType){case Element.ELEMENT_NODE:if(f.tagName===e){return true}case Element.DOCUMENT_FRAGMENT_NODE:for(var g=0;g<f.childNodes.length;g++){if(this.wutil.containsTag(f.childNodes[g],e)){return true}}return false;break;default:return false;break}},replaceText:function(g){var h=$(document);var e=h.scrollTop();var f=false;if(this.wutil.inWysiwygMode()){this.code.toggle();f=true}this.$textarea.val(g);if(f){this.code.toggle();h.scrollTop(e)}h.trigger("resize")},setCaretBefore:function(e){this.wutil._setCaret(e,true)},setCaretAfter:function(e){this.wutil._setCaret(e,false)},_setCaret:function(f,g){var e=$(this.opts.emptyHtml);e[(g?"insertBefore":"insertAfter")](f);this.caret.setEnd(e[0])},fixDOM:function(){var h=this.$editor[0].childNodes[0];var e=h;var f=null;while(e){h=e;e=h.nextSibling;if(h.nodeType===Element.ELEMENT_NODE){if(this.reIsBlock.test(h.tagName)){f=null}else{if(f===null){f=$("<p />").insertBefore(h)}f.append(h)}}else{if(h.nodeType===Element.TEXT_NODE){if(f===null){if(e){if(e.nodeType===Element.ELEMENT_NODE&&e.tagName==="P"&&e.innerHTML==="\u200B"){var g=e.nextSibling;this.$editor[0].removeChild(e);e=g}}f=$("<p />").insertBefore(h)}f.append(h)}}}}}};
+if(!RedactorPlugins){var RedactorPlugins={}}RedactorPlugins.wutil=function(){var b="";var c=null;var a=false;var d=null;return{_autosaveWorker:null,_range:null,init:function(){this.$textarea.parents("form").submit($.proxy(this.wutil.submit,this));if(this.wutil.getOption("woltlab.autosave").active){this.wutil.autosaveEnable();if(this.wutil.getOption("woltlab.autosave").saveOnInit||this.$textarea.data("saveOnInit")){this.wutil.setOption("woltlab.autosaveOnce",true)}else{this.wutil.autosaveRestore()}}this.wutil.setOption("autosave",false);var e=this.core.destroy;this.core.destroy=(function(){this.wutil.autosaveDisable();e.call(this)}).bind(this)},saveSelection:function(){var e=getSelection();if(e.rangeCount){this.wutil._range=e.getRangeAt(0)}},restoreSelection:function(){if(document.activeElement!==this.$editor[0]){this.$editor.focus()}if(this.wutil._range!==null){var e=window.getSelection();e.removeAllRanges();e.addRange(this.wutil._range);this.wutil._range=null}},clearSelection:function(){this._wutil.range=null},insertAtCaret:function(f){if(this.opts.visual){console.debug("insertAtCaret() failed: Editor is in WYSIWYG-mode.");return false}this.$textarea.focus();var g=this.$textarea.getCaret();if(g==-1){console.debug("insertAtCaret() failed: Source is not input[type=text], input[type=password] or textarea.")}var e=this.$textarea.val();e=e.substr(0,g)+f+e.substr(g);this.$textarea.val(e);return true},insertDynamic:function(e,f){if(this.wutil.inWysiwygMode()){this.insert.html(e,false)}else{if(f===undefined||f===null){f=e}this.wutil.insertAtCaret(f)}},setOption:function(e,f){if(e.indexOf(".")!==-1){e=e.split(".",2);this.opts[e[0]][e[1]]=f}else{this.opts[e]=f}},getOption:function(e){if(e.indexOf(".")!==-1){e=e.split(".",2);if(this.opts[e[0]][e[1]]){return this.opts[e[0]][e[1]]}}else{if(this.opts[e]){return this.opts[e]}}return null},inPlainMode:function(){return !this.opts.visual},inWysiwygMode:function(){return(this.opts.visual)},replaceRangesWith:function(e){getSelection().removeAllRanges();getSelection().addRange(e)},getText:function(){if(this.wutil.inWysiwygMode()){this.code.startSync();var e=this.$textarea.val();this.$textarea.val($.trim(this.wbbcode.convertFromHtml(e)))}var f=$.trim(this.$textarea.val());f=f.replace(/\[\/quote\]\n/g,"[/quote]");return f},isEmptyEditor:function(){if(this.opts.visual){return this.utils.isEmpty(this.$editor.html())}return(!$.trim(this.$textarea.val()))},submit:function(){if(this.wutil.inWysiwygMode()){this.code.startSync();this.$textarea.val($.trim(this.wbbcode.convertFromHtml(this.$textarea.val())))}this.wutil.autosavePurge()},reset:function(){if(this.opts.visual){this.$editor.html("<p>"+this.opts.invisibleSpace+"</p>");this.wutil.saveSelection()}this.$textarea.val("");WCF.System.Event.fireEvent("com.woltlab.wcf.redactor","reset",{wysiwygContainerID:this.$textarea.wcfIdentify()})},autosaveEnable:function(e){if(!this.wutil.getOption("woltlab.autosave").active){this.wutil.setOption("woltlab.autosave",{active:true,key:e})}if(this.wutil._autosaveWorker===null){this.wutil.autosavePurgeOutdated();this.wutil._autosaveWorker=new WCF.PeriodicalExecuter((function(f){this.wutil.saveTextToStorage(false)}).bind(this),15*1000)}return true},saveTextToStorage:function(g){var f=this.wutil.getText();if(b==f&&!g){return}try{localStorage.setItem(this.wutil.getOption("woltlab.autosave").key,JSON.stringify({content:f,timestamp:Date.now()}));b=f;a=true;if(d===null){d=new WCF.PeriodicalExecuter((function(e){if(a===false){e.stop();d=null;return}this.wutil.autosaveShowNotice("saved");a=false}).bind(this),120*1000)}}catch(h){console.debug("[wutil.saveTextToStorage] Unable to access local storage: "+h.message)}},autosaveDisable:function(){if(!this.wutil.getOption("woltlab.autosave").active){return false}this.wutil._autosaveWorker.stop();this.wutil._autosaveWorker=null;this.wutil.setOption("woltlab.autosave",{active:false,key:""});return true},autosavePurge:function(){try{localStorage.removeItem(this.wutil.getOption("woltlab.autosave").key)}catch(f){console.debug("[wutil.autosavePurge] Unable to access local storage: "+f.message)}},autosaveRestore:function(){var f=this.wutil.getOption("woltlab.autosave");var g=null;try{g=localStorage.getItem(f.key)}catch(h){console.debug("[wutil.autosaveRestore] Unable to access local storage: "+h.message)}try{g=(g===null)?null:JSON.parse(g)}catch(h){g=null}if(g===null||!g.content){return false}if(f.lastEditTime&&(f.lastEditTime*1000)>g.timestamp){this.wutil.autosavePurge();return false}if(f.prompt){this.wutil.autosaveShowNotice("prompt",g);return false}if(this.wutil.inWysiwygMode()){this.wutil.setOption("woltlab.originalValue",g.content)}else{this.$textarea.val(g.content)}this.wutil.autosaveShowNotice("restored",{timestamp:g.timestamp});return true},autosaveShowNotice:function(i,k){if(c===null){c=$('<div class="redactorAutosaveNotice"><span class="redactorAutosaveMessage" /></div>');c.appendTo(this.$box);var g=(function(l){if(l!==null&&l.originalEvent.propertyName!=="opacity"){return}if(c.hasClass("open")&&l!==null){if(c.data("callbackOpen")){c.data("callbackOpen")()}}else{if(c.data("callbackClose")){c.data("callbackClose")()}c.removeData("callbackClose");c.removeData("callbackOpen");c.removeClass("redactorAutosaveNoticeIcons");c.empty();$('<span class="redactorAutosaveMessage" />').appendTo(c)}}).bind(this);c.on("transitionend webkitTransitionEnd",g)}var h="";switch(i){case"prompt":$('<span class="icon icon16 fa-info blue jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.restored.version",{date:new Date(k.timestamp).toLocaleString()})+'"></span>').prependTo(c);var j=$('<span class="icon icon16 fa-check green pointer jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.prompt.confirm")+'"></span>').appendTo(c);var e=$('<span class="icon icon16 fa-times red pointer jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.prompt.discard")+'"></span>').appendTo(c);console.debug(k);j.click((function(){this.wutil.replaceText(k.content);g(null);this.wutil.autosaveShowNotice("restored",k)}).bind(this));e.click((function(){this.wutil.autosavePurge();c.removeClass("open")}).bind(this));h=WCF.Language.get("wcf.message.autosave.prompt");c.addClass("redactorAutosaveNoticeIcons");var f="";f=WCF.System.Event.addListener("com.woltlab.wcf.redactor","keydown_"+this.$textarea.wcfIdentify(),(function(l){WCF.System.Event.removeListener("com.woltlab.wcf.redactor","keydown_"+this.$textarea.wcfIdentify(),f);setTimeout(function(){c.removeClass("open")},3000)}).bind(this));break;case"restored":$('<span class="icon icon16 fa-info blue jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.restored.version",{date:new Date(k.timestamp).toLocaleString()})+'"></span>').prependTo(c);var j=$('<span class="icon icon16 fa-check green pointer jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.restored.confirm")+'"></span>').appendTo(c);var e=$('<span class="icon icon16 fa-times red pointer jsTooltip" title="'+WCF.Language.get("wcf.message.autosave.restored.revert")+'"></span>').appendTo(c);j.click(function(){c.removeClass("open")});e.click((function(){WCF.System.Confirmation.show(WCF.Language.get("wcf.message.autosave.restored.revert.confirmMessage"),(function(l){if(l==="confirm"){this.wutil.reset();this.wutil.autosavePurge();c.removeClass("open")}}).bind(this))}).bind(this));h=WCF.Language.get("wcf.message.autosave.restored");c.addClass("redactorAutosaveNoticeIcons");var f="";f=WCF.System.Event.addListener("com.woltlab.wcf.redactor","keydown_"+this.$textarea.wcfIdentify(),(function(l){WCF.System.Event.removeListener("com.woltlab.wcf.redactor","keydown_"+this.$textarea.wcfIdentify(),f);setTimeout(function(){j.trigger("click")},3000)}).bind(this));break;case"saved":if(c.hasClass("open")){return}setTimeout(function(){c.removeClass("open")},2000);h=WCF.Language.get("wcf.message.autosave.saved");break}c.children("span.redactorAutosaveMessage").text(h);c.addClass("open");if(i!=="saved"){WCF.DOMNodeInsertedHandler.execute()}},autosavePurgeOutdated:function(){var j=0;var m=this.wutil.getOption("woltlab.autosave").prefix;var l=m+"_wcf_master";try{j=localStorage.getItem(l)}catch(k){console.debug("[wutil.autosavePurgeOutdated] Unable to access local storage: "+k.message)}if(j===0){return}var f=Date.now()-(7*24*3600*1000);if(j===null||j<f){var i=new RegExp("^"+m+"_");for(var h in localStorage){if(h.match(i)&&h!==l){var g=localStorage.getItem(h);try{g=JSON.parse(g)}catch(k){g={timestamp:0}}if(g===null||!g.timestamp||g.timestamp<f){try{localStorage.removeItem(h)}catch(k){console.debug("[wutil.autosavePurgeOutdated] Unable to access local storage: "+k.message)}}}}try{localStorage.setItem(l,Date.now())}catch(k){console.debug("[wutil.autosavePurgeOutdated] Unable to access local storage: "+k.message)}}},buttonReplace:function(h,f,i,k,j){var e=this.buttonGet(h);var g=this.buttonAddAfter(h,f,i,k,j);if(e.parent().hasClass("separator")){g.parent().addClass("separator")}e.parent().remove();return g},removeZeroWidthSpace:function(e){var f="";for(var i=0,h=e.length;i<h;i++){var g=e.charCodeAt(i).toString(16);if(g!="200b"){f+=e[i]}}return f},getSource:function(){return this.$textarea},getName:function(){return this.$textarea.wcfIdentify()},selectionEndOfEditor:function(){this.focus.setEnd();var e=this.$editor.children(":last")[0];if(e.tagName==="P"){if(e.innerHTML===""){e.remove();e=$(this.opts.emptyHtml).appendTo(this.$editor)[0]}if(e.lastChild.nodeType===Element.TEXT_NODE){this.caret.set(e.lastChild,e.lastChild.length,e.lastChild,e.lastChild.length)}else{this.caret.setEnd(e)}}else{this.wutil.setCaretAfter(e)}this.wutil.saveSelection()},adjustSelectionForBlockElement:function(){if(document.activeElement!==this.$editor[0]){this.wutil.restoreSelection()}if(getSelection().getRangeAt(0).collapsed){var g=getSelection().getRangeAt(0).startContainer;if(g.nodeType===Node.TEXT_NODE&&g.textContent==="\u200b"&&g.parentElement.tagName==="P"&&g.parentElement.parentElement===this.$editor[0]){return}else{var e=$(g).parentsUntil(this.$editor[0]).last();if(e[0]===document.body.parentElement){this.wutil.selectionEndOfEditor()}else{var f=$("<p><br></p>").insertAfter(e);this.caret.setEnd(f)}}}},isCaret:function(){this.selection.get();return this.range.collapsed},isEndOfElement:function(e){this.selection.get();if(!this.wutil.isCaret()){return false}if(this.range.endContainer.nodeType===Element.TEXT_NODE){if(this.range.endOffset<this.range.endContainer.length){return false}}if(!this.wutil.isNodeWithin(this.range.endContainer,e)){return false}var f=this.range.endContainer;while(f!==e){if(f.nextSibling){return false}f=f.parentNode}return true},isNodeWithin:function(g,f){var e=$(g);while(e[0]!==this.$editor[0]){if(e[0]===f){return true}e=e.parent()}return false},containsTag:function(f,e){switch(f.nodeType){case Element.ELEMENT_NODE:if(f.tagName===e){return true}case Element.DOCUMENT_FRAGMENT_NODE:for(var g=0;g<f.childNodes.length;g++){if(this.wutil.containsTag(f.childNodes[g],e)){return true}}return false;break;default:return false;break}},replaceText:function(g){var h=$(document);var e=h.scrollTop();var f=false;if(this.wutil.inWysiwygMode()){this.code.toggle();f=true}this.$textarea.val(g);if(f){this.code.toggle();h.scrollTop(e)}h.trigger("resize")},setCaretBefore:function(e){this.wutil._setCaret(e,true)},setCaretAfter:function(e){this.wutil._setCaret(e,false)},_setCaret:function(f,g){var e=$(this.opts.emptyHtml);e[(g?"insertBefore":"insertAfter")](f);this.caret.setEnd(e[0])},fixDOM:function(){var h=this.$editor[0].childNodes[0];var e=h;var f=null;while(e){h=e;e=h.nextSibling;if(h.nodeType===Element.ELEMENT_NODE){if(this.reIsBlock.test(h.tagName)){f=null}else{if(f===null){f=$("<p />").insertBefore(h)}f.append(h)}}else{if(h.nodeType===Element.TEXT_NODE){if(f===null){if(e){if(e.nodeType===Element.ELEMENT_NODE&&e.tagName==="P"&&e.innerHTML==="\u200B"){var g=e.nextSibling;this.$editor[0].removeChild(e);e=g}}f=$("<p />").insertBefore(h)}f.append(h)}}}}}};