(function(e){"use strict";var t,r=r||(t={},{add:function(e,r){var n;if("object"==typeof e)for(n=0;n<e.length;n++){var a=e[n];t[a]||(t[a]=[]),t[a].push(r)}else t[e]||(t[e]=[]),t[e].push(r)},get:function(e){if(t[e])return t[e]}}),n=n||function(t){"function"!=typeof String.prototype.repeat&&(String.prototype.repeat=function(e){if(e<1)return"";if(e%2)return this.repeat(e-1)+this;var t=this.repeat(e/2);return t+t}),"function"!=typeof Array.prototype.filter&&(Array.prototype.filter=function(e){if(null===this)throw new TypeError;var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw new TypeError;for(var n=[],a=arguments[1],o=0;o<r;o++)if(o in t){var i=t[o];e.call(a,i,o,t)&&n.push(i)}return n});var n,a,o,i={textarea:null,replaceTab:!0,softTabs:!0,tabSize:4,autoOpen:!0,overwrite:!0,autoStrip:!0,autoIndent:!0,fence:!1},s={keyMap:[{open:'"',close:'"',canBreak:!1},{open:"'",close:"'",canBreak:!1},{open:"(",close:")",canBreak:!1},{open:"[",close:"]",canBreak:!0},{open:"{",close:"}",canBreak:!0}]},c={_callHook:function(t,n){var a=r.get(t);if(n="boolean"!=typeof n||!1!==n,a)if(n){var o,s=i.textarea,l=s.value,u=c.cursor.get();for(o=0;o<a.length;o++)a[o].call(e,{editor:{element:s,text:l,levelsDeep:c.levelsDeep()},caret:{pos:u},lines:{current:c.cursor.getLine(l,u),total:c.editor.getLines(l)}})}else for(o=0;o<a.length;o++)a[o].call(e)},defineNewLine:function(){var e=document.createElement("textarea");e.value="\n",a=2==e.value.length?"\r\n":"\n"},defineTabSize:function(e){void 0===i.textarea.style.OTabSize?void 0===i.textarea.style.MozTabSize?void 0===i.textarea.style.tabSize||(i.textarea.style.tabSize=e):i.textarea.style.MozTabSize=e:i.textarea.style.OTabSize=e},cursor:{getLine:function(e,t){return e.substring(0,t).split("\n").length},get:function(){if("number"==typeof document.createElement("textarea").selectionStart)return i.textarea.selectionStart;if(document.selection){var e=0,t=i.textarea.createTextRange(),r=document.selection.createRange().duplicate().getBookmark();for(t.moveToBookmark(r);0!==t.moveStart("character",-1);)e++;return e}},set:function(e,t){if(t||(t=e),i.textarea.setSelectionRange)i.textarea.trigger("focus"),i.textarea.setSelectionRange(e,t);else if(i.textarea.createTextRange){var r=i.textarea.createTextRange();r.collapse(!0),r.moveEnd("character",t),r.moveStart("character",e),r.trigger("select")}},selection:function(){var e,t,r,n,o,s=i.textarea,l=0,u=0;return"number"==typeof s.selectionStart&&"number"==typeof s.selectionEnd?(l=s.selectionStart,u=s.selectionEnd):(t=document.selection.createRange())&&t.parentElement()==s&&(n=(e=c.editor.get()).length,(r=s.createTextRange()).moveToBookmark(t.getBookmark()),(o=s.createTextRange()).collapse(!1),r.compareEndPoints("StartToEnd",o)>-1?l=u=n:(l=-r.moveStart("character",-n),l+=e.slice(0,l).split(a).length-1,r.compareEndPoints("EndToEnd",o)>-1?u=n:(u=-r.moveEnd("character",-n),u+=e.slice(0,u).split(a).length-1))),l!=u&&{start:l,end:u}}},editor:{getLines:function(e){return e.split("\n").length},get:function(){return i.textarea.value.replace(/\r/g,"")},set:function(e){i.textarea.value=e}},fenceRange:function(){if("string"==typeof i.fence){for(var e=c.editor.get(),t=c.cursor.get(),r=0,n=e.indexOf(i.fence),a=0;n>=0&&(a++,!(t<n+r));)r+=n+i.fence.length,n=(e=e.substring(n+i.fence.length)).indexOf(i.fence);return r<t&&n+r>t&&a%2==0}return!0},isEven:function(e,t){return t%2},levelsDeep:function(){var e,t,r=c.cursor.get(),n=c.editor.get().substring(0,r),a=0;for(e=0;e<n.length;e++)for(t=0;t<s.keyMap.length;t++)s.keyMap[t].canBreak&&(s.keyMap[t].open==n.charAt(e)&&a++,s.keyMap[t].close==n.charAt(e)&&a--);var o=0,i=["'",'"'];for(e=0;e<s.keyMap.length;e++)if(s.keyMap[e].canBreak)for(t in i)o+=n.split(i[t]).filter(c.isEven).join("").split(s.keyMap[e].open).length-1;var l=a-o;return l>=0?l:0},deepExtend:function(e,t){for(var r in t)t[r]&&t[r].constructor&&t[r].constructor===Object?(e[r]=e[r]||{},c.deepExtend(e[r],t[r])):e[r]=t[r];return e},addEvent:function(e,t,r){e.addEventListener?e.addEventListener(t,r,!1):e.attachEvent&&e.attachEvent("on"+t,r)},removeEvent:function(e,t,r){e.addEventListener?e.removeEventListener(t,r,!1):e.attachEvent&&e.detachEvent("on"+t,r)},preventDefaultEvent:function(e){e.preventDefault?e.preventDefault():e.returnValue=!1}},l=function(e){if(c.fenceRange()){if(9==e.keyCode){c.preventDefaultEvent(e);var t=!0;c._callHook("tab:before");var r=c.cursor.selection(),a=c.cursor.get(),o=c.editor.get();if(r){for(var i=r.start;i--;)if("\n"==o.charAt(i)){r.start=i+1;break}var s,l=o.substring(r.start,r.end),u=l.split("\n");if(e.shiftKey){for(s=0;s<u.length;s++)u[s].substring(0,n.length)==n&&(u[s]=u[s].substring(n.length));l=u.join("\n"),c.editor.set(o.substring(0,r.start)+l+o.substring(r.end)),c.cursor.set(r.start,r.start+l.length)}else{for(s in u)u[s]=n+u[s];l=u.join("\n"),c.editor.set(o.substring(0,r.start)+l+o.substring(r.end)),c.cursor.set(r.start,r.start+l.length)}}else{var f=o.substring(0,a),d=o.substring(a),g=f+n+d;e.shiftKey?o.substring(a-n.length,a)==n&&(g=o.substring(0,a-n.length)+d,c.editor.set(g),c.cursor.set(a-n.length)):(c.editor.set(g),c.cursor.set(a+n.length),t=!1)}c._callHook("tab:after")}return t}},u=function(e){if(c.fenceRange()&&13==e.keyCode){c.preventDefaultEvent(e),c._callHook("enter:before");var t,r,o=c.cursor.get(),i=c.editor.get(),l=i.substring(0,o),u=i.substring(o),f=l.charAt(l.length-1),d=u.charAt(0),g=c.levelsDeep(),p="",v="";if(g){for(;g--;)p+=n;for(t=(p=p).length+1,r=0;r<s.keyMap.length;r++)s.keyMap[r].open==f&&s.keyMap[r].close==d&&(v=a)}else t=1;var h=l+a+p+v+p.substring(0,p.length-n.length)+u;c.editor.set(h),c.cursor.set(o+t),c._callHook("enter:after")}},f=function(e){if(c.fenceRange()&&8==e.keyCode){c.preventDefaultEvent(e),c._callHook("delete:before");var t,r=c.cursor.get(),n=c.editor.get(),a=n.substring(0,r),o=n.substring(r),i=a.charAt(a.length-1),l=o.charAt(0);if(!1===c.cursor.selection()){for(t=0;t<s.keyMap.length;t++)if(s.keyMap[t].open==i&&s.keyMap[t].close==l){var u=n.substring(0,r-1)+n.substring(r+1);return c.editor.set(u),void c.cursor.set(r-1)}u=n.substring(0,r-1)+n.substring(r);c.editor.set(u),c.cursor.set(r-1)}else{var f=c.cursor.selection();u=n.substring(0,f.start)+n.substring(f.end);c.editor.set(u),c.cursor.set(r)}c._callHook("delete:after")}},d=function(e,t){c.preventDefaultEvent(t),c._callHook("openChar:before");var r=c.cursor.get(),n=c.editor.get(),a=n.substring(0,r),o=n.substring(r),s=a+e.open+e.close+o;i.textarea.value=s,c.cursor.set(r+1),c._callHook("openChar:after")},g=function(e,t){var r=c.cursor.get();return c.editor.get().substring(r,r+1)==e.close&&(c.preventDefaultEvent(t),c._callHook("closeChar:before"),c.cursor.set(c.cursor.get()+1),c._callHook("closeChar:after"),!0)},p={filter:function(e){if(c.fenceRange()){var t=e.which||e.keyCode;if(39!=t&&(40!=t||0!==e.which)){var r,n=String.fromCharCode(t);for(r=0;r<s.keyMap.length;r++){if(s.keyMap[r].close==n)!(i.overwrite&&g(s.keyMap[r],e))&&s.keyMap[r].open==n&&i.autoOpen&&d(s.keyMap[r],e);else s.keyMap[r].open==n&&i.autoOpen&&d(s.keyMap[r],e)}}}},listen:function(){i.replaceTab&&c.addEvent(i.textarea,"keydown",l),i.autoIndent&&c.addEvent(i.textarea,"keydown",u),i.autoStrip&&c.addEvent(i.textarea,"keydown",f),c.addEvent(i.textarea,"keypress",p.filter),c.addEvent(i.textarea,"keydown",(function(){c._callHook("keydown")})),c.addEvent(i.textarea,"keyup",(function(){c._callHook("keyup")}))}};this.destroy=function(){c.removeEvent(i.textarea,"keydown",l),c.removeEvent(i.textarea,"keydown",u),c.removeEvent(i.textarea,"keydown",f),c.removeEvent(i.textarea,"keypress",p.filter)},(o=t).textarea&&(c._callHook("init:before",!1),c.deepExtend(i,o),c.defineNewLine(),i.softTabs?n=" ".repeat(i.tabSize):(n="\t",c.defineTabSize(i.tabSize)),p.listen(),c._callHook("init:after",!1))};"undefined"!=typeof module&&module.exports&&(module.exports=n),"undefined"==typeof ender&&(this.Behave=n,this.BehaveHooks=r),"function"==typeof define&&define.amd&&define("behave",[],(function(){return n}))}).call(this),function(e){e(document).on("sowsetupformfield",".siteorigin-widget-field-type-code",(function(t){var r=e(this);new Behave({textarea:r.find(".siteorigin-widget-code-input").get(0)})}))}(jQuery);