(function(f){var n;var e;var p=new Object();var o;var x=new Array("");var A=0;var a=null;var s=null;var t="\n";var g=false;f.fn.bbcodeeditor=function(B){e=f.extend({},f.fn.bbcodeeditor.defaults,B);n=this;if(!f.browser.opera){n.keydown(c)}else{n.keypress(c)}if(f.browser.msie){f(document).mousedown(function(C){if(s!=null&&s==n[0]){a=document.selection.createRange()}s=C.target})}if(f.browser.msie||f.browser.opera){t="\r\n"}if(e.bold!=false){e.bold.click(function(){r("bold text","[b]","[/b]")})}if(e.italic!=false){e.italic.click(function(){r("italic text","[i]","[/i]")})}if(e.underline!=false){e.underline.click(function(){r("underline text","[u]","[/u]")})}if(e.link!=false){e.link.click(q)}if(e.quote!=false){e.quote.click(function(){r("quote","[quote]","[/quote]",true)})}if(e.code!=false){e.code.click(function(){r("function(event) {","[code]","[/code]",true)})}if(e.image!=false){e.image.click(h)}if(e.nlist!=false){e.nlist.click(function(){r("list item","[list=1]"+t+"[*]","[/list]",true)})}if(e.blist!=false){e.blist.click(function(){r("list item","[list]"+t+"[*]","[/list]",true)})}if(e.litem!=false){e.litem.click(function(){r("list item","[*]","",true)})}if(e.usize!=false){e.usize.click(function(){j(true)})}if(e.dsize!=false){e.dsize.click(function(){j(false)})}if(e.back!=false){if(e.back_disable!=false){p.back=e.back[0].className}e.back.click(v);u(false)}if(e.forward!=false){if(e.forward_disable!=false){p.forward=e.forward[0].className}e.forward.click(l);m(false)}if(e.back!=false||e.forward!=false){n.keyup(w)}f.fn.bbcodeeditor.preview();window.onbeforeunload=k;return this};function u(B){if(!B){if(e.back_disable==false){e.back.css("opacity",0.5)}else{if(e.back!=false){e.back[0].className=e.back_disable}}}else{if(e.back_disable==false){e.back.css("opacity",1)}else{if(e.back!=false){e.back[0].className=p.back}}}}function m(B){if(!B){if(e.forward_disable==false){e.forward.css("opacity",0.5)}else{if(e.forward!=false){e.forward[0].className=e.forward_disable}}}else{if(e.forward_disable==false){e.forward.css("opacity",1)}else{if(e.forward!=false){e.forward[0].className=p.forward}}}}function k(B){if(e.exit_warning&&!g&&n[0].value!=""){var B=B||window.event;if(B){B.returnValue="You have started writing a post."}return"You have started writing a post."}}function w(B){if(f.browser.msie){a=document.selection.createRange()}if(B.keyCode!=17&&!(B.ctrlKey&&(B.keyCode==89||B.keyCode==90))){if(n.val().length!=0){u(true)}else{u(false)}if(A!=0){x.slice(0,x.length-A);m(false);A=0}if(B.keyCode==8||B.keyCode==13||B.keyCode==32||B.keyCode==46||(B.ctrlKey&&(B.keyCode==67||B.keyCode==86))){d()}f.fn.bbcodeeditor.preview()}}function c(L){if(f.browser.msie){a=document.selection.createRange()}if(e.keyboard&&L.ctrlKey){if(L.keyCode==66&&e.bold!=false){L.preventDefault();r("bold text","[b]","[/b]")}else{if(L.keyCode==73&&e.italic!=false){L.preventDefault();r("italic text","[i]","[/i]")}else{if(L.keyCode==75&&e.code!=false){L.preventDefault();r("function(event) {","[code]","[/code]",true)}else{if(L.keyCode==76&&e.link!=false){L.preventDefault();q()}else{if(L.keyCode==80&&e.image!=false){L.preventDefault();h()}else{if(L.keyCode==81&&e.quote!=false){L.preventDefault();r("quote","[quote]","[/quote]",true)}else{if(L.keyCode==85&&e.underline!=false){L.preventDefault();r("underline text","[u]","[/u]")}else{if(L.keyCode==89&&e.forward!=false){L.preventDefault();l()}else{if(L.keyCode==90&&e.back!=false){L.preventDefault();v()}}}}}}}}}}if(L.keyCode==13){var B=y().start;var Q=n[0].value.substring(0,B).lastIndexOf("\n");Q=(Q==-1?0:Q+1);var H=n[0].value.substring(Q,B).match(/^\t+/g);if(H!=null){L.preventDefault();var D=i();var M=t;for(var F=0;F<H[0].length;F++){M+="\t"}n[0].value=n[0].value.substring(0,B)+M+n[0].value.substring(B);z(B+M.length,B+M.length);b(D)}}else{if(L.keyCode==9){L.preventDefault();var D=i();d();var I=y();if(I.start!=I.end&&n[0].value.substr(I.start,1)=="\n"){I.start++}var H=n[0].value.substring(I.start,I.end).match(/\n/g);if(H!=null){var K=n[0].value.substring(0,I.start).lastIndexOf(t);var P=(K!=-1?K:0);if(!L.shiftKey){var C=n[0].value.substring(P,I.end).replace(/\n/g,"\n\t");n[0].value=(K==-1?"\t":"")+n[0].value.substring(0,P)+C+n[0].value.substring(I.end);z(I.start+1,I.end+H.length+1)}else{var F=(n[0].value.substr((K!=-1?K+t.length:0),1)=="\t"?1:0);var J=n[0].value.substring(P,I.end).match(/\n\t/g,"\n");if(K==-1&&n[0].value.substr(0,1)=="\t"){n[0].value=n[0].value.substr(1);J.push(0)}var C=n[0].value.substring(P,I.end).replace(/\n\t/g,"\n");n[0].value=n[0].value.substring(0,P)+C+n[0].value.substring(I.end);z(I.start-F,I.end-(J!=null?J.length:0))}}else{if(!L.shiftKey){n[0].value=n[0].value.substring(0,I.start)+"\t"+n[0].value.substring(I.start);z(I.start+1,I.start+1)}else{var O=n[0].value.substring(0,I.start).lastIndexOf("\n");var N=(O==-1?0:O);var E=n[0].value.substring(N+1).indexOf("\n");if(E==-1){E=n[0].value.length}else{E+=N+1}if(O==-1){var G=n[0].value.substring(N,E).match(/^\t/);var C=n[0].value.substring(N,E).replace(/^\t/,"")}else{var G=n[0].value.substring(N,E).match(/\n\t/);var C=n[0].value.substring(N,E).replace(/\n\t/,"\n")}n[0].value=n[0].value.substring(0,N)+C+n[0].value.substring(E);if(G!=null){z(I.start-(I.start-1>O?1:0),I.end-((I.start-1>O||I.start!=I.end)?1:0))}}}b(D)}}}function i(){return{scrollTop:n.scrollTop(),scrollHeight:n[0].scrollHeight}}function b(B){n.scrollTop(B.scrollTop+n[0].scrollHeight-B.scrollHeight)}function d(){A=0;m(false);u(true);if(x[x.length-1]!=n[0].value){x.push(n[0].value)}}function v(){var B=n.scrollTop();if(A==0){d();A++}if(A!=x.length){A++;n[0].value=x[x.length-A];f.fn.bbcodeeditor.preview();m(true);if(A==x.length){u(false)}}n.scrollTop(B)}function l(){var B=n.scrollTop();if(A>1){n[0].value=x[x.length- --A];f.fn.bbcodeeditor.preview();u(true);if(A==1){m(false)}}n.scrollTop(B)}function r(F,G,J,C){d();var H=y();var B=i();if(C){if(J!="[/list]"&&G!="[*]"){G=G+t}if(G!="[*]"){J=t+J}if(H.start!=0&&n[0].value.substr(H.start-1,1)!=t.substr(0,1)){G=t+G}if(n[0].value.length!=H.end&&n[0].value.substr(H.end,1)!=t.substr(0,1)){J=J+t}}if(H.start!=H.end){F=n[0].value;if(C){var I=new RegExp("\\["+J.substring((t.length==2?4:3),J.length-1)+"(.*?)\\]"+t+(J==t+"[/list]"?"\\[\\*\\]":"")+"$");var K=new RegExp("^"+t+"\\[/"+J.substring((t.length==2?4:3),J.length-1)+"\\]")}else{var I=new RegExp("\\["+J.substring(2,J.length-1)+"([^\\]]*?)\\]$","g");var K=new RegExp("^\\[/"+J.substring(2,J.length-1)+"\\]","g")}var D=F.substring(0,H.start).match(I);var E=F.substring(H.end).match(K);if(D!=null&&E!=null){n[0].value=F.substring(0,H.start).replace(I,"")+F.substring(H.start,H.end)+F.substring(H.end).replace(K,"");z(H.start-D[0].length,H.end-D[0].length)}else{n[0].value=n[0].value.substr(0,H.start)+G+n[0].value.substring(H.start,H.end)+J+n[0].value.substr(H.end);z(H.start+G.length,H.end+G.length)}}else{n[0].value=n[0].value.substring(0,H.start)+G+F+J+n[0].value.substring(H.end);z(H.start+G.length,H.start+G.length+F.length)}b(B);f.fn.bbcodeeditor.preview()}function z(F,C){if(!f.browser.msie){n[0].setSelectionRange(F,C);n.focus()}else{var B=n[0].value.substring(0,F).match(/\r/g);B=(B!=null?B.length:0);var E=n[0].value.substring(F,C).match(/\r/g);E=(E!=null?E.length:0);var D=n[0].createTextRange();D.collapse(true);D.moveStart("character",F-B);D.moveEnd("character",C-F-E);D.select();a=document.selection.createRange()}}function j(B){if(B){r("text","[size=150]","[/size]")}else{r("text","[size=80]","[/size]")}}function h(){var B="http://";r(B,"[img]","[/img]")}function q(C){var B="http://";r("link text","[url="+B+"]","[/url]")}function y(){if(!f.browser.msie){return{start:n[0].selectionStart,end:n[0].selectionEnd}}else{if(a==null){return{start:n[0].value.length,end:n[0].value.length}}var M=a.duplicate();var F=document.body.createTextRange();F.moveToElementText(n[0]);F.setEndPoint("EndToStart",M);var D=document.body.createTextRange();D.moveToElementText(n[0]);D.setEndPoint("StartToEnd",M);var H=false,C=false,L=false;var J,G,K,B,I,E;J=G=F.text;K=B=M.text;I=E=D.text;do{if(!H){if(F.compareEndPoints("StartToEnd",F)==0){H=true}else{F.moveEnd("character",-1);if(F.text==J){G+="\r\n"}else{H=true}}}if(!C){if(M.compareEndPoints("StartToEnd",M)==0){C=true}else{M.moveEnd("character",-1);if(M.text==K){B+="\r\n"}else{C=true}}}if(!L){if(D.compareEndPoints("StartToEnd",D)==0){L=true}else{D.moveEnd("character",-1);if(D.text==I){E+="\r\n"}else{L=true}}}}while((!H||!C||!L));return{start:G.length,end:G.length+B.length}}}f.fn.bbcodeeditor.defaults={bold:false,italic:false,underline:false,link:false,quote:false,code:false,image:false,usize:false,nsize:false,nlist:false,blist:false,litem:false,back:false,back_disable:false,forward:false,forward_disable:false,exit_warning:false,preview:false,keyboard:true};f.fn.bbcodeeditor.preview=function(){if(e.preview!=false){var B=n.val();B=B.replace(/</g,"&lt;");B=B.replace(/>/g,"&gt;");B=B.replace(/[\r\n]/g,"%lb%");var E=[/\[b\](.*?)\[\/b\]/gi,/\[i\](.*?)\[\/i\]/gi,/\[u\](.*?)\[\/u\]/gi,/\[size=(8\d|9\d|1\d\d|200)](.*?)\[\/size\]/gi,/\[url(?:\=?)(.*?)\](.*?)\[\/url\]/gi,/\[img(.*?)\](.*?)\[\/img\]/gi,/(?:%lb%|\s)*\[code(?:\=?)(?:.*?)\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/code\](?:%lb%|\s)*/gi,/(?:%lb%|\s)*\[quote(?:\=?)(.*?)\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/quote\](?:%lb%|\s)*/gi,/\[list(.*?)\](.*?)\[\*\](.*?)(?:%lb%|\s)*(\[\*\].*?\[\/list\]|\[\/list\])/i,/(?:%lb%|\s)*\[list\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/list\](?:%lb%|\s)*/gi,/(?:%lb%|\s)*\[list=(\d)\](?:%lb%|\s)*(.*?)(?:%lb%|\s)*\[\/list\](?:%lb%|\s)*/gi,/(?:%lb%){3,}/g];var D=["<b>$1</b>","<i>$1</i>","<u>$1</u>",'<span style="font-size:$1%;">$2</span>','<a href="$1">$2</a>','<img $1 src="$2" />',"<pre><code>$1</code></pre>","<blockquote>$2</blockquote>","[list$1]$2<li>$3</li>$4","<ul>$1</ul>","<ol start=$1>$2</ol>","%lb%%lb%"];for(var C in E){B=B.replace(E[C],D[C]);if(C==8){while(B.match(E[C],D[C])){B=B.replace(E[C],D[C])}}}B=B.replace(/%lb%/g,"<br />");e.preview.html(B)}};f.fn.bbcodeeditor.pause=function(){if(!g){g=true}else{g=false}}})(jQuery);