{"version":3,"sources":["jsdelivr-header.js","/npm/wysibb@1.0.3/jquery.wysibb.js"],"names":[],"mappings":"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","file":"/npm/wysibb@1.0.3/jquery.wysibb.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/wysibb@1.0.3/jquery.wysibb.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*! WysiBB v1.5.1 2014-03-26 \n    Author: Vadim Dobroskok\n */\n\nvar jQuery = require('jquery');\n\nif (typeof (WBBLANG)==\"undefined\") {WBBLANG = {};}\nWBBLANG['en'] = CURLANG = {\n\tbold: \"Bold\",\n\titalic: \"Italic\",\n\tunderline: \"Underline\",\n\tstrike: \"Strike\",\n\tlink: \"Link\",\n\timg: \"Insert image\",\n\tsup: \"Superscript\",\n\tsub: \"Subscript\",\n\tjustifyleft: \"Align left\",\n\tjustifycenter: \"Align center\",\n\tjustifyright: \"Align right\",\n\ttable: \"Insert table\",\n\tbullist: \"• Unordered list\",\n\tnumlist: \"1. Ordered list\",\n\tquote: \"Quote\",\n\tofftop: \"Offtop\",\n\tcode: \"Code\",\n\tspoiler: \"Spoiler\",\n\tfontcolor: \"Font color\",\n\tfontsize: \"Font size\",\n\tfontfamily: \"Font family\",\n\tfs_verysmall: \"Very small\",\n\tfs_small: \"Small\",\n\tfs_normal: \"Normal\",\n\tfs_big: \"Big\",\n\tfs_verybig: \"Very big\",\n\tsmilebox: \"Insert emoticon\",\n\tvideo: \"Insert YouTube\",\n\tremoveFormat:\"Remove Format\",\n\t\n\tmodal_link_title: \"Insert link\",\n\tmodal_link_text: \"Display text\",\n\tmodal_link_url: \"URL\",\n\tmodal_email_text: \"Display email\",\n\tmodal_email_url: \"Email\",\n\tmodal_link_tab1: \"Insert URL\",\n\t\n\tmodal_img_title: \"Insert image\",\n\tmodal_img_tab1: \"Insert URL\",\n\tmodal_img_tab2: \"Upload image\",\n\tmodal_imgsrc_text: \"Enter image URL\",\n\tmodal_img_btn: \"Choose file\",\n\tadd_attach: \"Add Attachment\",\n\t\n\tmodal_video_text: \"Enter the URL of the video\",\n\t\n\tclose: \"Close\",\n\tsave: \"Save\",\n\tcancel: \"Cancel\",\n\tremove: \"Delete\",\n\t\n\tvalidation_err: \"The entered data is invalid\",\n\terror_onupload: \"Error during file upload\",\n\t\n\tfileupload_text1: \"Drop file here\",\n\tfileupload_text2: \"or\",\n\t\n\tloading: \"Loading\",\n\tauto: \"Auto\",\n\tviews: \"Views\",\n\tdownloads: \"Downloads\",\n\t\n\t//smiles\n\tsm1: \"Smile\",\n\tsm2: \"Laughter\",\n\tsm3: \"Wink\",\n\tsm4: \"Thank you\",\n\tsm5: \"Scold\",\n\tsm6: \"Shock\",\n\tsm7: \"Angry\",\n\tsm8: \"Pain\",\n\tsm9: \"Sick\"\n};\nwbbdebug=true;\n(function($) {\n\t'use strict';\n\t$.wysibb = function(txtArea,settings) {\n\t\t$(txtArea).data(\"wbb\",this);\n\t\t\n\t\tif (settings && settings.deflang && typeof(WBBLANG[settings.deflang])!=\"undefined\") {CURLANG = WBBLANG[settings.deflang];}\n\t\tif (settings && settings.lang && typeof(WBBLANG[settings.lang])!=\"undefined\") {CURLANG = WBBLANG[settings.lang];}\n\t\tthis.txtArea=txtArea;\n\t\tthis.$txtArea=$(txtArea);\n\t\tvar id = this.$txtArea.attr(\"id\") || this.setUID(this.txtArea);\n\t\tthis.options = {\n\t\t\tbbmode:\t\t\t\tfalse,\n\t\t\tonlyBBmode:\t\t\tfalse,\n\t\t\tthemeName:\t\t\t\"default\", \n\t\t\tbodyClass:\t\t\t\"\",\n\t\t\tlang:\t\t\t\t\"ru\",\n\t\t\ttabInsert:\t\t\ttrue,\n//\t\t\ttoolbar:\t\t\tfalse,\n\t\t\t//img upload config \n\t\t\timgupload:\t\t\tfalse,\n\t\t\timg_uploadurl:\t\t\"/iupload.php\",\n\t\t\timg_maxwidth:\t\t800,\n\t\t\timg_maxheight:\t\t800,\n\t\t\thotkeys:\t\t\ttrue,\n\t\t\tshowHotkeys:\t\ttrue,\n\t\t\tautoresize:\t\t\ttrue,\n\t\t\tresize_maxheight:\t800,\n\t\t\tloadPageStyles:\t\ttrue,\n\t\t\ttraceTextarea:\t\ttrue,\n//\t\t\tdirection:\t\t\t\"ltr\",\n\t\t\tsmileConversion:\ttrue,\n\n\t\t\t//END img upload config \n\t\t\tbuttons: \t\t\t\"bold,italic,underline,strike,sup,sub,|,img,video,link,|,bullist,numlist,|,fontcolor,fontsize,fontfamily,|,justifyleft,justifycenter,justifyright,|,quote,code,table,removeFormat\",\n\t\t\tallButtons: {\n\t\t\t\tbold : {\n\t\t\t\t\ttitle: CURLANG.bold,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-bold1\">\\uE018</span>',\n\t\t\t\t\texcmd: 'bold',\n\t\t\t\t\thotkey: 'ctrl+b',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<b>{SELTEXT}</b>':\"[b]{SELTEXT}[/b]\",\n\t\t\t\t\t\t'<strong>{SELTEXT}</strong>':\"[b]{SELTEXT}[/b]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\titalic : {\n\t\t\t\t\ttitle: CURLANG.italic,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-italic1\">\\uE001</span>',\n\t\t\t\t\texcmd: 'italic',\n\t\t\t\t\thotkey: 'ctrl+i',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<i>{SELTEXT}</i>':\"[i]{SELTEXT}[/i]\",\n\t\t\t\t\t\t'<em>{SELTEXT}</em>':\"[i]{SELTEXT}[/i]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tunderline : {\n\t\t\t\t\ttitle: CURLANG.underline,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-underline1\">\\uE002</span>',\n\t\t\t\t\texcmd: 'underline',\n\t\t\t\t\thotkey: 'ctrl+u',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<u>{SELTEXT}</u>':\"[u]{SELTEXT}[/u]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstrike : {\n\t\t\t\t\ttitle: CURLANG.strike,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon fi-stroke1 ve-tlb-strike1\">\\uE003</span>',\n\t\t\t\t\texcmd: 'strikeThrough',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<strike>{SELTEXT}</strike>':\"[s]{SELTEXT}[/s]\",\n\t\t\t\t\t\t'<s>{SELTEXT}</s>':\"[s]{SELTEXT}[/s]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsup : {\n\t\t\t\t\ttitle: CURLANG.sup,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-sup1\">\\uE005</span>',\n\t\t\t\t\texcmd: 'superscript',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<sup>{SELTEXT}</sup>':\"[sup]{SELTEXT}[/sup]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsub : {\n\t\t\t\t\ttitle: CURLANG.sub,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-sub1\">\\uE004</span>',\n\t\t\t\t\texcmd: 'subscript',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<sub>{SELTEXT}</sub>':\"[sub]{SELTEXT}[/sub]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlink : {\n\t\t\t\t\ttitle: CURLANG.link,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-link1\">\\uE007</span>',\n\t\t\t\t\thotkey: 'ctrl+shift+2',\n\t\t\t\t\tmodal: {\n\t\t\t\t\t\ttitle: CURLANG.modal_link_title,\n\t\t\t\t\t\twidth: \"500px\",\n\t\t\t\t\t\ttabs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tinput: [\n\t\t\t\t\t\t\t\t\t{param: \"SELTEXT\",title:CURLANG.modal_link_text, type: \"div\"},\n\t\t\t\t\t\t\t\t\t{param: \"URL\",title:CURLANG.modal_link_url,validation: '^http(s)?://'}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<a href=\"{URL}\">{SELTEXT}</a>':\"[url={URL}]{SELTEXT}[/url]\",\n\t\t\t\t\t\t'<a href=\"{URL}\">{URL}</a>':\"[url]{URL}[/url]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\timg : {\n\t\t\t\t\ttitle: CURLANG.img,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-img1\">\\uE006</span>',\n\t\t\t\t\thotkey: 'ctrl+shift+1',\n\t\t\t\t\taddWrap: true,\n\t\t\t\t\tmodal: {\n\t\t\t\t\t\ttitle: CURLANG.modal_img_title,\n\t\t\t\t\t\twidth: \"600px\",\n\t\t\t\t\t\ttabs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: CURLANG.modal_img_tab1,\n\t\t\t\t\t\t\t\tinput: [\n\t\t\t\t\t\t\t\t\t{param: \"SRC\",title:CURLANG.modal_imgsrc_text,validation: '^http(s)?://.*?\\.(jpg|png|gif|jpeg)$'}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\tonLoad: this.imgLoadModal\n\t\t\t\t\t},\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<img src=\"{SRC}\" />':\"[img]{SRC}[/img]\",\n\t\t\t\t\t\t'<img src=\"{SRC}\" width=\"{WIDTH}\" height=\"{HEIGHT}\"/>':\"[img width={WIDTH},height={HEIGHT}]{SRC}[/img]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbullist : {\n\t\t\t\t\ttitle: CURLANG.bullist,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-list1\">\\uE009</span>',\n\t\t\t\t\texcmd: 'insertUnorderedList',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<ul>{SELTEXT}</ul>':\"[list]{SELTEXT}[/list]\",\n\t\t\t\t\t\t'<li>{SELTEXT}</li>':\"[*]{SELTEXT}[/*]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tnumlist : {\n\t\t\t\t\ttitle: CURLANG.numlist,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-numlist1\">\\uE00a</span>',\n\t\t\t\t\texcmd: 'insertOrderedList',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<ol>{SELTEXT}</ol>':\"[list=1]{SELTEXT}[/list]\",\n\t\t\t\t\t\t'<li>{SELTEXT}</li>':\"[*]{SELTEXT}[/*]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tquote : {\n\t\t\t\t\ttitle: CURLANG.quote,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-quote1\">\\uE00c</span>',\n\t\t\t\t\thotkey: 'ctrl+shift+3',\n\t\t\t\t\t//subInsert: true,\n\t\t\t\t\ttransform : { \n\t\t\t\t\t\t'<blockquote>{SELTEXT}</blockquote>':\"[quote]{SELTEXT}[/quote]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcode : {\n\t\t\t\t\ttitle: CURLANG.code,\n\t\t\t\t\tbuttonText: '[code]',\n\t\t\t\t\t/* buttonHTML: '<span class=\"fonticon\">\\uE00d</span>', */\n\t\t\t\t\thotkey: 'ctrl+shift+4',\n\t\t\t\t\tonlyClearText: true,\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<code>{SELTEXT}</code>':\"[code]{SELTEXT}[/code]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tofftop : {\n\t\t\t\t\ttitle: CURLANG.offtop,\n\t\t\t\t\tbuttonText: 'offtop',\n\t\t\t\t\ttransform : {\n\t\t\t\t\t\t'<span style=\"font-size:10px;color:#ccc\">{SELTEXT}</span>':\"[offtop]{SELTEXT}[/offtop]\"\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfontcolor: {\n\t\t\t\t\ttype: \"colorpicker\",\n\t\t\t\t\ttitle: CURLANG.fontcolor,\n\t\t\t\t\texcmd: \"foreColor\",\n\t\t\t\t\tvalueBBname: \"color\",\n\t\t\t\t\tsubInsert: true,\n\t\t\t\t\tcolors: \"#000000,#444444,#666666,#999999,#b6b6b6,#cccccc,#d8d8d8,#efefef,#f4f4f4,#ffffff,-, \\\n\t\t\t\t\t\t\t #ff0000,#980000,#ff7700,#ffff00,#00ff00,#00ffff,#1e84cc,#0000ff,#9900ff,#ff00ff,-, \\\n\t\t\t\t\t\t\t #f4cccc,#dbb0a7,#fce5cd,#fff2cc,#d9ead3,#d0e0e3,#c9daf8,#cfe2f3,#d9d2e9,#ead1dc, \\\n\t\t\t\t\t\t\t #ea9999,#dd7e6b,#f9cb9c,#ffe599,#b6d7a8,#a2c4c9,#a4c2f4,#9fc5e8,#b4a7d6,#d5a6bd, \\\n\t\t\t\t\t\t\t #e06666,#cc4125,#f6b26b,#ffd966,#93c47d,#76a5af,#6d9eeb,#6fa8dc,#8e7cc3,#c27ba0, \\\n\t\t\t\t\t\t\t #cc0000,#a61c00,#e69138,#f1c232,#6aa84f,#45818e,#3c78d8,#3d85c6,#674ea7,#a64d79, \\\n\t\t\t\t\t\t\t #900000,#85200C,#B45F06,#BF9000,#38761D,#134F5C,#1155Cc,#0B5394,#351C75,#741B47, \\\n\t\t\t\t\t\t\t #660000,#5B0F00,#783F04,#7F6000,#274E13,#0C343D,#1C4587,#073763,#20124D,#4C1130\",\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<font color=\"{COLOR}\">{SELTEXT}</font>':'[color={COLOR}]{SELTEXT}[/color]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttable: {\n\t\t\t\t\ttype: \"table\",\n\t\t\t\t\ttitle: CURLANG.table,\n\t\t\t\t\tcols: 10,\n\t\t\t\t\trows: 10,\n\t\t\t\t\tcellwidth: 20,\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<td>{SELTEXT}</td>': '[td]{SELTEXT}[/td]',\n\t\t\t\t\t\t'<tr>{SELTEXT}</tr>': '[tr]{SELTEXT}[/tr]',\n\t\t\t\t\t\t'<table class=\"wbb-table\">{SELTEXT}</table>': '[table]{SELTEXT}[/table]'\n\t\t\t\t\t},\n\t\t\t\t\tskipRules: true\n\t\t\t\t},\n\t\t\t\tfontsize: {\n\t\t\t\t\ttype: 'select',\n\t\t\t\t\ttitle: CURLANG.fontsize,\n\t\t\t\t\toptions: \"fs_verysmall,fs_small,fs_normal,fs_big,fs_verybig\"\n\t\t\t\t},\n\t\t\t\tfontfamily: {\n\t\t\t\t\ttype: 'select',\n\t\t\t\t\ttitle: CURLANG.fontfamily,\n\t\t\t\t\texcmd: 'fontName',\n\t\t\t\t\tvalueBBname: \"font\",\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{title: \"Arial\",exvalue: \"Arial\"},\n\t\t\t\t\t\t{title: \"Comic Sans MS\",exvalue: \"Comic Sans MS\"},\n\t\t\t\t\t\t{title: \"Courier New\",exvalue: \"Courier New\"},\n\t\t\t\t\t\t{title: \"Georgia\",exvalue: \"Georgia\"},\n\t\t\t\t\t\t{title: \"Lucida Sans Unicode\",exvalue: \"Lucida Sans Unicode\"},\n\t\t\t\t\t\t{title: \"Tahoma\",exvalue: \"Tahoma\"},\n\t\t\t\t\t\t{title: \"Times New Roman\",exvalue: \"Times New Roman\"},\n\t\t\t\t\t\t{title: \"Trebuchet MS\",exvalue: \"Trebuchet MS\"},\n\t\t\t\t\t\t{title: \"Verdana\",exvalue: \"Verdana\"}\n\t\t\t\t\t],\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<font face=\"{FONT}\">{SELTEXT}</font>':'[font={FONT}]{SELTEXT}[/font]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsmilebox: {\n\t\t\t\t\ttype: 'smilebox',\n\t\t\t\t\ttitle: CURLANG.smilebox,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-smilebox1\">\\uE00b</span>'\n\t\t\t\t},\n\t\t\t\tjustifyleft: {\n\t\t\t\t\ttitle: CURLANG.justifyleft,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-textleft1\">\\uE015</span>',\n\t\t\t\t\tgroupkey: 'align',\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<p style=\"text-align:left\">{SELTEXT}</p>': '[left]{SELTEXT}[/left]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tjustifyright: {\n\t\t\t\t\ttitle: CURLANG.justifyright,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-textright1\">\\uE016</span>',\n\t\t\t\t\tgroupkey: 'align',\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<p style=\"text-align:right\">{SELTEXT}</p>': '[right]{SELTEXT}[/right]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tjustifycenter: {\n\t\t\t\t\ttitle: CURLANG.justifycenter,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-textcenter1\">\\uE014</span>',\n\t\t\t\t\tgroupkey: 'align',\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<p style=\"text-align:center\">{SELTEXT}</p>': '[center]{SELTEXT}[/center]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tvideo: {\n\t\t\t\t\ttitle: CURLANG.video,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-video1\">\\uE008</span>',\n\t\t\t\t\tmodal: {\n\t\t\t\t\t\ttitle: CURLANG.video,\n\t\t\t\t\t\twidth: \"600px\",\n\t\t\t\t\t\ttabs: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: CURLANG.video,\n\t\t\t\t\t\t\t\tinput: [\n\t\t\t\t\t\t\t\t\t{param: \"SRC\",title:CURLANG.modal_video_text}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t],\n\t\t\t\t\t\tonSubmit: function(cmd,opt,queryState) {\n\t\t\t\t\t\t\tvar url = this.$modal.find('input[name=\"SRC\"]').val();\n\t\t\t\t\t\t\tif (url) {\n\t\t\t\t\t\t\t\turl = url.replace(/^\\s+/,\"\").replace(/\\s+$/,\"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar a;\n\t\t\t\t\t\t\tif (url.indexOf(\"youtu.be\")!=-1) {\n\t\t\t\t\t\t\t\ta = url.match(/^http[s]*:\\/\\/youtu\\.be\\/([a-z0-9_-]+)/i);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\ta = url.match(/^http[s]*:\\/\\/www\\.youtube\\.com\\/watch\\?.*?v=([a-z0-9_-]+)/i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (a && a.length==2) {\n\t\t\t\t\t\t\t\tvar code = a[1];\n\t\t\t\t\t\t\t\tthis.insertAtCursor(this.getCodeByCommand(cmd,{src:code}));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.closeModal();\n\t\t\t\t\t\t\tthis.updateUI();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<iframe src=\"http://www.youtube.com/embed/{SRC}\" width=\"640\" height=\"480\" frameborder=\"0\"></iframe>':'[video]{SRC}[/video]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\t//select options\n\t\t\t\tfs_verysmall: {\n\t\t\t\t\ttitle: CURLANG.fs_verysmall,\n\t\t\t\t\tbuttonText: \"fs1\",\n\t\t\t\t\texcmd: 'fontSize',\n\t\t\t\t\texvalue: \"1\",\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<font size=\"1\">{SELTEXT}</font>':'[size=50]{SELTEXT}[/size]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfs_small: {\n\t\t\t\t\ttitle: CURLANG.fs_small,\n\t\t\t\t\tbuttonText: \"fs2\",\n\t\t\t\t\texcmd: 'fontSize',\n\t\t\t\t\texvalue: \"2\",\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<font size=\"2\">{SELTEXT}</font>':'[size=85]{SELTEXT}[/size]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfs_normal: {\n\t\t\t\t\ttitle: CURLANG.fs_normal,\n\t\t\t\t\tbuttonText: \"fs3\",\n\t\t\t\t\texcmd: 'fontSize',\n\t\t\t\t\texvalue: \"3\",\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<font size=\"3\">{SELTEXT}</font>':'[size=100]{SELTEXT}[/size]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfs_big: {\n\t\t\t\t\ttitle: CURLANG.fs_big,\n\t\t\t\t\tbuttonText: \"fs4\",\n\t\t\t\t\texcmd: 'fontSize',\n\t\t\t\t\texvalue: \"4\",\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<font size=\"4\">{SELTEXT}</font>':'[size=150]{SELTEXT}[/size]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfs_verybig: {\n\t\t\t\t\ttitle: CURLANG.fs_verybig,\n\t\t\t\t\tbuttonText: \"fs5\",\n\t\t\t\t\texcmd: 'fontSize',\n\t\t\t\t\texvalue: \"6\",\n\t\t\t\t\ttransform: {\n\t\t\t\t\t\t'<font size=\"6\">{SELTEXT}</font>':'[size=200]{SELTEXT}[/size]'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\n\t\t\t\tremoveformat: {\n\t\t\t\t\ttitle: CURLANG.removeFormat,\n\t\t\t\t\tbuttonHTML: '<span class=\"fonticon ve-tlb-removeformat1\">\\uE00f</span>',\n\t\t\t\t\texcmd: \"removeFormat\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tsystr: {\n\t\t\t\t'<br/>':\"\\n\",\n\t\t\t\t'<span class=\"wbbtab\">{SELTEXT}</span>': '   {SELTEXT}'\n\t\t\t},\n\t\t\tcustomRules: {\n\t\t\t\ttd: [[\"[td]{SELTEXT}[/td]\",{seltext: {rgx:false,attr:false,sel:false}}]],\n\t\t\t\ttr: [[\"[tr]{SELTEXT}[/tr]\",{seltext: {rgx:false,attr:false,sel:false}}]],\n\t\t\t\ttable: [[\"[table]{SELTEXT}[/table]\",{seltext: {rgx:false,attr:false,sel:false}}]]\n\t\t\t\t//blockquote: [[\"   {SELTEXT}\",{seltext: {rgx:false,attr:false,sel:false}}]]\n\t\t\t},\n\t\t\tsmileList: [\n\t\t\t\t//{title:CURLANG.sm1, img: '<img src=\"{themePrefix}{themeName}/img/smiles/sm1.png\" class=\"sm\">', bbcode:\":)\"},\n\t\t\t],\n\t\t\tattrWrap: ['src','color','href'] //use becouse FF and IE change values for this attr, modify [attr] to _[attr]\n\t\t}\n\t\t\n\t\t//FIX for Opera. Wait while iframe loaded\n\t\tthis.inited=this.options.onlyBBmode;\n\t\t\n\t\t//init css prefix, if not set\n\t\tif (!this.options.themePrefix) {\n\t\t\t$('link').each($.proxy(function(idx, el) {\n\t\t\t\tvar sriptMatch = $(el).get(0).href.match(/(.*\\/)(.*)\\/wbbtheme\\.css.*$/);\n\t\t\t\tif (sriptMatch !== null) {\n\t\t\t\t\tthis.options.themeName = sriptMatch[2];\n\t\t\t\t\tthis.options.themePrefix = sriptMatch[1];\n\t\t\t\t}\n\t\t\t},this));\n\t\t}\n\t\t\n\t\t//check for preset\n\t\tif (typeof(WBBPRESET)!=\"undefined\") {\n\t\t\tif (WBBPRESET.allButtons) {\n\t\t\t\t//clear transform\n\t\t\t\t$.each(WBBPRESET.allButtons,$.proxy(function(k,v) {\n\t\t\t\t\tif (v.transform && this.options.allButtons[k]) {\n\t\t\t\t\t\tdelete this.options.allButtons[k].transform;\n\t\t\t\t\t}\n\t\t\t\t},this));\n\t\t\t}\n\t\t\t$.extend(true,this.options,WBBPRESET);\n\t\t} \n\t\t\n\t\tif (settings && settings.allButtons) {\n\t\t\t$.each(settings.allButtons,$.proxy(function(k,v) {\n\t\t\t\tif (v.transform && this.options.allButtons[k]) {\n\t\t\t\t\tdelete this.options.allButtons[k].transform;\n\t\t\t\t}\n\t\t\t},this));\n\t\t}\n\t\t$.extend(true,this.options,settings);\n\t\tthis.init();\n\t}\n\t\n\t$.wysibb.prototype = {\n\t\tlastid : 1,\n\t\tinit:\tfunction() {\n\t\t\t$.log(\"Init\",this);\n\t\t\t//check for mobile\n\t\t\tthis.isMobile = function(a) {(/android|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a))}(navigator.userAgent||navigator.vendor||window.opera);\n\t\t\t\n\t\t\t//use bbmode on mobile devices\n\t\t\t//this.isMobile = true; //TEMP\n\t\t\tif (this.options.onlyBBmode===true) {this.options.bbmode=true;}\n\t\t\t//create array of controls, for queryState\n\t\t\tthis.controllers = [];\n\t\t\t\n\t\t\t//convert button string to array\n\t\t\tthis.options.buttons = this.options.buttons.toLowerCase();\n\t\t\tthis.options.buttons = this.options.buttons.split(\",\");\n\t\t\t\n\t\t\t//init system transforms\n\t\t\tthis.options.allButtons[\"_systr\"] = {};\n\t\t\tthis.options.allButtons[\"_systr\"][\"transform\"]= this.options.systr;\n\t\t\t\n\t\t\tthis.smileFind();\n\t\t\tthis.initTransforms();\n\t\t\tthis.build();\n\t\t\tthis.initModal();\n\t\t\tif (this.options.hotkeys===true && !this.isMobile) {\n\t\t\t\tthis.initHotkeys();\n\t\t\t}\n\t\t\t\n\t\t\t//sort smiles\n\t\t\tif (this.options.smileList && this.options.smileList.length>0) {\n\t\t\t\tthis.options.smileList.sort(function(a,b) {\n\t\t\t\t\treturn (b.bbcode.length-a.bbcode.length);\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tthis.$txtArea.parents(\"form\").bind(\"submit\",$.proxy(function() {\n\t\t\t\tthis.sync();\n\t\t\t\treturn true;\n\t\t\t},this)); \n\t\t\t\n\t\t\t\n\t\t\t//phpbb2\n\t\t\tthis.$txtArea.parents(\"form\").find(\"input[id*='preview'],input[id*='submit'],input[class*='preview'],input[class*='submit'],input[name*='preview'],input[name*='submit']\").bind(\"mousedown\",$.proxy(function() {\n\t\t\t\tthis.sync();\n\t\t\t\tsetTimeout($.proxy(function() {\n\t\t\t\t\tif (this.options.bbmode===false) {\n\t\t\t\t\t\tthis.$txtArea.removeAttr(\"wbbsync\").val(\"\");\n\t\t\t\t\t}\n\t\t\t\t},this),1000);\n\t\t\t},this));\n\t\t\t//end phpbb2\n\t\t\t\n\t\t\tif (this.options.initCallback) {\n\t\t\t\tthis.options.initCallback.call(this);\n\t\t\t}\n\t\t\t\n\t\t\t$.log(this);\n\t\t\t\n\t\t},\n\t\tinitTransforms: function() {\n\t\t\t$.log(\"Create rules for transform HTML=>BB\");\n\t\t\tvar o = this.options;\n\t\t\t//need to check for active buttons\n\t\t\tif (!o.rules) {o.rules={};}\n\t\t\tif (!o.groups) {o.groups={};} //use for groupkey, For example: justifyleft,justifyright,justifycenter. It is must replace each other.\n\t\t\tvar  btnlist = o.buttons.slice();\n\t\t\t\n\t\t\t//add system transform\n\t\t\tbtnlist.push(\"_systr\");\n\t\t\tfor (var bidx=0; bidx<btnlist.length; bidx++) {\n\t\t\t\tvar ob = o.allButtons[btnlist[bidx]];\n\t\t\t\tif (!ob ) {continue;}\n\t\t\t\tob.en=true;\n\t\t\t\t\n\t\t\t\t//check for simplebbcode\n\t\t\t\tif (ob.simplebbcode && $.isArray(ob.simplebbcode) && ob.simplebbcode.length==2) {\n\t\t\t\t\tob.bbcode = ob.html = ob.simplebbcode[0]+\"{SELTEXT}\"+ob.simplebbcode[1];\n\t\t\t\t\tif (ob.transform) delete ob.transform;\n\t\t\t\t\tif (ob.modal)  delete ob.modal;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//add transforms to option list\n\t\t\t\tif (ob.type==\"select\" && typeof(ob.options)==\"string\") {\n\t\t\t\t\tvar olist = ob.options.split(\",\");\n\t\t\t\t\t$.each(olist,function(i,op) {\n\t\t\t\t\t\tif ($.inArray(op,btnlist)==-1) {\n\t\t\t\t\t\t\tbtnlist.push(op);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (ob.transform && ob.skipRules!==true) {\n\t\t\t\t\tvar obtr = $.extend({},ob.transform);\n\t\t\t\t\t\n\t\t\t\t\t/* if (ob.addWrap) {\n\t\t\t\t\t\t//addWrap\n\t\t\t\t\t\t$.log(\"needWrap\");\n\t\t\t\t\t\tfor (var bhtml in obtr) {\n\t\t\t\t\t\t\tvar bbcode = ob.transform[bhtml];\n\t\t\t\t\t\t\tvar newhtml = '<span wbb=\"'+btnlist[bidx]+'\">'+bhtml+'</span>';\n\t\t\t\t\t\t\tobtr[newhtml] = bbcode;\n\t\t\t\t\t\t}\n\t\t\t\t\t} */\n\t\t\t\t\t\n\t\t\t\t\tfor (var bhtml in obtr) {\n\t\t\t\t\t\tvar orightml = bhtml;\n\t\t\t\t\t\tvar bbcode = obtr[bhtml];\n\t\t\t\t\t\t\n\t\t\t\t\t\t//create root selector for isContain bbmode\n\t\t\t\t\t\tif (!ob.bbSelector) {ob.bbSelector=[];}\n\t\t\t\t\t\tif ($.inArray(bbcode,ob.bbSelector)==-1) {\n\t\t\t\t\t\t\tob.bbSelector.push(bbcode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.options.onlyBBmode===false) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t//wrap attributes \n\t\t\t\t\t\t\tbhtml = this.wrapAttrs(bhtml);\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\tvar $bel = $(document.createElement('DIV')).append($(this.elFromString(bhtml,document)));\n\t\t\t\t\t\t\tvar rootSelector = this.filterByNode($bel.children());\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//check if current rootSelector is exist, create unique selector for each transform (1.2.2)\n\t\t\t\t\t\t\tif (rootSelector==\"div\" || typeof(o.rules[rootSelector])!=\"undefined\") {\n\t\t\t\t\t\t\t\t//create unique selector\n\t\t\t\t\t\t\t\t$.log(\"create unique selector: \"+rootSelector);\n\t\t\t\t\t\t\t\tthis.setUID($bel.children());\n\t\t\t\t\t\t\t\trootSelector = this.filterByNode($bel.children());\n\t\t\t\t\t\t\t\t$.log(\"New rootSelector: \"+rootSelector);\n\t\t\t\t\t\t\t\t//replace transform with unique selector\n\t\t\t\t\t\t\t\tvar nhtml2 = $bel.html();\n\t\t\t\t\t\t\t\tnhtml2 = this.unwrapAttrs(nhtml2);\n\t\t\t\t\t\t\t\tvar obhtml = this.unwrapAttrs(bhtml);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tob.transform[nhtml2]=bbcode;\n\t\t\t\t\t\t\t\tdelete ob.transform[obhtml];\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbhtml=nhtml2;\n\t\t\t\t\t\t\t\torightml = nhtml2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//create root selector for isContain\n\t\t\t\t\t\t\tif (!ob.excmd) {\n\t\t\t\t\t\t\t\tif (!ob.rootSelector) {ob.rootSelector=[];}\n\t\t\t\t\t\t\t\tob.rootSelector.push(rootSelector);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//check for rules on this rootSeletor\n\t\t\t\t\t\t\tif (typeof(o.rules[rootSelector])==\"undefined\") {\n\t\t\t\t\t\t\t\to.rules[rootSelector]=[];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar crules={};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (bhtml.match(/\\{\\S+?\\}/)) {\n\t\t\t\t\t\t\t\t$bel.find('*').each($.proxy(function(idx,el) {\n\t\t\t\t\t\t\t\t\t//check attributes\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tvar attributes = this.getAttributeList(el);\n\t\t\t\t\t\t\t\t\t$.each(attributes,$.proxy(function(i, item) {\n\t\t\t\t\t\t\t\t\t\tvar attr = $(el).attr(item);\n\t\t\t\t\t\t\t\t\t\tif (item.substr(0,1)=='_') {\n\t\t\t\t\t\t\t\t\t\t\titem = item.substr(1);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tvar r = attr.match(/\\{\\S+?\\}/g);\n\t\t\t\t\t\t\t\t\t\tif (r) {\n\t\t\t\t\t\t\t\t\t\t\tfor (var a=0; a<r.length; a++) {\n\t\t\t\t\t\t\t\t\t\t\t\tvar rname = r[a].substr(1,r[a].length-2);\n\t\t\t\t\t\t\t\t\t\t\t\t\trname = rname.replace(this.getValidationRGX(rname),\"\");\n\t\t\t\t\t\t\t\t\t\t\t\tvar p = this.relFilterByNode(el,rootSelector);\n\t\t\t\t\t\t\t\t\t\t\t\tvar regRepl = (attr!=r[a]) ? this.getRegexpReplace(attr,r[a]):false;\n\t\t\t\t\t\t\t\t\t\t\t\tcrules[rname.toLowerCase()]={sel:(p) ? $.trim(p):false,attr:item,rgx:regRepl}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},this));\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t//check for text\n\t\t\t\t\t\t\t\t\tvar  sl=[];\n\t\t\t\t\t\t\t\t\tif (!$(el).is(\"iframe\")) {\n\t\t\t\t\t\t\t\t\t\t$(el).contents().filter(function() {return this.nodeType===3}).each($.proxy(function(i,rel) {\n\t\t\t\t\t\t\t\t\t\t\tvar txt = rel.textContent || rel.data;\n\t\t\t\t\t\t\t\t\t\t\tif (typeof(txt)==\"undefined\") {return true;}\n\t\t\t\t\t\t\t\t\t\t\tvar r = txt.match(/\\{\\S+?\\}/g)\n\t\t\t\t\t\t\t\t\t\t\tif (r) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor (var a=0; a<r.length; a++) {\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar rname = r[a].substr(1,r[a].length-2);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trname = rname.replace(this.getValidationRGX(rname),\"\");\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar p = this.relFilterByNode(el,rootSelector);\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar regRepl = (txt!=r[a]) ? this.getRegexpReplace(txt,r[a]):false;\n\t\t\t\t\t\t\t\t\t\t\t\t\tvar sel = (p) ? $.trim(p):false;\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ($.inArray(sel,sl)>-1 || $(rel).parent().contents().length>1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t//has dublicate and not one children, need wrap\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar nel = $(\"<span>\").html(\"{\"+rname+\"}\");\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.setUID(nel,\"wbb\");\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar start = (txt.indexOf(rname)+rname.length)+1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvar after_txt = txt.substr(start,txt.length-start);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t//create wrap element\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trel.data = txt.substr(0,txt.indexOf(rname)-1);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t$(rel).after(this.elFromString(after_txt,document)).after(nel);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsel=((sel) ? sel+\" \":\"\")+this.filterByNode(nel);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tregRepl=false;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tcrules[rname.toLowerCase()]={sel:sel,attr:false,rgx:regRepl}\n\t\t\t\t\t\t\t\t\t\t\t\t\tsl[sl.length]=sel;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},this));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsl=null;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t},this));\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tvar nbhtml = $bel.html();\n\t\t\t\t\t\t\t\t//UnWrap attributes \n\t\t\t\t\t\t\t\tnbhtml = this.unwrapAttrs(nbhtml);\n\t\t\t\t\t\t\t\tif (orightml!=nbhtml) {\n\t\t\t\t\t\t\t\t\t//if we modify html, replace it\n\t\t\t\t\t\t\t\t\tdelete ob.transform[orightml];\n\t\t\t\t\t\t\t\t\tob.transform[nbhtml]=bbcode;\n\t\t\t\t\t\t\t\t\tbhtml=nbhtml;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\to.rules[rootSelector].push([bbcode,crules]);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//check for onlyClearText\n\t\t\t\t\t\t\tif (ob.onlyClearText===true) {\n\t\t\t\t\t\t\t\tif (!this.cleartext) {this.cleartext={};}\n\t\t\t\t\t\t\t\tthis.cleartext[rootSelector]=btnlist[bidx];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//check for groupkey\n\t\t\t\t\t\t\tif (ob.groupkey) {\n\t\t\t\t\t\t\t\tif (!o.groups[ob.groupkey]) {o.groups[ob.groupkey]=[]}\n\t\t\t\t\t\t\t\to.groups[ob.groupkey].push(rootSelector);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t//sort rootSelector\n\t\t\t\t\tif (ob.rootSelector) {\n\t\t\t\t\t\tthis.sortArray(ob.rootSelector,-1);\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\tvar htmll = $.map(ob.transform,function(bb,html) {return html}).sort(function(a,b) {\n\t\t\t\t\t\t\treturn ((b[0] || \"\").length-(a[0] || \"\").length)\n\t\t\t\t\t});\n\t\t\t\t\tob.bbcode = ob.transform[htmll[0]];\n\t\t\t\t\tob.html = htmll[0];\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tthis.options.btnlist=btnlist; //use for transforms, becouse select elements not present in buttons\n\t\t\t\n\t\t\t//add custom rules, for table,tr,td and other\n\t\t\t$.extend(o.rules,this.options.customRules);\n\t\t\n\t\t\t//smile rules\n\t\t\to.srules={};\n\t\t\tif (this.options.smileList) {\n\t\t\t\t$.each(o.smileList,$.proxy(function(i,sm) {\n\t\t\t\t\tvar $sm = $(this.strf(sm.img,o));\n\t\t\t\t\tvar f = this.filterByNode($sm);\n\t\t\t\t\to.srules[f]=[sm.bbcode,sm.img];\n\t\t\t\t},this));\n\t\t\t}\n\t\t\t\n\t\t\t//sort transforms by bbcode length desc\n\t\t\tfor (var rootsel in o.rules) {\n\t\t\t\tthis.options.rules[rootsel].sort(function(a,b) {\n\t\t\t\t\treturn (b[0].length-a[0].length)\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t//create rootsel list\n\t\t\tthis.rsellist = [];\n\t\t\tfor (var rootsel in this.options.rules) {\n\t\t\t\tthis.rsellist.push(rootsel);\n\t\t\t}\n\t\t\tthis.sortArray(this.rsellist,-1);\n\t\t},\n\t\t\n\t\t//BUILD\n\t\tbuild: function() {\n\t\t\t$.log(\"Build editor\");\n\t\t\t\n\t\t\t//this.$editor = $('<div class=\"wysibb\">');\n\t\t\tthis.$editor = $('<div>').addClass(\"wysibb\");\n\t\t\t\n\t\t\tif (this.isMobile) {\n\t\t\t\tthis.$editor.addClass(\"wysibb-mobile\");\n\t\t\t}\n\t\t\t\n\t\t\t//set direction if defined\n\t\t\tif (this.options.direction) {this.$editor.css(\"direction\",this.options.direction)}\n\t\t\t\n\t\t\tthis.$editor.insertAfter(this.txtArea).append(this.txtArea);\n\t\t\t\n\t\t\tthis.startHeight = this.$txtArea.outerHeight();\n\t\t\tthis.$txtArea.addClass(\"wysibb-texarea\");\n\t\t\tthis.buildToolbar();\n\t\t\t//Build iframe if needed\n\t\t\tthis.$txtArea.wrap('<div class=\"wysibb-text\">');\n\t\t\t\n\t\t\tif (this.options.onlyBBmode===false) {\n\t\t\t\tvar height = this.options.minheight || this.$txtArea.outerHeight();\n\t\t\t\tvar maxheight = this.options.resize_maxheight;\n\t\t\t\tvar mheight = (this.options.autoresize===true) ? this.options.resize_maxheight:height;\n\t\t\t\tthis.$body = $(this.strf('<div class=\"wysibb-text-editor\" style=\"max-height:{maxheight}px;min-height:{height}px\"></div>',{maxheight:mheight,height:height})).insertAfter(this.$txtArea);\n\t\t\t\tthis.body = this.$body[0];\n\t\t\t\tthis.$txtArea.hide();\n\t\t\t\t\n\t\t\t\tif (height>32) {\n\t\t\t\t\tthis.$toolbar.css(\"max-height\",maxheight);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$.log(\"WysiBB loaded\");\n\t\t\t\t\n\t\t\t\tthis.$body.addClass(\"wysibb-body\").addClass(this.options.bodyClass);\n\t\t\t\t\n\t\t\t\t//set direction if defined\n\t\t\t\tif (this.options.direction) {this.$body.css(\"direction\",this.options.direction)}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tif ('contentEditable' in this.body) {\n\t\t\t\t\tthis.body.contentEditable=true;\n\t\t\t\t\ttry{\n\t\t\t\t\t\t//fix for mfirefox\n\t\t\t\t\t\t//document.execCommand('enableObjectResizing', false, 'false'); //disable image resizing\n\t\t\t\t\t\tdocument.execCommand('StyleWithCSS', false, false);\n\t\t\t\t\t\t//document.designMode = \"on\";\n\t\t\t\t\t\tthis.$body.append(\"<span></span>\");\n\t\t\t\t\t}catch(e) {}\n\t\t\t\t}else{\n\t\t\t\t\t//use onlybbmode\n\t\t\t\t\tthis.options.onlyBBmode=this.options.bbmode=true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//check for exist content in textarea\n\t\t\t\tif (this.txtArea.value.length>0) {\n\t\t\t\t\tthis.txtAreaInitContent();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t//clear html on paste from external editors\n\t\t\t\tthis.$body.bind('keydown', $.proxy(function(e) {\n\t\t\t\t\tif ((e.which == 86 && (e.ctrlKey==true || e.metaKey==true)) || (e.which == 45 && (e.shiftKey==true || e.metaKey==true))) {\n\t\t\t\t\t\tif (!this.$pasteBlock) {\n\t\t\t\t\t\t\tthis.saveRange();\n\t\t\t\t\t\t\tthis.$pasteBlock = $(this.elFromString('<div style=\"opacity:0;\" contenteditable=\"true\">\\uFEFF</div>'));\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.$pasteBlock.appendTo(this.body);\n\t\t\t\t\t\t\t//if (!$.support.search?type=2) {this.$pasteBlock.focus();} //IE 7,8 FIX\n\t\t\t\t\t\t\t\tsetTimeout($.proxy(function() {\n\t\t\t\t\t\t\t\t\tthis.clearPaste(this.$pasteBlock);\n\t\t\t\t\t\t\t\t\tvar rdata = '<span>'+this.$pasteBlock.html()+'</span>';\n\t\t\t\t\t\t\t\t\tthis.$body.attr(\"contentEditable\",\"true\");\n\t\t\t\t\t\t\t\t\tthis.$pasteBlock.blur().remove();\n\t\t\t\t\t\t\t\t\tthis.body.focus();\n\n\t\t\t\t\t\t\t\t\tif (this.cleartext) {\n\t\t\t\t\t\t\t\t\t\t$.log(\"Check if paste to clearText Block\");\n\t\t\t\t\t\t\t\t\t\tif (this.isInClearTextBlock()) {\n\t\t\t\t\t\t\t\t\t\t\trdata = this.toBB(rdata).replace(/\\n/g,\"<br/>\").replace(/\\s{3}/g,'<span class=\"wbbtab\"></span>');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\trdata = rdata.replace(/\\t/g,'<span class=\"wbbtab\"></span>');\n\t\t\t\t\t\t\t\t\tthis.selectRange(this.lastRange);\n\t\t\t\t\t\t\t\t\tthis.insertAtCursor(rdata,false);\n\t\t\t\t\t\t\t\t\tthis.lastRange=false;\n\t\t\t\t\t\t\t\t\tthis.$pasteBlock=false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t,this), 1);\n\t\t\t\t\t\t\tthis.selectNode(this.$pasteBlock[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t},this));\n\t\t\t\t\n\t\t\t\t//insert BR on press enter\n\t\t\t\tthis.$body.bind('keydown',$.proxy(function(e) {\n\t\t\t\t\tif (e.which == 13) {\n\t\t\t\t\t\tvar isLi = this.isContain(this.getSelectNode(),'li');\n\t\t\t\t\t\tif (!isLi) {\n\t\t\t\t\t\t\tif (e.preventDefault) {e.preventDefault();}\n\t\t\t\t\t\t\tif(e.shiftKey == true) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.checkForLastBR(this.getSelectNode());\n\t\t\t\t\t\t\t\tthis.insertAtCursor('<br/>',false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},this));\n\t\t\t\t\n\t\t\t\t//tabInsert\n\t\t\t\tif (this.options.tabInsert===true) {\n\t\t\t\t\tthis.$body.bind('keydown', $.proxy(this.pressTab,this));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//add event listeners\n\t\t\t\tthis.$body.bind('mouseup keyup',$.proxy(this.updateUI,this));\n\t\t\t\tthis.$body.bind('mousedown',$.proxy(function(e) {this.clearLastRange();this.checkForLastBR(e.target)},this));\n\n\t\t\t\t//trace Textarea\n\t\t\t\tif (this.options.traceTextarea===true) {\n\t\t\t\t\t$(document).bind(\"mousedown\",$.proxy(this.traceTextareaEvent,this));\n\t\t\t\t\tthis.$txtArea.val(\"\");\n\t\t\t\t}\n\n\t\t\t\t//attach hotkeys\n\t\t\t\tif (this.options.hotkeys===true) {\n\t\t\t\t\tthis.$body.bind('keydown',$.proxy(this.presskey,this));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//smileConversion\n\t\t\t\tif (this.options.smileConversion===true) {\n\t\t\t\t\tthis.$body.bind('keyup',$.proxy(this.smileConversion,this));\n\t\t\t\t}\n\n\t\t\t\tthis.inited=true;\n\n\t\t\t\t//create resize lines\n\t\t\t\tif (this.options.autoresize===true) {\n\t\t\t\t\tthis.$bresize = $(this.elFromString('<div class=\"bottom-resize-line\"></div>')).appendTo(this.$editor)\n\t\t\t\t\t\t.wdrag({\n\t\t\t\t\t\t\tscope:this,\n\t\t\t\t\t\t\taxisY: true,\n\t\t\t\t\t\t\theight: height\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.imgListeners();\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t//this.$editor.append('<span class=\"powered\">Powered by <a href=\"http://www.wysibb.com\" target=\"_blank\">WysiBB<a/></span>');\n\t\t\t\n\t\t\t//add event listeners to textarea \n\t\t\tthis.$txtArea.bind('mouseup keyup',$.proxy(function() {\n\t\t\t\tclearTimeout(this.uitimer);\n\t\t\t\tthis.uitimer = setTimeout($.proxy(this.updateUI,this),100);\n\t\t\t},this));\n\t\t\t\n\t\t\t//attach hotkeys\n\t\t\tif (this.options.hotkeys===true) {\n\t\t\t\t$(document).bind('keydown',$.proxy(this.presskey,this));\n\t\t\t}\n\t\t},\n\t\tbuildToolbar: function() {\n\t\t\tif (this.options.toolbar === false) {return false;}\n\t\t\t\n\t\t\t//this.$toolbar = $('<div class=\"wysibb-toolbar\">').prependTo(this.$editor);\n\t\t\tthis.$toolbar = $('<div>').addClass(\"wysibb-toolbar\").prependTo(this.$editor);\n\t\t\t\n\t\t\tvar $btnContainer;\n\t\t\t$.each(this.options.buttons,$.proxy(function(i,bn) {\n\t\t\t\tvar opt = this.options.allButtons[bn];\n\t\t\t\tif (i==0 || bn==\"|\" || bn==\"-\") {\n\t\t\t\t\tif (bn==\"-\") {\n\t\t\t\t\t\tthis.$toolbar.append(\"<div>\");\n\t\t\t\t\t}\n\t\t\t\t\t$btnContainer = $('<div class=\"wysibb-toolbar-container\">').appendTo(this.$toolbar);\n\t\t\t\t}\n\t\t\t\tif (opt) {\n\t\t\t\t\tif (opt.type==\"colorpicker\") {\n\t\t\t\t\t\tthis.buildColorpicker($btnContainer,bn,opt);\n\t\t\t\t\t}else if (opt.type==\"table\") {\n\t\t\t\t\t\tthis.buildTablepicker($btnContainer,bn,opt);\n\t\t\t\t\t}else if (opt.type==\"select\") {\n\t\t\t\t\t\tthis.buildSelect($btnContainer,bn,opt);\n\t\t\t\t\t}else if (opt.type==\"smilebox\") {\n\t\t\t\t\t\tthis.buildSmilebox($btnContainer,bn,opt);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.buildButton($btnContainer,bn,opt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t\n\t\t\t//fix for hide tooltip on quick mouse over\n\t\t\tthis.$toolbar.find(\".btn-tooltip\").hover(function () {$(this).parent().css(\"overflow\",\"hidden\")},function() {$(this).parent().css(\"overflow\",\"visible\")});\n\t\t\t\n\t\t\t//build bbcode switch button\n\t\t\t//var $bbsw = $('<div class=\"wysibb-toolbar-container modeSwitch\"><div class=\"wysibb-toolbar-btn\" unselectable=\"on\"><span class=\"btn-inner ve-tlb-bbcode\" unselectable=\"on\"></span></div></div>').appendTo(this.$toolbar);\n\t\t\tvar $bbsw = $(document.createElement('div')).addClass(\"wysibb-toolbar-container modeSwitch\").html('<div class=\"wysibb-toolbar-btn mswitch\" unselectable=\"on\"><span class=\"btn-inner modesw\" unselectable=\"on\">[bbcode]</span></div>').appendTo(this.$toolbar);\n\t\t\tif (this.options.bbmode==true) {$bbsw.children(\".wysibb-toolbar-btn\").addClass(\"on\");}\n\t\t\tif (this.options.onlyBBmode===false) {\n\t\t\t\t$bbsw.children(\".wysibb-toolbar-btn\").click($.proxy(function(e) {\n\t\t\t\t\t$(e.currentTarget).toggleClass(\"on\");\n\t\t\t\t\tthis.modeSwitch();\n\t\t\t\t},this));\n\t\t\t}\n\t\t},\n\t\tbuildButton: function(container,bn,opt) {\n\t\t\tif (typeof(container)!=\"object\") {\n\t\t\t\tcontainer = this.$toolbar;\n\t\t\t}\n\t\t\tvar btnHTML = (opt.buttonHTML) ? $(this.strf(opt.buttonHTML,this.options)).addClass(\"btn-inner\") : this.strf('<span class=\"btn-inner btn-text\">{text}</span>',{text:opt.buttonText.replace(/</g,\"&lt;\")});\n\t\t\tvar hotkey = (this.options.hotkeys===true && this.options.showHotkeys===true && opt.hotkey) ? (' <span class=\"tthotkey\">['+opt.hotkey+']</span>'):\"\"\n\t\t\tvar $btn = $('<div class=\"wysibb-toolbar-btn wbb-'+bn+'\">').appendTo(container).append(btnHTML).append(this.strf('<span class=\"btn-tooltip\">{title}<ins/>{hotkey}</span>',{title:opt.title,hotkey:hotkey}));\n\t\t\t\n\t\t\t//attach events\n\t\t\tthis.controllers.push($btn);\n\t\t\t$btn.bind('queryState',$.proxy(function(e) {\n\t\t\t\t(this.queryState(bn)) ? $(e.currentTarget).addClass(\"on\"):$(e.currentTarget).removeClass(\"on\");\n\t\t\t},this));\n\t\t\t$btn.mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.execCommand(bn,opt.exvalue || false);\n\t\t\t\t$(e.currentTarget).trigger('queryState');\n\t\t\t},this));\n\t\t},\n\t\tbuildColorpicker: function(container,bn,opt) {\n\t\t\tvar $btn = $('<div class=\"wysibb-toolbar-btn wbb-dropdown wbb-cp\">').appendTo(container).append('<div class=\"ve-tlb-colorpick\"><span class=\"fonticon\">\\uE010</span><span class=\"cp-line\"></span></div><ins class=\"fonticon ar\">\\uE011</ins>').append(this.strf('<span class=\"btn-tooltip\">{title}<ins/></span>',{title:opt.title}));\n\t\t\tvar $cpline = $btn.find(\".cp-line\");\n\t\t\t\n\t\t\tvar $dropblock = $('<div class=\"wbb-list\">').appendTo($btn); \n\t\t\t$dropblock.append('<div class=\"nc\">'+CURLANG.auto+'</div>');\n\t\t\tvar colorlist = (opt.colors) ? opt.colors.split(\",\"):[]; \n\t\t\tfor (var j=0; j<colorlist.length; j++) {\n\t\t\t\tcolorlist[j] = $.trim(colorlist[j]);\n\t\t\t\tif (colorlist[j]==\"-\") { \n\t\t\t\t\t//insert padding\n\t\t\t\t\t$dropblock.append('<span class=\"pl\"></span>');\n\t\t\t\t}else{ \n\t\t\t\t\t$dropblock.append(this.strf('<div class=\"sc\" style=\"background:{color}\" title=\"{color}\"></div>',{color:colorlist[j]}));\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar basecolor = $(document.body).css(\"color\");\n\t\t\t//attach events\n\t\t\tthis.controllers.push($btn);\n\t\t\t$btn.bind('queryState',$.proxy(function(e) {\n\t\t\t\t//queryState\n\t\t\t\t$cpline.css(\"background-color\",basecolor);\n\t\t\t\tvar r = this.queryState(bn,true);\n\t\t\t\tif (r) {\n\t\t\t\t\t$cpline.css(\"background-color\",(this.options.bbmode) ? r.color:r);\n\t\t\t\t\t$btn.find(\".ve-tlb-colorpick span.fonticon\").css(\"color\",(this.options.bbmode) ? r.color:r);\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t$btn.mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.dropdownclick(\".wbb-cp\",\".wbb-list\",e);\n\t\t\t},this));\n\t\t\t$btn.find(\".sc\").mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.selectLastRange();\n\t\t\t\tvar c = $(e.currentTarget).attr(\"title\");\n\t\t\t\tthis.execCommand(bn,c);\n\t\t\t\t$btn.trigger('queryState');\n\t\t\t},this));\n\t\t\t$btn.find(\".nc\").mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.selectLastRange();\n\t\t\t\tthis.execCommand(bn,basecolor);\n\t\t\t\t$btn.trigger('queryState');\n\t\t\t},this));\n\t\t\t$btn.mousedown(function(e) { \n\t\t\t\tif (e.preventDefault) e.preventDefault();\n\t\t\t});\n\t\t},\n\t\tbuildTablepicker: function(container,bn,opt) {\n\t\t\tvar $btn = $('<div class=\"wysibb-toolbar-btn wbb-dropdown wbb-tbl\">').appendTo(container).append('<span class=\"btn-inner fonticon ve-tlb-table1\">\\uE00e</span><ins class=\"fonticon ar\">\\uE011</ins>').append(this.strf('<span class=\"btn-tooltip\">{title}<ins/></span>',{title:opt.title}));\n\t\t\t\n\t\t\tvar $listblock = $('<div class=\"wbb-list\">').appendTo($btn);\n\t\t\tvar $dropblock = $('<div>').css({\"position\":\"relative\",\"box-sizing\":\"border-box\"}).appendTo($listblock);\n\t\t\tvar rows = opt.rows || 10;\n\t\t\tvar cols = opt.cols || 10;\n\t\t\tvar allcount = rows*cols;\n\t\t\t$dropblock.css(\"height\",(rows*opt.cellwidth+2)+\"px\");\n\t\t\tfor (var j=1; j<=cols; j++) {\n\t\t\t\tfor (var h=1; h<=rows; h++) {\n\t\t\t\t\t//var html = this.strf('<div class=\"tbl-sel\" style=\"width:{width}px;height:{height}px;z-index:{zindex}\" title=\"{row},{col}\"></div>',{width: (j*opt.cellwidth),height: (h*opt.cellwidth),zindex: --allcount,row:h,col:j});\n\t\t\t\t\tvar html = '<div class=\"tbl-sel\" style=\"width:'+(j*100/cols)+'%;height:'+(h*100/rows)+'%;z-index:'+(--allcount)+'\" title=\"'+h+','+j+'\"></div>';\n\t\t\t\t\t$dropblock.append(html);\n\t\t\t\t}\n\t\t\t}\n\t\t\t//this.debug(\"Attach event on: tbl-sel\");\n\t\t\t$btn.find(\".tbl-sel\").mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar t = $(e.currentTarget).attr(\"title\");\n\t\t\t\tvar rc = t.split(\",\");\n\t\t\t\tvar code = (this.options.bbmode) ? '[table]':'<table class=\"wbb-table\" cellspacing=\"5\" cellpadding=\"0\">';\n\t\t\t\tfor (var i=1; i<=rc[0]; i++) {\n\t\t\t\t\tcode += (this.options.bbmode) ? ' [tr]\\n':'<tr>';\n\t\t\t\t\tfor (var j=1; j<=rc[1]; j++) {\n\t\t\t\t\t\tcode += (this.options.bbmode) ? '  [td][/td]\\n':'<td>\\uFEFF</td>';\n\t\t\t\t\t}\n\t\t\t\t\tcode += (this.options.bbmode) ? '[/tr]\\n':'</tr>';\n\t\t\t\t}\n\t\t\t\tcode += (this.options.bbmode) ? '[/table]':'</table>';\n\t\t\t\tthis.insertAtCursor(code);\n\t\t\t},this));\n\t\t\t//this.debug(\"END Attach event on: tbl-sel\");\n\t\t\t$btn.mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.dropdownclick(\".wbb-tbl\",\".wbb-list\",e);\n\t\t\t},this));\n\t\t\t\n\t\t},\n\t\tbuildSelect: function(container,bn,opt) {\n\t\t\tvar $btn = $('<div class=\"wysibb-toolbar-btn wbb-select wbb-'+bn+'\">').appendTo(container).append(this.strf('<span class=\"val\">{title}</span><ins class=\"fonticon sar\">\\uE012</ins>',opt)).append(this.strf('<span class=\"btn-tooltip\">{title}<ins/></span>',{title:opt.title}));  \n\t\t\tvar $sblock = $('<div class=\"wbb-list\">').appendTo($btn);\n\t\t\tvar $sval = $btn.find(\"span.val\");\n\t\t\t\n\t\t\tvar olist = ($.isArray(opt.options)) ? opt.options:opt.options.split(\",\");\n\t\t\tvar $selectbox = (this.isMobile) ? $(\"<select>\").addClass(\"wbb-selectbox\"):\"\";\n\t\t\tfor (var i=0; i<olist.length; i++) {\n\t\t\t\tvar oname = olist[i];\n\t\t\t\tif (typeof(oname)==\"string\") {\n\t\t\t\t\tvar option = this.options.allButtons[oname];\n\t\t\t\t\tif (option) {\n\t\t\t\t\t\t//$.log(\"create: \"+oname); \n\t\t\t\t\t\tif (option.html) {\n\t\t\t\t\t\t\t$('<span>').addClass(\"option\").attr(\"oid\",oname).attr(\"cmdvalue\",option.exvalue).appendTo($sblock).append(this.strf(option.html,{seltext:option.title}));\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t$sblock.append(this.strf('<span class=\"option\" oid=\"'+oname+'\" cmdvalue=\"'+option.exvalue+'\">{title}</span>',option));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t//SelectBox for mobile devices\n\t\t\t\t\t\tif (this.isMobile) {\n\t\t\t\t\t\t\t$selectbox.append($('<option>').attr(\"oid\",oname).attr(\"cmdvalue\",option.exvalue).append(option.title));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\t//build option list from array\n\t\t\t\t\tvar params = {\n\t\t\t\t\t\tseltext: oname.title\n\t\t\t\t\t}\n\t\t\t\t\tparams[opt.valueBBname]=oname.exvalue;\n\t\t\t\t\t$('<span>').addClass(\"option\").attr(\"oid\",bn).attr(\"cmdvalue\",oname.exvalue).appendTo($sblock).append(this.strf(opt.html,params));\n\t\t\t\t\t\n\t\t\t\t\tif (this.isMobile) {$selectbox.append($('<option>').attr(\"oid\",bn).attr(\"cmdvalue\",oname.exvalue).append(oname.exvalue))}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//$sblock.append($selectbox);\n\t\t\tif (this.isMobile) {\n\t\t\t\t$selectbox.appendTo(container);\n\t\t\t\tthis.controllers.push($selectbox);\n\t\t\t\t\n\t\t\t\t$selectbox.bind('queryState',$.proxy(function(e) {\n\t\t\t\t\t//queryState\n\t\t\t\t\t$selectbox.find(\"option\").each($.proxy(function(i,el){\n\t\t\t\t\t\tvar $el = $(el);\n\t\t\t\t\t\tvar r = this.queryState($el.attr(\"oid\"),true);\n\t\t\t\t\t\tvar cmdvalue = $el.attr(\"cmdvalue\");\n\t\t\t\t\t\tif ((cmdvalue && r==$el.attr(\"cmdvalue\")) || (!cmdvalue && r)) {\n\t\t\t\t\t\t\t$el.prop(\"selected\",true);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t},this));\n\t\t\t\t},this));\n\t\t\t\t\n\t\t\t\t$selectbox.change($.proxy(function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tvar $o =  $(e.currentTarget).find(\":selected\");\n\t\t\t\t\tvar oid = $o.attr(\"oid\");\n\t\t\t\t\tvar cmdvalue = $o.attr(\"cmdvalue\");\n\t\t\t\t\tvar opt = this.options.allButtons[oid];\n\t\t\t\t\tthis.execCommand(oid,opt.exvalue || cmdvalue || false);\n\t\t\t\t\t$(e.currentTarget).trigger('queryState');\n\t\t\t\t},this));\n\t\t\t\t\n\t\t\t}\n\t\t\tthis.controllers.push($btn);\n\t\t\t$btn.bind('queryState',$.proxy(function(e) {\n\t\t\t\t//queryState\n\t\t\t\t$sval.text(opt.title);\n\t\t\t\t$btn.find(\".option.selected\").removeClass(\"selected\");\n\t\t\t\t$btn.find(\".option\").each($.proxy(function(i,el){\n\t\t\t\t\tvar $el = $(el);\n\t\t\t\t\tvar r = this.queryState($el.attr(\"oid\"),true);\n\t\t\t\t\tvar cmdvalue = $el.attr(\"cmdvalue\");\n\t\t\t\t\tif ((cmdvalue && r==$el.attr(\"cmdvalue\")) || (!cmdvalue && r)) {\n\t\t\t\t\t\t$sval.text($el.text());\n\t\t\t\t\t\t$el.addClass(\"selected\");\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},this));\n\t\t\t},this));\n\t\t\t$btn.mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.dropdownclick(\".wbb-select\",\".wbb-list\",e);\n\t\t\t},this));\n\t\t\t$btn.find(\".option\").mousedown($.proxy(function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tvar oid = $(e.currentTarget).attr(\"oid\");\n\t\t\t\tvar cmdvalue = $(e.currentTarget).attr(\"cmdvalue\");\n\t\t\t\tvar opt = this.options.allButtons[oid];\n\t\t\t\tthis.execCommand(oid,opt.exvalue || cmdvalue || false);\n\t\t\t\t$(e.currentTarget).trigger('queryState');\n\t\t\t},this));\n\t\t},\n\t\tbuildSmilebox: function(container,bn,opt) {\n\t\t\tif (this.options.smileList && this.options.smileList.length>0) {\n\t\t\t\tvar $btnHTML = $(this.strf(opt.buttonHTML,opt)).addClass(\"btn-inner\");\n\t\t\t\tvar $btn = $('<div class=\"wysibb-toolbar-btn wbb-smilebox wbb-'+bn+'\">').appendTo(container).append($btnHTML).append(this.strf('<span class=\"btn-tooltip\">{title}<ins/></span>',{title:opt.title}));  \n\t\t\t\tvar $sblock = $('<div class=\"wbb-list\">').appendTo($btn);\n\t\t\t\tif ($.isArray(this.options.smileList)) {\n\t\t\t\t\t$.each(this.options.smileList,$.proxy(function(i,sm){\n\t\t\t\t\t\t$('<span>').addClass(\"smile\").appendTo($sblock).append($(this.strf(sm.img,this.options)).attr(\"title\",sm.title));\n\t\t\t\t\t},this));\n\t\t\t\t}\n\t\t\t\t$btn.mousedown($.proxy(function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.dropdownclick(\".wbb-smilebox\",\".wbb-list\",e);\n\t\t\t\t},this));\n\t\t\t\t$btn.find('.smile').mousedown($.proxy(function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t//this.selectLastRange();\n\t\t\t\t\tthis.insertAtCursor((this.options.bbmode) ? this.toBB($(e.currentTarget).html()):$($(e.currentTarget).html()));\n\t\t\t\t},this))\n\t\t\t}\n\t\t},\n\t\tupdateUI: function(e) {\n\t\t\tif (!e || ((e.which>=8 && e.which<=46) || e.which>90 || e.type==\"mouseup\")) {\n\t\t\t\t$.each(this.controllers,$.proxy(function(i,$btn) {\n\t\t\t\t\t$btn.trigger('queryState');\n\t\t\t\t},this));\n\t\t\t}\n\t\t\t\n\t\t\t//check for onlyClearText\n\t\t\tthis.disNonActiveButtons();\n\t\t\t\n\t\t},\n\t\tinitModal: function() {\n\t\t\tthis.$modal=$(\"#wbbmodal\");\n\t\t\tif (this.$modal.length==0) {\n\t\t\t\t$.log(\"Init modal\");\n\t\t\t\tthis.$modal = $('<div>').attr(\"id\",\"wbbmodal\").prependTo(document.body)\n\t\t\t\t\t.html('<div class=\"wbbm\"><div class=\"wbbm-title\"><span class=\"wbbm-title-text\"></span><span class=\"wbbclose\" title=\"'+CURLANG.close+'\">×</span></div><div class=\"wbbm-content\"></div><div class=\"wbbm-bottom\"><button id=\"wbbm-submit\" class=\"wbb-button\">'+CURLANG.save+'</button><button id=\"wbbm-cancel\" class=\"wbb-cancel-button\">'+CURLANG.cancel+'</button><button id=\"wbbm-remove\" class=\"wbb-remove-button\">'+CURLANG.remove+'</button></div></div>').hide();\n\t\t\t\t\n\t\t\t\tthis.$modal.find('#wbbm-cancel,.wbbclose').click($.proxy(this.closeModal,this));\n\t\t\t\tthis.$modal.bind('click',$.proxy(function(e) {\n\t\t\t\t\tif ($(e.target).parents(\".wbbm\").length==0) {\n\t\t\t\t\t\tthis.closeModal();\n\t\t\t\t\t}\n\t\t\t\t},this));\n\t\t\t\t\n\t\t\t\t$(document).bind(\"keydown\",$.proxy(this.escModal,this)); //ESC key close modal\n\t\t\t}\n\t\t},\n\t\tinitHotkeys: function() {\n\t\t\t$.log(\"initHotkeys\");\n\t\t\tthis.hotkeys=[];\n\t\t\tvar klist = \"0123456789       abcdefghijklmnopqrstuvwxyz\";\n\t\t\t$.each(this.options.allButtons,$.proxy(function(cmd,opt) {\n\t\t\t\tif (opt.hotkey) {\n\t\t\t\t\tvar keys = opt.hotkey.split(\"+\");\n \t\t\t\t\tif (keys && keys.length>=2) {\n\t\t\t\t\t\tvar metasum=0;\n\t\t\t\t\t\tvar key = keys.pop();\n\t\t\t\t\t\t$.each(keys,function(i,k) {\n\t\t\t\t\t\t\tswitch($.trim(k.toLowerCase())) {\n\t\t\t\t\t\t\t\tcase \"ctrl\": {metasum+=1;break;}\n\t\t\t\t\t\t\t\tcase \"shift\": {metasum+=4;break;}\n\t\t\t\t\t\t\t\tcase \"alt\": {metasum+=7;break;}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t//$.log(\"metasum: \"+metasum+\" key: \"+key+\" code: \"+(klist.indexOf(key)+48));\n\t\t\t\t\t\tif (metasum>0) {\n\t\t\t\t\t\t\tif (!this.hotkeys[\"m\"+metasum]) {this.hotkeys[\"m\"+metasum]=[];}\n\t\t\t\t\t\t\tthis.hotkeys[\"m\"+metasum][\"k\"+(klist.indexOf(key)+48)]=cmd;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},this))\n\t\t},\n\t\tpresskey: function(e) {\n\t\t\tif (e.ctrlKey==true || e.shiftKey==true || e.altKey==true) {\n\t\t\t\tvar  metasum = ((e.ctrlKey==true) ? 1:0)+((e.shiftKey==true) ? 4:0)+((e.altKey==true) ? 7:0);\n\t\t\t\tif (this.hotkeys[\"m\"+metasum] && this.hotkeys[\"m\"+metasum][\"k\"+e.which]) {\n\t\t\t\t\tthis.execCommand(this.hotkeys[\"m\"+metasum][\"k\"+e.which],false);\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\n\t\t//COgdfMMAND FUNCTIONS\n\t\texecCommand: function(command,value) {\n\t\t\t$.log(\"execCommand: \"+command);\n\t\t\tvar opt = this.options.allButtons[command];\n\t\t\tif (opt.en!==true) {return false;}\n\t\t\tvar queryState = this.queryState(command,value);\n\t\t\t\n\t\t\t//check for onlyClearText\n\t\t\tvar skipcmd = this.isInClearTextBlock();\n\t\t\tif (skipcmd && skipcmd!=command) {return;}\n\t\t\t\n\t\t\t\n\t\t\tif (opt.excmd) {\n\t\t\t\t//use NativeCommand\n\t\t\t\tif (this.options.bbmode) {\n\t\t\t\t\t$.log(\"Native command in bbmode: \"+command);\n\t\t\t\t\tif (queryState && opt.subInsert!=true) {\n\t\t\t\t\t\t//remove bbcode\n\t\t\t\t\t\tthis.wbbRemoveCallback(command,value);\n\t\t\t\t\t}else{\n\t\t\t\t\t\t//insert bbcode\n\t\t\t\t\t\tvar v = {};\n\t\t\t\t\t\tif (opt.valueBBname && value) {\n\t\t\t\t\t\t\tv[opt.valueBBname]=value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.insertAtCursor(this.getBBCodeByCommand(command,v));\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tthis.execNativeCommand(opt.excmd,value || false);\n\t\t\t\t}\n\t\t\t}else if (!opt.cmd) {\n\t\t\t\t//wbbCommand\n\t\t\t\t//this.wbbExecCommand(command,value,queryState,$.proxy(this.wbbInsertCallback,this),$.proxy(this.wbbRemoveCallback,this));\n\t\t\t\tthis.wbbExecCommand.call(this,command,value,queryState);\n\t\t\t}else{\n\t\t\t\t//user custom command\n\t\t\t\topt.cmd.call(this,command,value,queryState);\n\t\t\t}\n\t\t\tthis.updateUI();\n\t\t},\n\t\tqueryState: function(command,withvalue) {\n\t\t\tvar opt = this.options.allButtons[command];\n\t\t\tif (opt.en!==true) {return false;}\n\t\t\t//if (opt.subInsert===true && opt.type!=\"colorpicker\") {return false;}\n\t\t\tif (this.options.bbmode) {\n\t\t\t\t//bbmode\n\t\t\t\tif (opt.bbSelector) {\n\t\t\t\t\tfor (var i=0; i<opt.bbSelector.length; i++) {\n\t\t\t\t\t\tvar b = this.isBBContain(opt.bbSelector[i]);\n\t\t\t\t\t\tif (b) {\n\t\t\t\t\t\t\treturn this.getParams(b,opt.bbSelector[i],b[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}else{\n\t\t\t\tif (opt.excmd) {\n\t\t\t\t\t//native command\n\t\t\t\t\tif (withvalue) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t//Firefox fix\n\t\t\t\t\t\t\tvar v = (document.queryCommandValue(opt.excmd)+\"\").replace(/\\'/g,\"\");\n\t\t\t\t\t\t\tif (opt.excmd==\"foreColor\") {\n\t\t\t\t\t\t\t\tv = this.rgbToHex(v);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//return (v==value);\n\t\t\t\t\t\t\treturn v;\n\t\t\t\t\t\t}catch(e) {return false;}\n\t\t\t\t\t}else{\n\t\t\t\t\t\ttry { //Firefox fix, exception while get queryState for UnorderedList\n\t\t\t\t\t\t\tif ((opt.excmd==\"bold\" || opt.excmd==\"italic\" || opt.excmd==\"underline\" || opt.excmd==\"strikeThrough\") && $(this.getSelectNode()).is(\"img\")) { //Fix, when img selected\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}else if (opt.excmd==\"underline\" && $(this.getSelectNode()).closest(\"a\").length>0) { //fix, when link select\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn document.queryCommandState(opt.excmd);\n\t\t\t\t\t\t}catch(e) {return false;}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\t//custom command\n\t\t\t\t\tif ($.isArray(opt.rootSelector)) {\n\t\t\t\t\t\tfor (var i=0; i<opt.rootSelector.length; i++) {\n\t\t\t\t\t\t\tvar n = this.isContain(this.getSelectNode(),opt.rootSelector[i]);\n\t\t\t\t\t\t\tif (n) {\n\t\t\t\t\t\t\t\treturn this.getParams(n,opt.rootSelector[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\twbbExecCommand: function(command,value,queryState) { //default command for custom bbcodes\n\t\t\t$.log(\"wbbExecCommand\");\n\t\t\tvar opt = this.options.allButtons[command];\n\t\t\tif (opt) {\n\t\t\t\tif (opt.modal) {\n\t\t\t\t\tif ($.isFunction(opt.modal)) {\n\t\t\t\t\t\t//custom modal function\n\t\t\t\t\t\t//opt.modal(command,opt.modal,queryState,new clbk(this));\n\t\t\t\t\t\topt.modal.call(this,command,opt.modal,queryState);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tthis.showModal.call(this,command,opt.modal,queryState);\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tif (queryState && opt.subInsert!=true) {\n\t\t\t\t\t\t//remove formatting\n\t\t\t\t\t\t//removeCallback(command,value);\n\t\t\t\t\t\tthis.wbbRemoveCallback(command);\n\t\t\t\t\t}else{\n\t\t\t\t\t\t//insert format\n\t\t\t\t\t\tif (opt.groupkey) {\n\t\t\t\t\t\t\tvar groupsel = this.options.groups[opt.groupkey];\n\t\t\t\t\t\t\tif (groupsel) {\n\t\t\t\t\t\t\t\tvar snode = this.getSelectNode();\n\t\t\t\t\t\t\t\t$.each(groupsel,$.proxy(function(i,sel) {\n\t\t\t\t\t\t\t\t\tvar is = this.isContain(snode,sel);\n\t\t\t\t\t\t\t\t\tif (is) {\n\t\t\t\t\t\t\t\t\t\tvar $sp = $('<span>').html(is.innerHTML)\n\t\t\t\t\t\t\t\t\t\tvar id = this.setUID($sp);\n\t\t\t\t\t\t\t\t\t\t$(is).replaceWith($sp);\n\t\t\t\t\t\t\t\t\t\tthis.selectNode(this.$editor.find(\"#\"+id)[0]);\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},this));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.wbbInsertCallback(command,value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\twbbInsertCallback: function(command,paramobj) {\n\t\t\tif (typeof(paramobj)!=\"object\") {paramobj={}};\n\t\t\t$.log(\"wbbInsertCallback: \"+command);\n\t\t\tvar data = this.getCodeByCommand(command,paramobj);\n\t\t\tthis.insertAtCursor(data);\n\t\t\t\n\t\t\tif (this.seltextID && data.indexOf(this.seltextID)!=-1) {\n\t\t\t\tvar snode = this.$body.find(\"#\"+this.seltextID)[0];\n\t\t\t\tthis.selectNode(snode);\n\t\t\t\t$(snode).removeAttr(\"id\");\n\t\t\t\tthis.seltextID=false;\n\t\t\t}\n\t\t},\n\t\twbbRemoveCallback: function(command,clear) {\n\t\t\t$.log(\"wbbRemoveCallback: \"+command);\n\t\t\tvar opt = this.options.allButtons[command];\n\t\t\tif (this.options.bbmode) {\n\t\t\t\t//bbmode\n\t\t\t\t//REMOVE BBCODE\n\t\t\t\tvar pos = this.getCursorPosBB();\n\t\t\t\tvar stextnum=0;\n\t\t\t\t$.each(opt.bbSelector,$.proxy(function(i,bbcode) {\n\t\t\t\t\tvar stext = bbcode.match(/\\{[\\s\\S]+?\\}/g);\n\t\t\t\t\t$.each(stext,function(n,s) {\n\t\t\t\t\t\tif (s.toLowerCase()==\"{seltext}\") {stextnum=n;return false}\n\t\t\t\t\t});\n\t\t\t\t\tvar a = this.isBBContain(bbcode);\n\t\t\t\t\tif (a) {\n\t\t\t\t\t\tthis.txtArea.value = this.txtArea.value.substr(0,a[1])+this.txtArea.value.substr(a[1],this.txtArea.value.length-a[1]).replace(a[0][0],(clear===true) ? '':a[0][stextnum+1]);\n\t\t\t\t\t\tthis.setCursorPosBB(a[1]);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},this));\n\t\t\t}else{\n\t\t\t\tvar node = this.getSelectNode();\n\t\t\t\t$.each(opt.rootSelector,$.proxy(function(i,s) {\n\t\t\t\t\t//$.log(\"RS: \"+s);\n\t\t\t\t\tvar root = this.isContain(node,s);\n\t\t\t\t\tif (!root) {return true;}\n\t\t\t\t\tvar $root = $(root);\n\t\t\t\t\tvar cs = this.options.rules[s][0][1];\n\t\t\t\t\tif ($root.is(\"span[wbb]\") || !$root.is(\"span,font\")) { //remove only blocks\n\t\t\t\t\t\tif (clear===true || (!cs || !cs[\"seltext\"])) {\n\t\t\t\t\t\t\tthis.setCursorByEl($root);\n\t\t\t\t\t\t\t$root.remove();\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif (cs && cs[\"seltext\"] && cs[\"seltext\"][\"sel\"]) {\n\t\t\t\t\t\t\t\tvar htmldata = $root.find(cs[\"seltext\"][\"sel\"]).html();\n\t\t\t\t\t\t\t\tif (opt.onlyClearText===true) {\n\t\t\t\t\t\t\t\t\thtmldata = this.getHTML(htmldata,true,true);\n\t\t\t\t\t\t\t\t\thtmldata = htmldata.replace(/\\&#123;/g,\"{\").replace(/\\&#125;/g,\"}\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$root.replaceWith(htmldata);\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tvar htmldata = $root.html();\n\t\t\t\t\t\t\t\tif (opt.onlyClearText===true) {\n\t\t\t\t\t\t\t\t\thtmldata = this.getHTML(htmldata,true);\n\t\t\t\t\t\t\t\t\thtmldata = htmldata.replace(/\\&lt;/g,\"<\").replace(/\\&gt;/g,\">\").replace(/\\&#123;/g,\"{\").replace(/\\&#125;/g,\"}\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t$root.replaceWith(htmldata);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}else{\n\t\t\t\t\t\t//span,font - extract select content from this span,font\n\t\t\t\t\t\tvar rng = this.getRange();\n\t\t\t\t\t\tvar shtml = this.getSelectText();\n\t\t\t\t\t\tvar rnode = this.getSelectNode();\n\t\t\t\t\t\tif (shtml==\"\") {\n\t\t\t\t\t\t\tshtml=\"\\uFEFF\";\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tshtml = this.clearFromSubInsert(shtml,command);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar ins = this.elFromString(shtml);\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar before_rng = (window.getSelection) ? rng.cloneRange():this.body.createTextRange();\n\t\t\t\t\t\tvar after_rng = (window.getSelection) ? rng.cloneRange():this.body.createTextRange();\n\n\t\t\t\t\t\tif (window.getSelection) {\n\t\t\t\t\t\t\tthis.insertAtCursor('<span id=\"wbbdivide\"></span>');\n\t\t\t\t\t\t\tvar div = $root.find('span#wbbdivide').get(0);\n\t\t\t\t\t\t\tbefore_rng.setStart(root.firstChild,0);\n\t\t\t\t\t\t\tbefore_rng.setEndBefore(div);\n\t\t\t\t\t\t\tafter_rng.setStartAfter(div);\n\t\t\t\t\t\t\tafter_rng.setEndAfter(root.lastChild);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tbefore_rng.moveToElementText(root);\n\t\t\t\t\t\t\tafter_rng.moveToElementText(root);\n\t\t\t\t\t\t\tbefore_rng.setEndPoint('EndToStart',rng);\n\t\t\t\t\t\t\tafter_rng.setEndPoint('StartToEnd',rng);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar bf = this.getSelectText(false,before_rng);\n\t\t\t\t\t\tvar af = this.getSelectText(false,after_rng);\n\t\t\t\t\t\tif (af!=\"\") {\n\t\t\t\t\t\t\tvar $af = $root.clone().html(af);\n\t\t\t\t\t\t\t$root.after($af);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (clear!==true) $root.after(ins); //insert select html\n\t\t\t\t\t\tif (window.getSelection) {\n\t\t\t\t\t\t\t$root.html(bf);\n\t\t\t\t\t\t\tif (clear!==true) this.selectNode(ins);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t$root.replaceWith(bf);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},this));\n\t\t\t}\n\t\t},\n\t\texecNativeCommand: function(cmd,param) { \n\t\t\t//$.log(\"execNativeCommand: '\"+cmd+\"' : \"+param); \n\t\t\tthis.body.focus(); //set focus to frame body\n\t\t\tif (cmd==\"insertHTML\" && !window.getSelection) { //IE does't support insertHTML\n\t\t\t\tvar r = (this.lastRange) ? this.lastRange:document.selection.createRange(); //IE 7,8 range lost fix\n\t\t\t\tr.pasteHTML(param);\n\t\t\t\tvar txt = $('<div>').html(param).text(); //for ie selection inside block\n\t\t\t\tvar brsp = txt.indexOf(\"\\uFEFF\");\n\t\t\t\tif (brsp>-1) {\n\t\t\t\t\tr.moveStart('character',(-1)*(txt.length-brsp));\n\t\t\t\t\tr.select();\n\t\t\t\t}\n\t\t\t\tthis.lastRange=false;\n\t\t\t}else if (cmd==\"insertHTML\") { //fix webkit bug with insertHTML\n\t\t\t\tvar sel = this.getSelection();\n\t\t\t\tvar e = this.elFromString(param);\n\t\t\t\tvar rng = (this.lastRange) ? this.lastRange:this.getRange();\n\t\t\t\trng.deleteContents();\n\t\t\t\trng.insertNode(e);\n\t\t\t\trng.collapse(false);\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(rng);\n\t\t\t}else{\n\t\t\t\tif (typeof param == \"undefined\") {param=false;}\n\t\t\t\tif (this.lastRange) {\n\t\t\t\t\t$.log(\"Last range select\");\n\t\t\t\t\tthis.selectLastRange()\n\t\t\t\t}\n\t\t\t\tdocument.execCommand(cmd, false, param);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tgetCodeByCommand: function(command,paramobj) {\n\t\t\treturn (this.options.bbmode) ? this.getBBCodeByCommand(command,paramobj):this.getHTMLByCommand(command,paramobj);\n\t\t},\n\t\tgetBBCodeByCommand: function(command,params) {\n\t\t\tif (!this.options.allButtons[command]) {return \"\";}\n\t\t\tif (typeof(params)==\"undefined\") {params={};}\n\t\t\tparams = this.keysToLower(params);\n\t\t\tif (!params[\"seltext\"]) {\n\t\t\t\t//get selected text\n\t\t\t\tparams[\"seltext\"] = this.getSelectText(true);\n\t\t\t}\n\t\t\t\n\t\t\tvar bbcode = this.options.allButtons[command].bbcode;\n\t\t\t//bbcode = this.strf(bbcode,params);\n\t\t\tbbcode = bbcode.replace(/\\{(.*?)(\\[.*?\\])*\\}/g,function(str,p,vrgx) {\n\t\t\t\tif (vrgx) {\n\t\t\t\t\tvar vrgxp;\n\t\t\t\t\tif (vrgx) {\n\t\t\t\t\t\tvrgxp = new RegExp(vrgx+\"+\",\"i\");\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof(params[p.toLowerCase()])!=\"undefined\" && params[p.toLowerCase()].toString().match(vrgxp)===null) {\n\t\t\t\t\t\t//not valid value\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn (typeof(params[p.toLowerCase()])==\"undefined\") ? \"\":params[p.toLowerCase()];\n\t\t\t});\n\t\t\t\n\t\t\t//insert first with max params\n\t\t\tvar rbbcode=null,maxpcount=0;\n\t\t\tif (this.options.allButtons[command].transform) {\n\t\t\t\tvar tr=[];\n\t\t\t\t$.each(this.options.allButtons[command].transform,function(html,bb) {\n\t\t\t\t\ttr.push(bb);\n\t\t\t\t});\n\t\t\t\ttr=this.sortArray(tr,-1);\n\t\t\t\t$.each(tr,function(i,v) {\n\t\t\t\t\tvar valid=true,pcount=0,pname={};;\n\t\t\t\t\tv = v.replace(/\\{(.*?)(\\[.*?\\])*\\}/g,function(str,p,vrgx) {\n\t\t\t\t\t\tvar vrgxp;\n\t\t\t\t\t\tp = p.toLowerCase();\n\t\t\t\t\t\tif (vrgx) {\n\t\t\t\t\t\t\tvrgxp = new RegExp(vrgx+\"+\",\"i\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof(params[p.toLowerCase()])==\"undefined\" || (vrgx && params[p.toLowerCase()].toString().match(vrgxp)===null)) {valid=false;};\n\t\t\t\t\t\tif (typeof(params[p])!=\"undefined\" && !pname[p]) {pname[p]=1;pcount++;}\n\t\t\t\t\t\treturn (typeof(params[p.toLowerCase()])==\"undefined\") ? \"\":params[p.toLowerCase()];\n\t\t\t\t\t});\n\t\t\t\t\tif (valid && (pcount>maxpcount)) {rbbcode = v;maxpcount=pcount;}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn rbbcode || bbcode;\n\t\t},\n\t\tgetHTMLByCommand: function(command,params) {\n\t\t\tif (!this.options.allButtons[command]) {return \"\";}\n\t\t\tparams = this.keysToLower(params);\n\t\t\tif (typeof(params)==\"undefined\") {params={};}\n\t\t\tif (!params[\"seltext\"]) {\n\t\t\t\t//get selected text\n\t\t\t\tparams[\"seltext\"] = this.getSelectText(false);\n\t\t\t\t//$.log(\"seltext: '\"+params[\"seltext\"]+\"'\");\n\t\t\t\tif (params[\"seltext\"]==\"\") {params[\"seltext\"]=\"\\uFEFF\";}\n\t\t\t\telse{\n\t\t\t\t\t//clear selection from current command tags\n\t\t\t\t\tparams[\"seltext\"] = this.clearFromSubInsert(params[\"seltext\"],command);\n\t\t\t\t\t\n\t\t\t\t\t//toBB if params onlyClearText=true\n\t\t\t\t\tif (this.options.allButtons[command].onlyClearText===true) {\n\t\t\t\t\t\tparams[\"seltext\"] = this.toBB(params[\"seltext\"]).replace(/\\</g,\"&lt;\").replace(/\\n/g,\"<br/>\").replace(/\\s{3}/g,'<span class=\"wbbtab\"></span>'); \n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar postsel=\"\";\n\t\t\tthis.seltextID = \"wbbid_\"+(++this.lastid);\n\t\t\tif (command!=\"link\" && command!=\"img\") {\n\t\t\t\tparams[\"seltext\"] = '<span id=\"'+this.seltextID+'\">'+params[\"seltext\"]+'</span>'; //use for select seltext\n\t\t\t}else{\n\t\t\t\tpostsel = '<span id=\"'+this.seltextID+'\">\\uFEFF</span>'\n\t\t\t}\n\t\t\tvar html = this.options.allButtons[command].html;\n\t\t\thtml = html.replace(/\\{(.*?)(\\[.*?\\])*\\}/g,function(str,p,vrgx) {\n\t\t\t\tif (vrgx) {\n\t\t\t\t\tvar vrgxp = new RegExp(vrgx+\"+\",\"i\");\n\t\t\t\t\tif (typeof(params[p.toLowerCase()])!=\"undefined\" && params[p.toLowerCase()].toString().match(vrgxp)===null) {\n\t\t\t\t\t\t//not valid value\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn (typeof(params[p.toLowerCase()])==\"undefined\") ? \"\":params[p.toLowerCase()];\n\t\t\t});\n\t\t\t\n\t\t\t//insert first with max params\n\t\t\tvar rhtml=null,maxpcount=0;\n\t\t\tif (this.options.allButtons[command].transform) {\n\t\t\t\tvar tr=[];\n\t\t\t\t$.each(this.options.allButtons[command].transform,function(html,bb) {\n\t\t\t\t\ttr.push(html);\n\t\t\t\t});\n\t\t\t\ttr=this.sortArray(tr,-1);\n\t\t\t\t$.each(tr,function(i,v) {\n\t\t\t\t\tvar valid=true, pcount=0,pname={};\n\t\t\t\t\tv = v.replace(/\\{(.*?)(\\[.*?\\])*\\}/g,function(str,p,vrgx) {\n\t\t\t\t\t\tvar vrgxp;\n\t\t\t\t\t\tp = p.toLowerCase();\n\t\t\t\t\t\tif (vrgx) {\n\t\t\t\t\t\t\tvrgxp = new RegExp(vrgx+\"+\",\"i\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof(params[p])==\"undefined\" || (vrgx && params[p].toString().match(vrgxp)===null)) {valid=false;};\n\t\t\t\t\t\tif (typeof(params[p])!=\"undefined\" && !pname[p]) {pname[p]=1;pcount++;}\n\t\t\t\t\t\treturn (typeof(params[p])==\"undefined\") ? \"\":params[p];\n\t\t\t\t\t});\n\t\t\t\t\tif (valid && (pcount>maxpcount)) {rhtml = v;maxpcount=pcount;}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn (rhtml || html)+postsel;\n\t\t},\n\t\t\n\t\t//SELECTION FUNCTIONS\n\t\tgetSelection: function() {\n\t\t\tif (window.getSelection) {\n\t\t\t\treturn window.getSelection();\n\t\t\t}else if (document.selection) {\n\t\t\t\treturn (this.options.bbmode) ? document.selection.createRange():document.selection.createRange();\n\t\t\t}\n\t\t},\n\t\tgetSelectText: function(fromTxtArea,range) {\n\t\t\tif (fromTxtArea) {\n\t\t\t\t//return select text from textarea\n\t\t\t\tthis.txtArea.focus();\n\t\t\t\tif('selectionStart' in this.txtArea) {\n\t\t\t\t\tvar l = this.txtArea.selectionEnd - this.txtArea.selectionStart;\n\t\t\t\t\treturn this.txtArea.value.substr(this.txtArea.selectionStart, l);\n\t\t\t\t}else{\n\t\t\t\t\t//IE\n\t\t\t\t\tvar r = document.selection.createRange();\n\t\t\t\t\treturn r.text;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\t//return select html from body\n\t\t\t\tthis.body.focus();\n\t\t\t\tif (!range)  {range=this.getRange()};\n\t\t\t\tif (window.getSelection) {\n\t\t\t\t\t//w3c\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\treturn $('<div>').append(range.cloneContents()).html();\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\t//ie\n\t\t\t\t\treturn range.htmlText;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t},\n\t\tgetRange: function() {\n\t\t\tif (window.getSelection) {\n\t\t\t\tvar sel = this.getSelection();\n\t\t\t\tif (sel.getRangeAt && sel.rangeCount>0) {\n\t\t\t\t\treturn sel.getRangeAt(0);\n\t\t\t\t}else if (sel.anchorNode) {\n\t\t\t\t\tvar range = (this.options.bbmode) ? document.createRange() : document.createRange();\n\t\t\t\t\trange.setStart (sel.anchorNode, sel.anchorOffset);\n\t\t\t\t\trange.setEnd (sel.focusNode, sel.focusOffset);\n\t\t\t\t\treturn range;\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\treturn (this.options.bbmode===true) ? document.selection.createRange():document.selection.createRange();\n\t\t\t}\n\t\t},\n\t\tinsertAtCursor: function(code,forceBBMode) {\n\t\t\tif (typeof(code)!=\"string\") {code = $(\"<div>\").append(code).html();}\n\t\t\tif ((this.options.bbmode && typeof(forceBBMode)==\"undefined\") || forceBBMode===true) {\n\t\t\t\tvar clbb = code.replace(/.*(\\[\\/\\S+?\\])$/,\"$1\");\n\t\t\t\tvar p = this.getCursorPosBB()+((code.indexOf(clbb)!=-1 && code.match(/\\[.*\\]/)) ? code.indexOf(clbb):code.length);\n\t\t\t\tif (document.selection) {\n\t\t\t\t\t//IE\n\t\t\t\t\tthis.txtArea.focus();\n\t\t\t\t\tthis.getSelection().text=code;\n\t\t\t\t}else if (this.txtArea.selectionStart || this.txtArea.selectionStart == '0') {\n\t\t\t\t\tthis.txtArea.value = this.txtArea.value.substring(0, this.txtArea.selectionStart) + code + this.txtArea.value.substring(this.txtArea.selectionEnd, this.txtArea.value.length);\n\t\t\t\t}\n\t\t\t\tif (p<0) {p=0;}\n\t\t\t\tthis.setCursorPosBB(p);\n\t\t\t}else{\n\t\t\t\tthis.execNativeCommand(\"insertHTML\",code);\n\t\t\t\tvar node = this.getSelectNode();\n\t\t\t\tif (!$(node).closest(\"table,tr,td\")) {\n\t\t\t\t\tthis.splitPrevNext(node);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetSelectNode: function(rng) {\n\t\t\tthis.body.focus();\n\t\t\tif (!rng) {rng=this.getRange();}\n\t\t\tif (!rng) {return this.$body;}\n\t\t\t//return (window.getSelection) ? rng.commonAncestorContainer:rng.parentElement();\n\t\t\tvar sn = (window.getSelection) ? rng.commonAncestorContainer:rng.parentElement();\n\t\t\tif ($(sn).is(\".imgWrap\")) {sn = $(sn).children(\"img\")[0];}\n\t\t\treturn sn;\n\t\t},\n\t\tgetCursorPosBB: function() {\t\n\t\t\tvar pos=0;\n\t\t\tif ('selectionStart' in this.txtArea) {\n\t\t\t\tpos = this.txtArea.selectionStart;\n\t\t\t}else{\n\t\t\t\tthis.txtArea.focus();\n\t\t\t\tvar r = this.getRange();\n\t\t\t\tvar rt = document.body.createTextRange();\n\t\t\t\trt.moveToElementText(this.txtArea);\n\t\t\t\trt.setEndPoint('EndToStart',r);\n\t\t\t\tpos = rt.text.length;\n\t\t\t}\n\t\t\treturn pos;\n\t\t},\n\t\tsetCursorPosBB: function(pos) {\n\t\t\tif (this.options.bbmode) {\n\t\t\t\tif (window.getSelection) {\n\t\t\t\t\tthis.txtArea.selectionStart=pos;\n\t\t\t\t\tthis.txtArea.selectionEnd=pos;\n\t\t\t\t}else{\n\t\t\t\t\tvar range = this.txtArea.createTextRange();\n\t\t\t\t\trange.collapse(true);\n\t\t\t\t\trange.move('character', pos);\n\t\t\t\t\trange.select();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectNode: function(node,rng) {\n\t\t\tif (!rng) {rng = this.getRange();}\n\t\t\tif (!rng) {return;}\n\t\t\tif (window.getSelection) {\n\t\t\t\tvar sel = this.getSelection();\n\t\t\t\trng.selectNodeContents(node)\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(rng);\n\t\t\t}else{\n\t\t\t\trng.moveToElementText(node);\n\t\t\t\trng.select();\n\t\t\t}\n\t\t},\n\t\tselectRange: function(rng) {\n\t\t\tif (rng) {\n\t\t\t\tif (!window.getSelection) {\n\t\t\t\t\trng.select();\n\t\t\t\t}else{\n\t\t\t\t\tvar sel = this.getSelection();\n\t\t\t\t\tsel.removeAllRanges();\n\t\t\t\t\tsel.addRange(rng);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcloneRange: function(rng) {\n\t\t\tif (rng) {\n\t\t\t\tif (!window.getSelection) {\n\t\t\t\t\treturn rng.duplicate();\n\t\t\t\t}else{\n\t\t\t\t\treturn rng.cloneRange();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetRangeClone: function() {\n\t\t\treturn this.cloneRange(this.getRange());\n\t\t},\n\t\tsaveRange: function() {\n\t\t\tthis.setBodyFocus();\n\t\t\t//this.lastRange=(this.options.bbmode) ? this.getCursorPosBB():this.getRangeClone();\n\t\t\tthis.lastRange=this.getRangeClone();\n\t\t},\n\t\tselectLastRange: function() {\n\t\t\tif (this.lastRange) {\n\t\t\t\tthis.body.focus();\n\t\t\t\tthis.selectRange(this.lastRange);\n\t\t\t\tthis.lastRange=false;\n\t\t\t}\n\t\t},\n\t\tsetBodyFocus: function() {\n\t\t\t$.log(\"Set focus to WysiBB editor\");\n\t\t\tif (this.options.bbmode) {\n\t\t\t\tif (!this.$txtArea.is(\":focus\")) {\n\t\t\t\t\tthis.$txtArea.focus();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tif (!this.$body.is(\":focus\")) {\n\t\t\t\t\tthis.$body.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tclearLastRange: function() {\n\t\t\tthis.lastRange=false;\n\t\t},\n\t\t \n\t\t//TRANSFORM FUNCTIONS\n\t\tfilterByNode: function(node) {\n\t\t\tvar $n = $(node);\n\t\t\tvar tagName = $n.get(0).tagName.toLowerCase();\n\t\t\tvar filter=tagName;\n\t\t\tvar attributes = this.getAttributeList($n.get(0));\n\t\t\t$.each(attributes, $.proxy(function(i, item) {\n\t\t\t\tvar v = $n.attr(item);\n\t\t\t\t/* $.log(\"v: \"+v);\n\t\t\t\tif ($.inArray(item,this.options.attrWrap)!=-1) {\n\t\t\t\t\titem = '_'+item;\n\t\t\t\t} */\n\t\t\t\t//$.log(item);\n\t\t\t\tif (item.substr(0,1)==\"_\") {item=item.substr(1,item.length)}\n\t\t\t\tif (v && !v.match(/\\{.*?\\}/)) {\n\t\t\t\t\t//$.log(\"I1: \"+item);\n\t\t\t\t\tif (item==\"style\") {\n\t\t\t\t\t\tvar v = $n.attr(item);\n\t\t\t\t\t\tvar va = v.split(\";\");\n\t\t\t\t\t\t$.each(va,function(i,f) {\n\t\t\t\t\t\t\tif (f && f.length>0) {\n\t\t\t\t\t\t\t\tfilter+='['+item+'*=\"'+$.trim(f)+'\"]';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tfilter+='['+item+'=\"'+v+'\"]';\n\t\t\t\t\t}\n\t\t\t\t}else if (v && item==\"style\") {\n\t\t\t\t\t//$.log(\"I2: \"+item);\n\t\t\t\t\tvar vf = v.substr(0,v.indexOf(\"{\"));\n\t\t\t\t\tif (vf && vf!=\"\") {\n\t\t\t\t\t\tvar v = v.substr(0,v.indexOf(\"{\"));\n\t\t\t\t\t\tvar va = v.split(\";\");\n\t\t\t\t\t\t$.each(va,function(i,f) {\n\t\t\t\t\t\t\tfilter+='['+item+'*=\"'+f+'\"]';\n\t\t\t\t\t\t});\n\t\t\t\t\t\t//filter+='['+item+'*=\"'+v.substr(0,v.indexOf(\"{\"))+'\"]';\n\t\t\t\t\t}\n\t\t\t\t}else{ //1.2.2\n\t\t\t\t\t//$.log(\"I3: \"+item);\n\t\t\t\t\tfilter+='['+item+']';\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t\n\t\t\t//index\n\t\t\tvar idx = $n.parent().children(filter).index($n);\n\t\t\tif (idx>0) {\n\t\t\t\tfilter+=\":eq(\"+$n.index()+\")\";\n\t\t\t}\n\t\t\treturn filter;\n\t\t},\n\t\trelFilterByNode: function(node,stop) {\n\t\t\tvar p=\"\";\n\t\t\t$.each(this.options.attrWrap,function(i,a) {\n\t\t\t\tstop = stop.replace('['+a,'[_'+a);\n\t\t\t});\n\t\t\twhile (node && node.tagName!=\"BODY\" && !$(node).is(stop)) {\n\t\t\t\tp=this.filterByNode(node)+\" \"+p;\n\t\t\t\tif (node) {node = node.parentNode;}\n\t\t\t}\n\t\t\treturn p;\n\t\t},\n\t\tgetRegexpReplace: function(str,validname) {\n\t\t\tstr = str.replace(/(\\(|\\)|\\[|\\]|\\.|\\*|\\?|\\:|\\\\)/g,\"\\\\$1\") \n\t\t\t\t.replace(/\\s+/g,\"\\\\s+\")\n\t\t\t\t.replace(validname.replace(/(\\(|\\)|\\[|\\]|\\.|\\*|\\?|\\:|\\\\)/g,\"\\\\$1\"),\"(.+)\")\n\t\t\t\t.replace(/\\{\\S+?\\}/g,\".*\");\n\t\t\treturn (str);\n\t\t},\n\t\tgetBBCode: function() {\n\t\t\tif (!this.options.rules) {return this.$txtArea.val();}\n\t\t\tif (this.options.bbmode) {return this.$txtArea.val();}\n\t\t\tthis.clearEmpty();\n\t\t\tthis.removeLastBodyBR();\n\t\t\treturn this.toBB(this.$body.html());\n\t\t},\n\t\ttoBB: function(data) {\n\t\t\tif (!data) {return \"\";};\n\t\t\tvar $e = (typeof(data)==\"string\") ? $('<span>').html(data):$(data);\n\t\t\t//remove last BR\n\t\t\t$e.find(\"div,blockquote,p\").each(function() {\n\t\t\t\tif (this.nodeType!=3 && this.lastChild && this.lastChild.tagName==\"BR\") {\n\t\t\t\t\t$(this.lastChild).remove();\n\t\t\t\t}\n\t\t\t})\n\t\t\tif ($e.is(\"div,blockquote,p\") && $e[0].nodeType!=3 && $e[0].lastChild && $e[0].lastChild.tagName==\"BR\") {\n\t\t\t\t$($e[0].lastChild).remove();\n\t\t\t}\n\t\t\t//END remove last BR\n\t\t\t\n\t\t\t//Remove BR\n\t\t\t$e.find(\"ul > br, table > br, tr > br\").remove();\n\t\t\t//IE\n\t\t\t\n\t\t\tvar outbb=\"\";\n\t\t\t\n\t\t\t//transform smiles\n\t\t\t$.each(this.options.srules,$.proxy(function(s,bb) {\n\t\t\t\t$e.find(s).replaceWith(bb[0]);\n\t\t\t},this));\n\t\t\t\n\t\t\t$e.contents().each($.proxy(function(i,el) {\n\t\t\t\tvar $el = $(el);\n\t\t\t\tif (el.nodeType===3) {\n\t\t\t\t\toutbb+=el.data.replace(/\\n+/,\"\").replace(/\\t/g,\"   \");\n\t\t\t\t}else{\n\t\t\t\t\t//process html tag\n\t\t\t\t\tvar rpl,processed=false;\n\n\t\t\t\t\t//for (var rootsel in this.options.rules) {\n\t\t\t\t\tfor (var j=0; j<this.rsellist.length; j++) {\n\t\t\t\t\t\tvar rootsel = this.rsellist[j];\n\t\t\t\t\t\tif ($el && $el.is(rootsel)) {\n\t\t\t\t\t\t\t//it is root sel\n\t\t\t\t\t\t\tvar rlist = this.options.rules[rootsel];\n\t\t\t\t\t\t\tfor (var i=0; i<rlist.length; i++) {\n\t\t\t\t\t\t\t\tvar bbcode = rlist[i][0];\n\t\t\t\t\t\t\t\tvar crules = rlist[i][1];\n\t\t\t\t\t\t\t\tvar skip=false,keepElement=false,keepAttr=false;\n\t\t\t\t\t\t\t\tif (!$el.is(\"br\")) {\n\t\t\t\t\t\t\t\t\tbbcode = bbcode.replace(/\\n/g,\"<br>\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbbcode = bbcode.replace(/\\{(.*?)(\\[.*?\\])*\\}/g,$.proxy(function(str,s,vrgx) {\n\t\t\t\t\t\t\t\t\tvar c = crules[s.toLowerCase()];\n\t\t\t\t\t\t\t\t\t//if (typeof(c)==\"undefined\") {$.log(\"Param: {\"+s+\"} not found in HTML representation.\");skip=true;return s;}\n\t\t\t\t\t\t\t\t\tif (typeof(c)==\"undefined\") {$.log(\"Param: {\"+s+\"} not found in HTML representation.\");skip=true;}\n\t\t\t\t\t\t\t\t\tvar $cel = (c.sel) ? $(el).find(c.sel):$(el);\n\t\t\t\t\t\t\t\t\tif (c.attr && !$cel.attr(c.attr)) {skip=true;return s;} //skip if needed attribute not present, maybe other bbcode\n\t\t\t\t\t\t\t\t\tvar cont = (c.attr) ? $cel.attr(c.attr):$cel.html();\n\t\t\t\t\t\t\t\t\tif (typeof(cont)==\"undefined\" || cont==null) {skip=true;return s;}\n\t\t\t\t\t\t\t\t\tvar regexp = c.rgx;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t//style fix \n\t\t\t\t\t\t\t\t\tif (regexp && c.attr==\"style\" && regexp.substr(regexp.length-1,1)!=\";\") {\n\t\t\t\t\t\t\t\t\t\tregexp+=\";\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (c.attr==\"style\" && cont && cont.substr(cont.length-1,1)!=\";\") {cont+=\";\"}\n\t\t\t\t\t\t\t\t\t//prepare regexp\n\t\t\t\t\t\t\t\t\tvar rgx = (regexp) ? new RegExp(regexp,\"\"):false;\n\t\t\t\t\t\t\t\t\tif (rgx) {\n\t\t\t\t\t\t\t\t\t\tif (cont.match(rgx)) {\n\t\t\t\t\t\t\t\t\t\t\tvar m = cont.match(rgx);\n\t\t\t\t\t\t\t\t\t\t\tif (m && m.length==2) {\n\t\t\t\t\t\t\t\t\t\t\t\tcont=m[1];\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t\tcont=\"\";\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t//if it is style attr, then keep tag alive, remove this style\n\t\t\t\t\t\t\t\t\tif (c.attr && skip===false) {\n\t\t\t\t\t\t\t\t\t\tif (c.attr==\"style\") {\n\t\t\t\t\t\t\t\t\t\t\tkeepElement=true;\n\t\t\t\t\t\t\t\t\t\t\tvar nstyle=\"\";\n\t\t\t\t\t\t\t\t\t\t\tvar r = c.rgx.replace(/^\\.\\*\\?/,\"\").replace(/\\.\\*$/,\"\").replace(/;$/,\"\");\n\t\t\t\t\t\t\t\t\t\t\t$($cel.attr(\"style\").split(\";\")).each(function(idx,style) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (style && style!=\"\") {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!style.match(r)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tnstyle+=style+\";\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\tif (nstyle==\"\") {\n\t\t\t\t\t\t\t\t\t\t\t\t$cel.removeAttr(\"style\");\n\t\t\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t\t\t$cel.attr(\"style\",nstyle);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}else if (c.rgx===false){\t\n\t\t\t\t\t\t\t\t\t\t\tkeepElement=true;\n\t\t\t\t\t\t\t\t\t\t\tkeepAttr=true;\n\t\t\t\t\t\t\t\t\t\t\t$cel.removeAttr(c.attr);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif ($el.is('table,tr,td,font')) {keepElement=true;}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treturn cont || \"\";\n\t\t\t\t\t\t\t\t},this));\n\t\t\t\t\t\t\t\tif (skip) {continue;}\n\t\t\t\t\t\t\t\tif ($el.is(\"img,br,hr\")) {\n\t\t\t\t\t\t\t\t\t//replace element\n\t\t\t\t\t\t\t\t\toutbb+=bbcode;\n\t\t\t\t\t\t\t\t\t$el=null;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tif (keepElement && !$el.attr(\"notkeep\")) {\n\t\t\t\t\t\t\t\t\t\tif ($el.is(\"table,tr,td\")) {\n\t\t\t\t\t\t\t\t\t\t\tbbcode = this.fixTableTransform(bbcode);\n\t\t\t\t\t\t\t\t\t\t\toutbb+=this.toBB($('<span>').html(bbcode));\n\t\t\t\t\t\t\t\t\t\t\t$el=null;\n\t\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t\t$el.empty().html('<span>'+bbcode+'</span>');\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\tif ($el.is(\"iframe\")) {\n\t\t\t\t\t\t\t\t\t\t\toutbb+=bbcode;\n\t\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\t\t$el.empty().html(bbcode);\n\t\t\t\t\t\t\t\t\t\t\toutbb+=this.toBB($el);\n\t\t\t\t\t\t\t\t\t\t\t$el=null;\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!$el || $el.is(\"iframe,img\")) {return true;}\n\t\t\t\t\toutbb+=this.toBB($el);\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t\n\t\t\toutbb.replace(/\\uFEFF/g,\"\");\n\t\t\treturn outbb;\n\t\t},\n\t\tgetHTML: function(bbdata,init,skiplt) {\n\t\t\tif (!this.options.bbmode && !init) {return this.$body.html()}\n\t\t\t\n\t\t\tif (!skiplt) {bbdata = bbdata.replace(/</g,\"&lt;\").replace(/\\{/g,\"&#123;\").replace(/\\}/g,\"&#125;\");}\n\t\t\tbbdata = bbdata.replace(/\\[code\\]([\\s\\S]*?)\\[\\/code\\]/g,function(s) {\n\t\t\t\ts = s.substr(\"[code]\".length,s.length-\"[code]\".length-\"[/code]\".length).replace(/\\[/g,\"&#91;\").replace(/\\]/g,\"&#93;\");\n\t\t\t\treturn \"[code]\"+s+\"[/code]\";\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\t$.each(this.options.btnlist,$.proxy(function(i,b){\n\t\t\t\tif (b!=\"|\" && b!=\"-\") {\n\t\t\t\t\tvar find=true;\n\t\t\t\t\tif (!this.options.allButtons[b] || !this.options.allButtons[b].transform) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\t$.each(this.options.allButtons[b].transform,$.proxy(function(html,bb) {\n\t\t\t\t\t\thtml = html.replace(/\\n/g,\"\"); //IE 7,8 FIX\n\t\t\t\t\t\tvar a=[];\n\t\t\t\t\t\tbb = bb.replace(/(\\(|\\)|\\[|\\]|\\.|\\*|\\?|\\:|\\\\|\\\\)/g,\"\\\\$1\");\n\t\t\t\t\t\t\t//.replace(/\\s/g,\"\\\\s\");\n\t\t\t\t\t\tbb = bb.replace(/\\{(.*?)(\\\\\\[.*?\\\\\\])*\\}/gi,$.proxy(function(str,s,vrgx) {\n\t\t\t\t\t\t\ta.push(s);\n\t\t\t\t\t\t\tif (vrgx) {\n\t\t\t\t\t\t\t\t//has validation regexp\n\t\t\t\t\t\t\t\tvrgx = vrgx.replace(/\\\\/g,\"\");\n\t\t\t\t\t\t\t\treturn \"(\"+vrgx+\"*?)\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn \"([\\\\s\\\\S]*?)\";\n\t\t\t\t\t\t},this));\n\t\t\t\t\t\tvar n=0,am;\n\t\t\t\t\t\twhile ((am = (new RegExp(bb,\"mgi\")).exec(bbdata)) != null) {\n\t\t\t\t\t\t\tif (am) {\n\t\t\t\t\t\t\t\tvar r={};\n\t\t\t\t\t\t\t\t$.each(a,$.proxy(function(i,k) {\n\t\t\t\t\t\t\t\t\tr[k]=am[i+1];\n\t\t\t\t\t\t\t\t},this));\n\t\t\t\t\t\t\t\tvar nhtml = html;\n\t\t\t\t\t\t\t\tnhtml = nhtml.replace(/\\{(.*?)(\\[.*?\\])\\}/g,\"{$1}\");\n\t\t\t\t\t\t\t\tnhtml = this.strf(nhtml,r);\n\t\t\t\t\t\t\t\tnhtml = nhtml.split(\"$\").join(\"$$\");\n\t\t\t\t\t\t\t\tbbdata = bbdata.replace(am[0],nhtml);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},this));\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t\n\t\t\t//transform system codes\n\t\t\t$.each(this.options.systr,function(html,bb) {\n\t\t\t\tbb = bb.replace(/(\\(|\\)|\\[|\\]|\\.|\\*|\\?|\\:|\\\\|\\\\)/g,\"\\\\$1\")\n\t\t\t\t\t.replace(\" \",\"\\\\s\");\n\t\t\t\tbbdata = bbdata.replace(new RegExp(bb,\"g\"),html);\n\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tvar $wrap = $(this.elFromString(\"<div>\"+bbdata+\"</div>\"));\n\t\t\t//transform smiles\n\t\t\t/* $wrap.contents().filter(function() {return this.nodeType==3}).each($.proxy(smilerpl,this)).end().find(\"*\").contents().filter(function() {return this.nodeType==3}).each($.proxy(smilerpl,this));\n\t\t\t\n\t\t\tfunction smilerpl(i,el) {\n\t\t\t\tvar ndata = el.data;\n\t\t\t\t$.each(this.options.smileList,$.proxy(function(i,row) {\n\t\t\t\t\tvar fidx = ndata.indexOf(row.bbcode);\n\t\t\t\t\tif (fidx!=-1) {\n\t\t\t\t\t\tvar afternode_txt = ndata.substring(fidx+row.bbcode.length,ndata.length);\n\t\t\t\t\t\tvar afternode = document.createTextNode(afternode_txt);\n\t\t\t\t\t\tel.data = ndata = el.data.substr(0,fidx);\n\t\t\t\t\t\t$(el).after(afternode).after(this.strf(row.img,this.options));\n\t\t\t\t\t}\n\t\t\t\t},this));\t\n\t\t\t} */\n\t\t\tthis.getHTMLSmiles($wrap);\n\t\t\t//$wrap.contents().filter(function() {return this.nodeType==3}).each($.proxy(this,smileRPL,this));\n\t\t\t\n\t\t\treturn $wrap.html();\n\t\t},\n\t\tgetHTMLSmiles: function(rel) {\n\t\t\t$(rel).contents().filter(function() {return this.nodeType==3}).each($.proxy(this.smileRPL,this));\n\t\t},\n\t\tsmileRPL: function(i,el) {\n\t\t\tvar ndata = el.data;\n\t\t\t$.each(this.options.smileList,$.proxy(function(i,row) {\n\t\t\t\tvar fidx = ndata.indexOf(row.bbcode);\n\t\t\t\tif (fidx!=-1) {\n\t\t\t\t\tvar afternode_txt = ndata.substring(fidx+row.bbcode.length,ndata.length);\n\t\t\t\t\tvar afternode = document.createTextNode(afternode_txt);\n\t\t\t\t\tel.data = ndata = el.data.substr(0,fidx);\n\t\t\t\t\t$(el).after(afternode).after(this.strf(row.img,this.options));\n\t\t\t\t\tthis.getHTMLSmiles(el.parentNode);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\tthis.getHTMLSmiles(el);\n\t\t\t},this));\t\n\t\t},\n\t\t//UTILS\n\t\tsetUID: function(el,attr) {\n\t\t\tvar id = \"wbbid_\"+(++this.lastid);\n\t\t\tif (el) {\n\t\t\t\t$(el).attr(attr || \"id\",id);\n\t\t\t}\n\t\t\treturn id;\n\t\t},\n\t\tkeysToLower: function(o) {\n\t\t\t$.each(o,function(k,v) {\n\t\t\t\tif (k!=k.toLowerCase()) {\n\t\t\t\t\tdelete o[k];\n\t\t\t\t\to[k.toLowerCase()]=v;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn o;\n\t\t},\n\t\tstrf: function(str,data) {\n\t\t\tdata = this.keysToLower($.extend({},data));\n\t\t\treturn str.replace(/\\{([\\w\\.]*)\\}/g, function (str, key) {key = key.toLowerCase();var keys = key.split(\".\"), value = data[keys.shift().toLowerCase()];$.each(keys, function () { value = value[this]; }); return (value === null || value === undefined) ? \"\" : value;});\n\t\t},\n\t\telFromString: function(str) {\n\t\t\tif (str.indexOf(\"<\")!=-1 && str.indexOf(\">\")!=-1) {\n\t\t\t\t//create tag\n\t\t\t\tvar wr = document.createElement(\"SPAN\");\n\t\t\t\t$(wr).html(str);\n\t\t\t\tthis.setUID(wr,\"wbb\");\n\t\t\t\treturn ($(wr).contents().length>1) ? wr:wr.firstChild;\n\t\t\t}else{\n\t\t\t\t//create text node\n\t\t\t\treturn document.createTextNode(str);\n\t\t\t}\n\t\t},\n\t\tisContain: function(node,sel) {\n\t\t\twhile (node && !$(node).hasClass(\"wysibb\")) {\n\t\t\t\tif ($(node).is(sel)) {return node};\n\t\t\t\tif (node) {node = node.parentNode;}\n\t\t\t\telse{return null;}\n\t\t\t}\n\t\t},\n\t\tisBBContain: function(bbcode) {\n\t\t\tvar pos=this.getCursorPosBB();\n\t\t\tvar b = this.prepareRGX(bbcode);\n\t\t\tvar bbrgx = new RegExp(b,\"g\");\n\t\t\tvar a;\n\t\t\tvar lastindex=0;\n\t\t\twhile ((a=bbrgx.exec(this.txtArea.value))!=null) {\n\t\t\t\tvar p = this.txtArea.value.indexOf(a[0],lastindex);\n\t\t\t\tif (pos>p && pos<(p+a[0].length)) {\n\t\t\t\t\treturn [a,p];\n\t\t\t\t}\n\t\t\t\tlastindex=p+1;\n\t\t\t}\n\t\t},\n\t\tprepareRGX: function(r) {\n\t\t\treturn r.replace(/(\\[|\\]|\\)|\\(|\\.|\\*|\\?|\\:|\\||\\\\)/g,\"\\\\$1\").replace(/\\{.*?\\}/g,\"([\\\\s\\\\S]*?)\");\n\t\t\t//return r.replace(/([^a-z0-9)/ig,\"\\\\$1\").replace(/\\{.*?\\}/g,\"([\\\\s\\\\S]*?)\");\n\t\t},\n\t\tcheckForLastBR: function(node) {\n\t\t\tif (!node) {$node = this.body;} \n\t\t\tif (node.nodeType==3) {node=node.parentNode;}\n\t\t\tvar $node = $(node);\n\t\t\tif ($node.is(\"span[id*='wbbid']\")) {$node = $node.parent();}\n\t\t\tif (this.options.bbmode===false && $node.is('div,blockquote,code') && $node.contents().length>0) {\n\t\t\t\tvar l = $node[0].lastChild;\n\t\t\t\tif (!l || (l && l.tagName!=\"BR\")) {$node.append(\"<br/>\");}\n\t\t\t}\n\t\t\tif (this.$body.contents().length>0 && this.body.lastChild.tagName!=\"BR\") {\n\t\t\t\tthis.$body.append('<br/>');\n\t\t\t}\n\t\t},\n\t\tgetAttributeList: function(el) {\n\t\t\tvar a=[];\n\t\t\t$.each(el.attributes,function(i,attr) {\n\t\t\t\tif (attr.specified) {\n\t\t\t\t\ta.push(attr.name);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn a;\n\t\t},\n\t\tclearFromSubInsert: function(html,cmd) {\n\t\t\tif (this.options.allButtons[cmd] && this.options.allButtons[cmd].rootSelector) {\n\t\t\t\tvar $wr = $('<div>').html(html);\n\t\t\t\t$.each(this.options.allButtons[cmd].rootSelector,$.proxy(function(i,s) {\n\t\t\t\t\tvar seltext=false;\n\t\t\t\t\tif (typeof(this.options.rules[s][0][1][\"seltext\"])!=\"undefined\") {\n\t\t\t\t\t\tseltext = this.options.rules[s][0][1][\"seltext\"][\"sel\"];\n\t\t\t\t\t}\n\t\t\t\t\tvar res=true;\n\t\t\t\t\t$wr.find(\"*\").each(function() { //work with find(\"*\") and \"is\", becouse in ie7-8 find is case sensitive\n\t\t\t\t\t\tif ($(this).is(s)) {\n\t\t\t\t\t\t\tif (seltext && seltext[\"sel\"]) {\n\t\t\t\t\t\t\t\t$(this).replaceWith($(this).find(seltext[\"sel\"].toLowerCase()).html());\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t$(this).replaceWith($(this).html());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tres=false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn res;\n\t\t\t\t},this));\n\t\t\t\treturn $wr.html();\n\t\t\t}\n\t\t\treturn html;\n\t\t},\n\t\tsplitPrevNext: function(node) {\n\t\t\tif (node.nodeType==3) {node = node.parentNode};\n\t\t\tvar f = this.filterByNode(node).replace(/\\:eq.*$/g,\"\");\n\t\t\tif ($(node.nextSibling).is(f)) {\n\t\t\t\t$(node).append($(node.nextSibling).html());\n\t\t\t\t$(node.nextSibling).remove();\n\t\t\t}\n\t\t\tif ($(node.previousSibling).is(f)) {\n\t\t\t\t$(node).prepend($(node.previousSibling).html());\n\t\t\t\t$(node.previousSibling).remove();\n\t\t\t}\n\t\t},\n\t\tmodeSwitch: function() {\n\t\t\tif (this.options.bbmode) {\n\t\t\t\t//to HTML\n\t\t\t\tthis.$body.html(this.getHTML(this.$txtArea.val()));\n\t\t\t\tthis.$txtArea.hide().removeAttr(\"wbbsync\").val(\"\");\n\t\t\t\tthis.$body.css(\"min-height\",this.$txtArea.height()).show().focus();\n\t\t\t}else{\n\t\t\t\t//to bbcode\n\t\t\t\tthis.$txtArea.val(this.getBBCode()).css(\"min-height\",this.$body.height());\n\t\t\t\tthis.$body.hide();\n\t\t\t\tthis.$txtArea.show().focus();\n\t\t\t}\n\t\t\tthis.options.bbmode=!this.options.bbmode;\n\t\t},\n\t\tclearEmpty: function () {\n\t\t\tthis.$body.children().filter(emptyFilter).remove();\n\t\t\tfunction emptyFilter() {\n\t\t\t\tif (!$(this).is(\"span,font,a,b,i,u,s\")) {\n\t\t\t\t\t//clear empty only for span,font\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (!$(this).hasClass(\"wbbtab\") && $.trim($(this).html()).length==0) {\n\t\t\t\t\treturn true;\n\t\t\t\t}else if ($(this).children().length>0) {\n\t\t\t\t\t$(this).children().filter(emptyFilter).remove();\n\t\t\t\t\tif ($(this).html().length==0 && this.tagName!=\"BODY\") {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdropdownclick: function(bsel,tsel,e) {\n\t\t\t//this.body.focus();\n\t\t\tvar $btn = $(e.currentTarget).closest(bsel);\n\t\t\tif ($btn.hasClass(\"dis\")) {return;}\n\t\t\tif ($btn.attr(\"wbbshow\")) {\n\t\t\t\t//hide dropdown\n\t\t\t\t$btn.removeAttr(\"wbbshow\");\n\t\t\t\t$(document).unbind(\"mousedown\",this.dropdownhandler);\n\t\t\t\tif (document) {\n\t\t\t\t\t$(document).unbind(\"mousedown\",this.dropdownhandler);\n\t\t\t\t}\n\t\t\t\tthis.lastRange=false;\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.saveRange();\n\t\t\t\tthis.$editor.find(\"*[wbbshow]\").each(function(i,el) {\n\t\t\t\t\t$(el).removeClass(\"on\").find($(el).attr(\"wbbshow\")).hide().end().removeAttr(\"wbbshow\");\n\t\t\t\t})\n\t\t\t\t$btn.attr(\"wbbshow\",tsel);\n\t\t\t\t$(document.body).bind(\"mousedown\",$.proxy(function(evt) {this.dropdownhandler($btn,bsel,tsel,evt)},this));\n\t\t\t\tif (this.$body) {\n\t\t\t\t\tthis.$body.bind(\"mousedown\",$.proxy(function(evt) {this.dropdownhandler($btn,bsel,tsel,evt)},this));\n\t\t\t\t}\n\t\t\t}\n\t\t\t$btn.find(tsel).toggle();\n\t\t\t$btn.toggleClass(\"on\");\n\t\t},\n\t\tdropdownhandler: function($btn,bsel,tsel,e) {\n\t\t\tif ($(e.target).parents(bsel).length==0) {\n\t\t\t\t$btn.removeClass(\"on\").find(tsel).hide();\n\t\t\t\t$(document).unbind('mousedown',this.dropdownhandler);\n\t\t\t\tif (this.$body) {\n\t\t\t\t\tthis.$body.unbind('mousedown',this.dropdownhandler);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trgbToHex: function(rgb) {\n\t\t\tif (rgb.substr(0, 1)=='#') {return rgb;}\n\t\t\t//if (rgb.indexOf(\"rgb\")==-1) {return rgb;}\n\t\t\tif (rgb.indexOf(\"rgb\")==-1) {\n\t\t\t\t//IE\n\t\t\t\tvar color=parseInt(rgb);\n\t\t\t\tcolor = ((color & 0x0000ff) << 16) | (color & 0x00ff00) | ((color & 0xff0000) >>> 16);\n\t\t\t\treturn '#'+color.toString(16);\n\t\t\t}\n\t\t\tvar digits = /(.*?)rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/.exec(rgb);\n\t\t\treturn \"#\"+this.dec2hex(parseInt(digits[2]))+this.dec2hex(parseInt(digits[3]))+this.dec2hex(parseInt(digits[4])); \n\t\t},\n\t\tdec2hex: function(d) {\n\t\t\tif(d>15) {\n\t\t\t\treturn d.toString(16);\n\t\t\t}else{\n\t\t\t\treturn \"0\"+d.toString(16);\n\t\t\t}\n\t\t},\n\t\tsync: function() {\n\t\t\tif (this.options.bbmode) {\n\t\t\t\tthis.$body.html(this.getHTML(this.txtArea.value,true));\n\t\t\t}else{\n\t\t\t\tthis.$txtArea.attr(\"wbbsync\",1).val(this.getBBCode());\n\t\t\t}\n\t\t},\n\t\tclearPaste: function(el) {\n\t\t\tvar $block = $(el);\n\t\t\t//NEW \n\t\t\t$.each(this.options.rules,$.proxy(function(s,ar) {\n\t\t\t\tvar $sf = $block.find(s).attr(\"wbbkeep\",1);\n\t\t\t\tif ($sf.length>0) {\n\t\t\t\t\tvar s2 = ar[0][1];\n\t\t\t\t\t$.each(s2,function(i,v) {\n\t\t\t\t\t\tif (v.sel) {\n\t\t\t\t\t\t\t$sf.find(v.sel).attr(\"wbbkeep\",1);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t$block.find(\"*[wbbkeep!='1']\").each($.proxy(function(i,el) {\n\t\t\t\tvar $this = $(el);\n\t\t\t\tif ($this.is('div,p') && ($this.children().length==0 || el.lastChild.tagName!=\"BR\")) {\n\t\t\t\t\t$this.after(\"<br/>\");\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t$block.find(\"*[wbbkeep]\").removeAttr(\"wbbkeep\").removeAttr(\"style\");\n\t\t\t$.log($block.html());\n\t\t\t//$.log(\"BBCODE: \"+this.toBB($block.clone(true)));\n\t\t\t$block.html(this.getHTML(this.toBB($block),true));\n\t\t\t$.log($block.html());\n\t\t\t\n\t\t\t//OLD\n\t\t\t/* $.each(this.options.rules,$.proxy(function(s,bb) {\n\t\t\t\t$block.find(s).attr(\"wbbkeep\",1);\n\t\t\t},this));\n\t\t\t\n\t\t\t//replace div and p without last br to html()+br\n\t\t\t$block.find(\"*[wbbkeep!='1']\").each($.proxy(function(i,el) {\n\t\t\t\tvar $this = $(el);\n\t\t\t\tif ($this.is('div,p') && ($this.children().length==0 || el.lastChild.tagName!=\"BR\")) {\n\t\t\t\t\t$this.after(\"<br/>\").after($this.contents()).remove();\n\t\t\t\t}else{\n\t\t\t\t\t$this.after($this.contents()).remove();\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t$block.find(\"*[wbbkeep]\").removeAttr(\"wbbkeep\").removeAttr(\"style\"); */\n\t\t},\n\t\tsortArray: function(ar,asc) {\n\t\t\tar.sort(function(a,b) {\n\t\t\t\treturn (a.length-b.length)*(asc || 1);\n\t\t\t});\n\t\t\treturn ar;\n\t\t},\n\t\tsmileFind: function() {\n\t\t\tif (this.options.smilefind) {\n\t\t\t\tvar $smlist = $(this.options.smilefind).find('img[alt]');\n\t\t\t\tif ($smlist.length>0) {\n\t\t\t\t\tthis.options.smileList=[];\n\t\t\t\t\t$smlist.each($.proxy(function(i,el) {\n\t\t\t\t\t\tvar $el=$(el);\n\t\t\t\t\t\tthis.options.smileList.push({title:$el.attr(\"title\"),bbcode:$el.attr(\"alt\"),img:$el.removeAttr(\"alt\").removeAttr(\"title\")[0].outerHTML});\n\t\t\t\t\t},this));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdestroy: function() {\n\t\t\tthis.$editor.replaceWith(this.$txtArea);\n\t\t\tthis.$txtArea.removeClass(\"wysibb-texarea\").show();\n\t\t\tthis.$modal.remove();\n\t\t\tthis.$txtArea.data(\"wbb\",null);\n\t\t},\n\t\tpressTab: function(e) {\n\t\t\tif (e && e.which == 9) {\n\t\t\t\t//insert tab\n\t\t\t\tif (e.preventDefault) {e.preventDefault();}\n\t\t\t\tif (this.options.bbmode) {\n\t\t\t\t\tthis.insertAtCursor('   ',false);\n\t\t\t\t}else{\n\t\t\t\t\tthis.insertAtCursor('<span class=\"wbbtab\">\\uFEFF</span>',false);\n\t\t\t\t\t//this.execNativeCommand(\"indent\",false); \n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremoveLastBodyBR: function() {\n\t\t\tif (this.body.lastChild && this.body.lastChild.nodeType!=3 && this.body.lastChild.tagName==\"BR\") {\n\t\t\t\tthis.body.removeChild(this.body.lastChild);\n\t\t\t\tthis.removeLastBodyBR();\n\t\t\t}\n\t\t},\n\t\ttraceTextareaEvent: function(e) {\n\t\t\tif ($(e.target).closest(\"div.wysibb\").length==0) {\n\t\t\t\tif ($(document.activeElement).is(\"div.wysibb-body\")) {\n\t\t\t\t\tthis.saveRange();\n\t\t\t\t}\n\t\t\t\tsetTimeout($.proxy(function() {\n\t\t\t\t\tvar data = this.$txtArea.val();\n\t\t\t\t\tif (this.options.bbmode===false && data!=\"\" && $(e.target).closest(\"div.wysibb\").length==0 && !this.$txtArea.attr(\"wbbsync\")) {\n\t\t\t\t\t\tthis.selectLastRange();\n\t\t\t\t\t\tthis.insertAtCursor(this.getHTML(data,true));\n\t\t\t\t\t\tthis.$txtArea.val(\"\");\n\t\t\t\t\t}\n\t\t\t\t\tif ($(document.activeElement).is(\"div.wysibb-body\")) {\n\t\t\t\t\t\tthis.lastRange=false;\n\t\t\t\t\t}\n\t\t\t\t},this),100);\n\t\t\t}\n\t\t},\n\t\ttxtAreaInitContent: function() {\n\t\t\t//$.log(this.txtArea.value);\n\t\t\tthis.$body.html(this.getHTML(this.txtArea.value,true));\n\t\t},\n\t\tgetValidationRGX: function(s) {\n\t\t\tif (s.match(/\\[\\S+\\]/)) {\n\t\t\t\treturn s.replace(/.*(\\\\*\\[\\S+\\]).*/,\"$1\");\n\t\t\t}\n\t\t\treturn \"\";\n\t\t},\n\t\tsmileConversion: function() {\n\t\t\tif (this.options.smileList && this.options.smileList.length>0) {\n\t\t\t\tvar snode = this.getSelectNode();\n\t\t\t\tif (snode.nodeType==3) {\n\t\t\t\t\tvar ndata = snode.data;\n\t\t\t\t\tif (ndata.length>=2 && !this.isInClearTextBlock(snode) && $(snode).parents(\"a\").length==0) {\n\t\t\t\t\t\t$.each(this.options.srules,$.proxy(function(i,sar) {\n\t\t\t\t\t\t\tvar smbb = sar[0];\n\t\t\t\t\t\t\tvar fidx = ndata.indexOf(smbb);\n\t\t\t\t\t\t\tif (fidx!=-1) {\n\t\t\t\t\t\t\t\tvar afternode_txt = ndata.substring(fidx+smbb.length,ndata.length);\n\t\t\t\t\t\t\t\tvar afternode = document.createTextNode(afternode_txt);\n\t\t\t\t\t\t\t\tvar afternode_cursor = document.createElement(\"SPAN\");\n\t\t\t\t\t\t\t\tsnode.data = snode.data.substr(0,fidx);\n\t\t\t\t\t\t\t\t$(snode).after(afternode).after(afternode_cursor).after(this.strf(sar[1],this.options));\n\t\t\t\t\t\t\t\tthis.selectNode(afternode_cursor);\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},this));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tisInClearTextBlock: function() {\n\t\t\tif (this.cleartext) {\n\t\t\t\tvar find=false;\n\t\t\t\t$.each(this.cleartext,$.proxy(function(sel,command) {\n\t\t\t\t\tif (this.queryState(command)) {\n\t\t\t\t\t\tfind=command;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},this))\n\t\t\t\treturn find;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\twrapAttrs: function(html) {\n\t\t\t$.each(this.options.attrWrap,function(i,a) {\n\t\t\t\thtml = html.replace(a+'=\"','_'+a+'=\"');\n\t\t\t});\n\t\t\treturn html;\n\t\t},\n\t\tunwrapAttrs: function(html) {\n\t\t\t$.each(this.options.attrWrap,function(i,a) {\n\t\t\t\thtml = html.replace('_'+a+'=\"',a+'=\"');\n\t\t\t});\n\t\t\treturn html;\n\t\t},\n\t\tdisNonActiveButtons: function() {\n\t\t\tif (this.isInClearTextBlock()) {\n\t\t\t\tthis.$toolbar.find(\".wysibb-toolbar-btn:not(.on,.mswitch)\").addClass(\"dis\");\n\t\t\t}else{\n\t\t\t\tthis.$toolbar.find(\".wysibb-toolbar-btn.dis\").removeClass(\"dis\");\n\t\t\t}\n\t\t},\n\t\tsetCursorByEl: function(el) {\n\t\t\tvar sl = document.createTextNode(\"\\uFEFF\");\n\t\t\t$(el).after(sl);\n\t\t\tthis.selectNode(sl);\n\t\t},\n\t\t\n\t\t//img listeners\n\t\timgListeners: function() {\n\t\t\t$(document).on(\"mousedown\",$.proxy(this.imgEventHandler,this));\n\t\t},\n\t\timgEventHandler: function(e) {\n\t\t\tvar $e = $(e.target);\n\t\t\tif (this.hasWrapedImage && ($e.closest(\".wbb-img,#wbbmodal\").length==0 || $e.hasClass(\"wbb-cancel-button\"))) {\n\t\t\t\tthis.$body.find(\".imgWrap \").each(function() {\n\t\t\t\t\t$.log(\"Removed imgWrap block\");\n\t\t\t\t\t$(this).replaceWith($(this).find(\"img\"));\n\t\t\t\t})\n\t\t\t\tthis.hasWrapedImage = false;\n\t\t\t\tthis.updateUI();\n\t\t\t}\n\t\t\t\n\t\t\tif ($e.is(\"img\") && $e.closest(\".wysibb-body\").length>0) {\n\t\t\t\t$e.wrap(\"<span class='imgWrap'></span>\");\n\t\t\t\tthis.hasWrapedImage = $e;\n\t\t\t\tthis.$body.focus();\n\t\t\t\tthis.selectNode($e.parent()[0]);\n\t\t\t}\n\t\t},\n\t\t\n\t\t//MODAL WINDOW\n\t\tshowModal: function(cmd,opt,queryState) {\n\t\t\t$.log(\"showModal: \"+cmd);\n\t\t\tthis.saveRange();\n\t\t\tvar $cont = this.$modal.find(\".wbbm-content\").html(\"\");\n\t\t\tvar $wbbm = this.$modal.find(\".wbbm\").removeClass(\"hastabs\");\n\t\t\tthis.$modal.find(\"span.wbbm-title-text\").html(opt.title);\n\t\t\tif (opt.tabs && opt.tabs.length>1) {\n\t\t\t\t//has tabs, create\n\t\t\t\t$wbbm.addClass(\"hastabs\");\n\t\t\t\tvar $ul = $('<div class=\"wbbm-tablist\">').appendTo($cont).append(\"<ul>\").children(\"ul\");\n\t\t\t\t$.each(opt.tabs,$.proxy(function(i,row) {\n\t\t\t\t\tif (i==0) {row['on']=\"on\"}\n\t\t\t\t\t$ul.append(this.strf('<li class=\"{on}\" onClick=\"$(this).parent().find(\\'.on\\').removeClass(\\'on\\');$(this).addClass(\\'on\\');$(this).parents(\\'.wbbm-content\\').find(\\'.tab-cont\\').hide();$(this).parents(\\'.wbbm-content\\').find(\\'.tab'+i+'\\').show()\">{title}</li>',row));\n\t\t\t\t\t\n\t\t\t\t},this))\n\t\t\t}\n\t\t\tif (opt.width) {\n\t\t\t\t$wbbm.css(\"width\",opt.width);\n\t\t\t}\n\t\t\tvar $cnt = $('<div class=\"wbbm-cont\">').appendTo($cont);\n\t\t\tif (queryState) {\n\t\t\t\t$wbbm.find('#wbbm-remove').show();\n\t\t\t}else{\n\t\t\t\t$wbbm.find('#wbbm-remove').hide();\n\t\t\t}\n\t\t\t$.each(opt.tabs,$.proxy(function(i,r) {\n\t\t\t\tvar $c = $('<div>').addClass(\"tab-cont tab\"+i).attr(\"tid\",i).appendTo($cnt);\n\t\t\t\tif (i>0) {$c.hide();} \n\t\t\t\tif (r.html) {\n\t\t\t\t\t$c.html(this.strf(r.html,this.options));\n\t\t\t\t}else{\n\t\t\t\t\t$.each(r.input,$.proxy(function(j,inp) {\n\t\t\t\t\t\tinp[\"value\"]=queryState[inp.param.toLowerCase()];\n\t\t\t\t\t\tif (inp.param.toLowerCase()==\"seltext\" && (!inp[\"value\"] || inp[\"value\"]==\"\")) {\n\t\t\t\t\t\t\tinp[\"value\"] = this.getSelectText(this.options.bbmode);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inp[\"value\"] && inp[\"value\"].indexOf(\"<span id='wbbid\")==0 && $(inp[\"value\"]).is(\"span[id*='wbbid']\")) {\n\t\t\t\t\t\t\tinp[\"value\"] = $(inp[\"value\"]).html();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (inp.type && inp.type==\"div\") {\n\t\t\t\t\t\t\t//div input, support wysiwyg input\n\t\t\t\t\t\t\t$c.append(this.strf('<div class=\"wbbm-inp-row\"><label>{title}</label><div class=\"inp-text div-modal-text\" contenteditable=\"true\" name=\"{param}\">{value}</div></div>',inp));\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t//default input\n\t\t\t\t\t\t\t$c.append(this.strf('<div class=\"wbbm-inp-row\"><label>{title}</label><input class=\"inp-text modal-text\" type=\"text\" name=\"{param}\" value=\"{value}\"/></div>',inp));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t},this));\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t\n\t\t\t//this.lastRange=this.getRange();\n\t\t\t\n\t\t\tif ($.isFunction(opt.onLoad)) {\n\t\t\t\topt.onLoad.call(this,cmd,opt,queryState);\n\t\t\t}\n\t\t\t\n\t\t\t$wbbm.find('#wbbm-submit').click($.proxy(function() {\n\t\t\t\t\n\t\t\t\tif ($.isFunction(opt.onSubmit)) { //custom submit function, if return false, then don't process our function\n\t\t\t\t\tvar r = opt.onSubmit.call(this,cmd,opt,queryState);\n\t\t\t\t\tif (r===false) {return;}\n\t\t\t\t}\n\t\t\t\tvar params={};\n\t\t\t\tvar valid=true;\n\t\t\t\tthis.$modal.find(\".wbbm-inperr\").remove();\n\t\t\t\tthis.$modal.find(\".wbbm-brdred\").removeClass(\"wbbm-brdred\");\n\t\t\t\t//$.each(this.$modal.find(\".tab-cont:visible input\"),$.proxy(function(i,el) {\n\t\t\t\t$.each(this.$modal.find(\".tab-cont:visible .inp-text\"),$.proxy(function(i,el) {\n\t\t\t\t\tvar tid = $(el).parents(\".tab-cont\").attr(\"tid\");\n\t\t\t\t\tvar pname = $(el).attr(\"name\").toLowerCase();\n\t\t\t\t\tvar pval=\"\";\n\t\t\t\t\tif ($(el).is(\"input,textrea,select\")) {\n\t\t\t\t\t\tpval = $(el).val();\n\t\t\t\t\t}else{\n\t\t\t\t\t\tpval = $(el).html();\n\t\t\t\t\t}\n\t\t\t\t\tvar validation = opt.tabs[tid][\"input\"][i][\"validation\"];\n\t\t\t\t\tif (typeof(validation)!=\"undefined\") {\n\t\t\t\t\t\tif (!pval.match(new RegExp(validation,\"i\"))) {\n\t\t\t\t\t\t\tvalid=false;\n\t\t\t\t\t\t\t$(el).after('<span class=\"wbbm-inperr\">'+CURLANG.validation_err+'</span>').addClass(\"wbbm-brdred\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tparams[pname]=pval;\n\t\t\t\t},this));\n\t\t\t\tif (valid) {\n\t\t\t\t\t$.log(\"Last range: \"+this.lastRange);\n\t\t\t\t\tthis.selectLastRange();\n\t\t\t\t\t//insert callback\n\t\t\t\t\tif (queryState) {\n\t\t\t\t\t\tthis.wbbRemoveCallback(cmd,true);\n\t\t\t\t\t}\n\t\t\t\t\tthis.wbbInsertCallback(cmd,params);\n\t\t\t\t\t//END insert callback\n\t\t\t\t\t\n\t\t\t\t\tthis.closeModal();\n\t\t\t\t\tthis.updateUI();\n\t\t\t\t}\n\t\t\t},this));\n\t\t\t$wbbm.find('#wbbm-remove').click($.proxy(function() {\n\t\t\t\t//clbk.remove();\n\t\t\t\tthis.selectLastRange();\n\t\t\t\tthis.wbbRemoveCallback(cmd); //remove callback\n\t\t\t\tthis.closeModal();\n\t\t\t\tthis.updateUI();\n\t\t\t},this));\n\t\t\t\n\t\t\t$(document.body).css(\"overflow\",\"hidden\"); //lock the screen, remove scroll on body\n\t\t\tif ($(\"body\").height() > $(window).height()) { //if body has scroll, add padding-right 18px\n\t\t\t\t$(document.body).css(\"padding-right\",\"18px\");\n\t\t\t}\n\t\t\tthis.$modal.show();\n\t\t\t//if (window.getSelection) \n\t\t\tif (this.isMobile) {\n\t\t\t\t$wbbm.css(\"margin-top\",\"10px\");\n\t\t\t}else{\n\t\t\t\t$wbbm.css(\"margin-top\",($(window).height()-$wbbm.outerHeight())/3+\"px\");\n\t\t\t}\n\t\t\t//setTimeout($.proxy(function() {this.$modal.find(\"input:visible\")[0].focus()},this),10);\n\t\t\tsetTimeout($.proxy(function() {this.$modal.find(\".inp-text:visible\")[0].focus()},this),10);\n\t\t},\n\t\tescModal: function(e) {\n\t\t\tif (e.which==27) {this.closeModal();}\n\t\t},\n\t\tcloseModal: function() {\n\t\t\t$(document.body).css(\"overflow\",\"auto\").css(\"padding-right\",\"0\").unbind(\"keyup\",this.escModal); //ESC key close modal;\n\t\t\tthis.$modal.find('#wbbm-submit,#wbbm-remove').unbind('click');\n\t\t\tthis.$modal.hide();\n\t\t\tthis.lastRange=false;\n\t\t\treturn this;\n\t\t},\n\t\tgetParams: function(src,s,offset) {\n\t\t\tvar params={};\n\t\t\tif (this.options.bbmode) {\n\t\t\t\t//bbmode\n\t\t\t\tvar stext = s.match(/\\{[\\s\\S]+?\\}/g);\n\t\t\t\ts = this.prepareRGX(s);\n\t\t\t\tvar rgx = new RegExp(s,\"g\");\n\t\t\t\tvar val = this.txtArea.value;\n\t\t\t\tif (offset>0) {\n\t\t\t\t\tval = val.substr(offset,val.length-offset);\n\t\t\t\t}\n\t\t\t\tvar a = rgx.exec(val);\n\t\t\t\tif (a) {\n\t\t\t\t\t$.each(stext,function(i,n) {\n\t\t\t\t\t\tparams[n.replace(/\\{|\\}/g,\"\").replace(/\"/g,\"'\").toLowerCase()] = a[i+1];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tvar rules = this.options.rules[s][0][1];\n\t\t\t\t$.each(rules,$.proxy(function(k,v) {\n\t\t\t\t\tvar value=\"\";\n\t\t\t\t\tvar $v = (v.sel!==false) ? value=$(src).find(v.sel):$(src);\n\t\t\t\t\tif (v.attr!==false) {\n\t\t\t\t\t\tvalue=$v.attr(v.attr);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tvalue=$v.html();\n\t\t\t\t\t}\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tif (v.rgx!==false) {\n\t\t\t\t\t\t\tvar m = value.match(new RegExp(v.rgx));\n\t\t\t\t\t\t\tif (m && m.length==2) {\n\t\t\t\t\t\t\t\tvalue = m[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparams[k]=value.replace(/\"/g,\"'\");\n\t\t\t\t\t}\n\t\t\t\t},this))\n\t\t\t}\n\t\t\treturn params;\n\t\t},\n\t\t\n\t\t \n\t\t//imgUploader\n\t\timgLoadModal: function() {\n\t\t\t$.log(\"imgLoadModal\");\n\t\t\tif (this.options.imgupload===true) {\n\t\t\t\tthis.$modal.find(\"#imguploader\").dragfileupload({\n\t\t\t\t\turl: this.strf(this.options.img_uploadurl,this.options),\n\t\t\t\t\textraParams: {\n\t\t\t\t\t\tmaxwidth: this.options.img_maxwidth,\n\t\t\t\t\t\tmaxheight: this.options.img_maxheight\n\t\t\t\t\t},\n\t\t\t\t\tthemePrefix: this.options.themePrefix,\n\t\t\t\t\tthemeName: this.options.themeName,\n\t\t\t\t\tsuccess: $.proxy(function(data) {\n\t\t\t\t\t\tthis.$txtArea.insertImage(data.image_link,data.thumb_link);\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.closeModal();\n\t\t\t\t\t\tthis.updateUI();\n\t\t\t\t\t},this)\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tthis.$modal.find(\"#fileupl\").bind(\"change\",function() {\n\t\t\t\t\t$(\"#fupform\").submit();\n\t\t\t\t});\n\t\t\t\tthis.$modal.find(\"#fupform\").bind(\"submit\",$.proxy(function(e) {\n\t\t\t\t\t$(e.target).parents(\"#imguploader\").hide().after('<div class=\"loader\"><img src=\"'+this.options.themePrefix+'/'+this.options.themeName+'/img/loader.gif\" /><br/><span>'+CURLANG.loading+'</span></div>').parent().css(\"text-align\",\"center\");\n\t\t\t\t},this))\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\tthis.$modal.find(\".hastabs\").removeClass(\"hastabs\");\n\t\t\t\tthis.$modal.find(\"#imguploader\").parents(\".tab-cont\").remove();\n\t\t\t\tthis.$modal.find(\".wbbm-tablist\").remove();\n\t\t\t}\n\t\t},\n\t\timgSubmitModal: function() {\n\t\t\t$.log(\"imgSubmitModal\");\n\t\t},\n\t\t//DEBUG\n\t\tprintObjectInIE: function(obj) {\n\t\t\ttry{\n\t\t\t$.log(JSON.stringify(obj));\n\t\t\t}catch(e) {}\n\t\t},\n\t\tcheckFilter: function(node,filter) {\n\t\t\t$.log(\"node: \"+$(node).get(0).outerHTML+\" filter: \"+filter+\" res: \"+$(node).is(filter.toLowerCase()));\n\t\t},\n\t\tdebug: function(msg) {\n\t\t\tif (this.options.debug===true) {\n\t\t\t\tvar time = (new Date()).getTime();\n\t\t\t\tif (typeof(console)!=\"undefined\") {\n\t\t\t\t\tconsole.log((time-this.startTime)+\" ms: \"+msg);\n\t\t\t\t}else{\n\t\t\t\t\t$(\"#exlog\").append('<p>'+(time-this.startTime)+\" ms: \"+msg+'</p>');  \n\t\t\t\t}\n\t\t\t\tthis.startTime=time;\n\t\t\t}\n\t\t},\n\t\t\n\t\t//Browser fixes\n\t\tisChrome: function() {\n\t\t\treturn (window.chrome) ? true:false;\n\t\t},\n\t\tfixTableTransform: function(html) {\n\t\t\tif (!html) {return \"\";}\n\t\t\tif ($.inArray(\"table\",this.options.buttons)==-1) {\n\t\t\t\treturn html.replace(/\\<(\\/*?(table|tr|td|tbody))[^>]*\\>/ig,\"\");\n\t\t\t}else{\n\t\t\t\treturn html.replace(/\\<(\\/*?(table|tr|td))[^>]*\\>/ig,\"[$1]\".toLowerCase()).replace(/\\<\\/*tbody[^>]*\\>/ig,\"\");\n\t\t\t}\n\t\t}\n\t}\n\t\n\t$.log = function(msg) {\n\t\tif (typeof(wbbdebug)!=\"undefined\" && wbbdebug===true) {\n\t\t\tif (typeof(console)!=\"undefined\") {\n\t\t\t\tconsole.log(msg);\n\t\t\t}else{\n\t\t\t\t$(\"#exlog\").append('<p>'+msg+'</p>');  \n\t\t\t}\n\t\t}\n\t}\n\t$.fn.wysibb = function(settings) {\n\t\treturn this.each(function() {\n\t\t\tvar data = $(this).data(\"wbb\");\n\t\t\tif (!data) {\n\t\t\t\tnew $.wysibb(this, settings);\n\t\t\t}\n\t\t});\n\t}\n\t$.fn.wdrag = function(opt) {\n\t\tif (!opt.scope) {opt.scope=this;}\n\t\tvar start={x:0,y:0, height: 0};\n\t\tvar drag;\n\t\topt.scope.drag_mousedown = function(e) {\n\t\t\te.preventDefault();\n\t\t\tstart = {\n\t\t\t\tx: e.pageX,\n\t\t\t\ty: e.pageY,\n\t\t\t\theight: opt.height,\n\t\t\t\tsheight: opt.scope.$body.height()\n\t\t\t}\n\t\t\tdrag=true;\n\t\t\t$(document).bind(\"mousemove\",$.proxy(opt.scope.drag_mousemove,this));\n\t\t\t$(this).addClass(\"drag\");\n\t\t};\n\t\topt.scope.drag_mouseup = function(e) {\n\t\t\tif (drag===true) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$(document).unbind(\"mousemove\",opt.scope.drag_mousemove);\n\t\t\t\t$(this).removeClass(\"drag\");\n\t\t\t\tdrag=false;\n\t\t\t}\n\t\t};\n\t\topt.scope.drag_mousemove = function(e) {\n\t\t\te.preventDefault();\n\t\t\tvar axisX=0,axisY=0;\n\t\t\tif (opt.axisX) {\n\t\t\t\taxisX = e.pageX-start.x;\n\t\t\t}\n\t\t\tif (opt.axisY) {\n\t\t\t\taxisY = e.pageY-start.y;\n\t\t\t}\n\t\t\tif (axisY!=0) {\n\t\t\t\tvar nheight = start.sheight+axisY;\n\t\t\t\tif (nheight>start.height && nheight<=opt.scope.options.resize_maxheight) {\n\t\t\t\t\tif (opt.scope.options.bbmode==true) {\n\t\t\t\t\t\topt.scope.$txtArea.css((opt.scope.options.autoresize===true) ? \"min-height\":\"height\",nheight+\"px\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\topt.scope.$body.css((opt.scope.options.autoresize===true) ? \"min-height\":\"height\",nheight+\"px\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t\n\t\t$(this).bind(\"mousedown\",opt.scope.drag_mousedown);\n\t\t$(document).bind(\"mouseup\",$.proxy(opt.scope.drag_mouseup,this));\n\t},\n\t\n\t//API\n\t$.fn.getDoc = function() {\n\t\treturn this.data('wbb').doc;\n\t}\n\t$.fn.getSelectText = function(fromTextArea) {\n\t\treturn this.data('wbb').getSelectText(fromTextArea);\n\t}\n\t$.fn.bbcode = function(data) {\n\t\tif (typeof(data)!=\"undefined\") {\n\t\t\tif (this.data('wbb').options.bbmode) {\n\t\t\t\tthis.data('wbb').$txtArea.val(data);\n\t\t\t}else{\n\t\t\t\tthis.data('wbb').$body.html(this.data(\"wbb\").getHTML(data));\n\t\t\t}\n\t\t\treturn this;\n\t\t}else{\n\t\t\treturn this.data('wbb').getBBCode();\n\t\t}\n\t}\n\t$.fn.htmlcode = function(data) {\n\t\tif (!this.data('wbb').options.onlyBBMode && this.data('wbb').inited===true) {\n\t\t\tif (typeof(data)!=\"undefined\") {\n\t\t\t\tthis.data('wbb').$body.html(data);\n\t\t\t\treturn this;\n\t\t\t}else{\n\t\t\t\treturn this.data('wbb').getHTML(this.data('wbb').$txtArea.val());\n\t\t\t}\n\t\t}\n\t}\n\t$.fn.getBBCode = function() {\n\t\treturn this.data('wbb').getBBCode();\n\t}\n\t$.fn.getHTML = function() {\n\t\tvar wbb = this.data('wbb');\n\t\treturn wbb.getHTML(wbb.$txtArea.val());\n\t}\n\t$.fn.getHTMLByCommand = function(command,params) {\n\t\treturn this.data(\"wbb\").getHTMLByCommand(command,params);\n\t}\n\t$.fn.getBBCodeByCommand = function(command,params) {\n\t\treturn this.data(\"wbb\").getBBCodeByCommand(command,params);\n\t}\n\t$.fn.insertAtCursor = function(data,forceBBMode) {\n\t\tthis.data(\"wbb\").insertAtCursor(data,forceBBMode);\n\t\treturn this.data(\"wbb\");\n\t}\n\t$.fn.execCommand = function(command,value) {\n\t\tthis.data(\"wbb\").execCommand(command,value);\n\t\treturn this.data(\"wbb\");\n\t}\n\t$.fn.insertImage = function(imgurl,thumburl) {\n\t\tvar editor = this.data(\"wbb\");\n\t\tvar code = (thumburl) ? editor.getCodeByCommand('link',{url:imgurl,seltext: editor.getCodeByCommand('img',{src:thumburl})}): editor.getCodeByCommand('img',{src:imgurl});\n\t\tthis.insertAtCursor(code);\n\t\treturn editor;\n\t}\n\t$.fn.sync = function() {\n\t\tthis.data(\"wbb\").sync();\n\t\treturn this.data(\"wbb\");\n\t}\n\t$.fn.destroy = function() {\n\t\tthis.data(\"wbb\").destroy();\n\t}\n\t\n\t\n\t$.fn.queryState = function(command) {\n\t\treturn this.data(\"wbb\").queryState(command);\n\t}\n})(jQuery);\n\n\n//Drag&Drop file uploader\n(function($) {\n\t'use strict';\n\t\n\t$.fn.dragfileupload = function(options) {\t\t\n\t\treturn this.each(function() { \n\t\t\tvar upl = new FileUpload(this, options);\n\t\t\tupl.init();\n\t\t});\n\t}; \n\t\n\tfunction FileUpload(e, options) {\n\t\tthis.$block=$(e);\n\t\t\n\t\tthis.opt = $.extend({\n\t\t\turl: false,\n\t\t\tsuccess: false,\n\t\t\textraParams: false,\n\t\t\tfileParam: 'img',\n\t\t\tvalidation: '\\.(jpg|png|gif|jpeg)$',\n\t\t\t\n\t\t\tt1: CURLANG.fileupload_text1,\n\t\t\tt2: CURLANG.fileupload_text2\n\t\t},options);\n\t}\n\t\n\tFileUpload.prototype = {\n\t\tinit: function() {\n\t\t\tif (window.FormData != null) {\n\t\t\t\tthis.$block.addClass(\"drag\");\n\t\t\t\tthis.$block.prepend('<div class=\"p2\">'+this.opt.t2+'</div>');\n\t\t\t\tthis.$block.prepend('<div class=\"p\">'+this.opt.t1+'</div>');\n\t\t\t\t\n\t\t\t\tthis.$block.bind('dragover', function() {$(this).addClass('dragover');return false;});\n\t\t\t\tthis.$block.bind('dragleave', function() {$(this).removeClass('dragover');return false;});\n\t\t\t\t\n\t\t\t\t//upload progress\n\t\t\t\tvar uploadProgress = $.proxy(function(e) { \n\t\t\t\t\tvar p = parseInt(e.loaded/e.total*100, 10);\n\t\t\t\t\tthis.$loader.children(\"span\").text(CURLANG.loading+': '+ p+'%');\n\t\t\t\t\t\n\t\t\t\t}, this);\n\t\t\t\tvar xhr = jQuery.ajaxSettings.xhr(); \n\t\t\t\tif (xhr.upload) {\n\t\t\t\t\txhr.upload.addEventListener('progress', uploadProgress, false);\n\t\t\t\t}\n\t\t\t\tthis.$block[0].ondrop = $.proxy(function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.$block.removeClass('dragover');\n\t\t\t\t\tvar ufile = e.dataTransfer.files[0];\n\t\t\t\t\tif (this.opt.validation && !ufile.name.match(new RegExp(this.opt.validation))) {\n\t\t\t\t\t\tthis.error(CURLANG.validation_err);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tvar fData = new FormData();\n\t\t\t\t\tfData.append(this.opt.fileParam, ufile);\n\t\t\t\t\t\n\t\t\t\t\tif (this.opt.extraParams) { //check for extraParams to upload\n\t\t\t\t\t\t$.each(this.opt.extraParams,function(k,v) {\n\t\t\t\t\t\t\tfData.append(k, v);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.$loader = $('<div class=\"loader\"><img src=\"'+this.opt.themePrefix+'/'+this.opt.themeName+'/img/loader.gif\" /><br/><span>'+CURLANG.loading+'</span></div>');\n\t\t\t\t\tthis.$block.html(this.$loader);\n\t\t\t\t\t\n\t\t\t\t\t$.ajax({\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\turl: this.opt.url,\n\t\t\t\t\t\tdata: fData,\n\t\t\t\t\t\tprocessData: false,\n\t\t\t\t\t\tcontentType: false,\n\t\t\t\t\t\txhr: function() {return xhr},\n\t\t\t\t\t\tdataType: 'json',\n\t\t\t\t\t\tsuccess: $.proxy(function(data) {\n\t\t\t\t\t\t\tif (data && data.status==1) {\n\t\t\t\t\t\t\t\tthis.opt.success(data); \n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tthis.error(data.msg || CURLANG.error_onupload);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},this),\n\t\t\t\t\t\terror: $.proxy(function (xhr, txt, thr) {this.error(CURLANG.error_onupload)},this)\n\t\t\t\t\t});\n\t\t\t\t},this);\n\t\t\t\t\n\t\t\t}\n\t\t},\n\t\terror: function(msg) {\n\t\t\tthis.$block.find(\".upl-error\").remove().end().append('<span class=\"upl-error\">'+msg+'</span>').addClass(\"wbbm-brdred\");\n\t\t}\n\t}\n})(jQuery);\n"]}