YMDEditor=Class.create();YMDEditor.prototype={opentags:null,crlf2br:true,noparse:false,urlstart:-1,postfmt_re:/([\r\n])|(?:\[([a-z]{1,16})(?:=([^\x00-\x1F"'<>\[\]]{1,256}))?\])|(?:\[\/([a-z]{1,16})\])/ig,form:null,initialize:function(a){this.form=$(a);this.textArea=$("text_area");this.previewArea=$("previewArea");this.butBold=$("but_bold");this.butItalic=$("but_italic");this.butUnderline=$("but_underline");this.butLink=$("but_link");this.butImg=$("but_img");this.butQuote=$("but_quote");this.butCode=$("but_code");this.butBold.observe("click",this.bbFontStyle.bindAsEventListener(this,"[b]","[/b]"));this.butItalic.observe("click",this.bbFontStyle.bindAsEventListener(this,"[i]","[/i]"));this.butUnderline.observe("click",this.bbFontStyle.bindAsEventListener(this,"[u]","[/u]"));this.butQuote.observe("click",this.bbFontStyle.bindAsEventListener(this,"[quote]","[/quote]"));this.butCode.observe("click",this.bbFontStyle.bindAsEventListener(this,"[code]","[/code]"));this.butLink.observe("click",this.bbLink.bindAsEventListener(this,"[url]","[/url]"));this.butImg.observe("click",this.bbImg.bindAsEventListener(this,"[img=","][/img]"));this.textArea.observe("keyup",this.outputBBCode.bindAsEventListener(this));this.textArea.observe("input",this.outputBBCode.bindAsEventListener(this));this.textArea.observe("focus",this.outputBBCode.bindAsEventListener(this))},getSel:function(b){var a="";var c="";if(b.selectionStart){a=b.value.substring(b.selectionStart,b.selectionEnd)}else{if(window.getSelection){a=window.getSelection();c="window.getSelection()"}else{if(document.getSelection){a=document.getSelection();c="document.getSelection()"}else{if(document.selection){a=document.selection.createRange().text;c="document.selection.createRange()"}else{return}}}}return a},mozWrap:function(g,d,j){var c=g.textLength;var a=g.selectionStart;var e=g.selectionEnd;var b=g.scrollTop;if(e==1||e==2){e=c}var i=(g.value).substring(0,a);var h=(g.value).substring(a,e);var f=(g.value).substring(e,c);g.value=i+d+h+j+f;g.selectionStart=e+d.length+j.length;g.selectionEnd=g.selectionStart;g.focus();g.scrollTop=b;return},getCaretPos:function(b){var c=0;if(Prototype.Browser.IE){b.focus();var a=document.selection.createRange();a.moveStart("character",-b.value.length);c=a.text.length}else{c=b.selectionEnd}return c},insert_text:function(g,d,c){var b;if(!c){b=this.textArea}else{b=this.textArea}if(d){g=" "+g+" "}if(!isNaN(b.selectionStart)){var f=b.selectionStart;var e=b.selectionEnd;this.mozWrap(b,g,"");b.selectionStart=f+g.length;b.selectionEnd=e+g.length}else{if(b.createTextRange&&b.caretPos){if(document.selection.createRange().duplicate().boundingHeight!=b.caretPos.boundingHeight){this.textArea.focus();this.storeCaret(b)}var a=b.caretPos;a.text=a.text.charAt(a.text.length-1)==" "?a.text+g+" ":a.text+g}else{b.value=b.value+g}}if(!c){this.textArea.focus()}},bbFontStyle:function(h,b,f){var g=this.getSel(this.textArea);if(Prototype.Browser.IE||Prototype.Browser.Opera){g=document.selection.createRange().text;if(g){document.selection.createRange().text=b+g+f;this.textArea.focus();g="";this.outputBBCode();return}}else{if(this.form.elements.text_area.selectionEnd&&this.form.elements.text_area.selectionEnd-this.form.elements.text_area.selectionStart>0){this.mozWrap(this.textArea,b,f);g="";this.outputBBCode();return}}var a=this.getCaretPos(this.textArea);var c=a+b.length;this.insert_text(b+f);if(!isNaN(this.textArea.selectionStart)){this.textArea.selectionStart=c;this.textArea.selectionEnd=c}else{if(document.selection){var d=this.textArea.createTextRange();d.move("character",c);d.select()}}this.textArea.focus();return},bbLink:function(f,a,b){var h=this.getSel(this.textArea);if(Prototype.Browser.IE||Prototype.Browser.Opera){h=document.selection.createRange().text;if(h){document.selection.createRange().text=a+h+b;this.textArea.focus();h="";this.outputBBCode();return}}else{if(this.form.elements.text_area.selectionEnd&&this.form.elements.text_area.selectionEnd-this.form.elements.text_area.selectionStart>0){this.mozWrap(this.textArea,a,b);h="";this.outputBBCode();return}}var j=this.getCaretPos(this.textArea);var c=j+a.length;var g="";var i="";if(g=prompt("Enter a URL:","")){if(i=prompt("Enter a Title:","")){this.insert_text(a.replace("]","=")+g+"]"+i+b)}else{this.insert_text(a.replace("]","=")+g+"]"+g+b)}}if(!isNaN(this.textArea.selectionStart)){this.textArea.selectionStart=c;this.textArea.selectionEnd=c}else{if(document.selection){var d=textarea.createTextRange();d.move("character",c);d.select()}}this.textArea.focus();this.outputBBCode();return},bbImg:function(i,c,g){var h=this.getSel(this.textArea);if(Prototype.Browser.IE||Prototype.Browser.Opera){h=document.selection.createRange().text;if(h){document.selection.createRange().text=c+h+g;this.textArea.focus();h="";this.outputBBCode();return}}else{if(this.form.elements.text_area.selectionEnd&&this.form.elements.text_area.selectionEnd-this.form.elements.text_area.selectionStart>0){this.mozWrap(this.textArea,c,g);h="";this.outputBBCode();return}}var b=this.getCaretPos(this.textArea);var d=b+c.length;var a="";if(a=prompt("Enter an image URL:","")){this.insert_text("[img="+a+"][/img]")}if(!isNaN(this.textArea.selectionStart)){this.textArea.selectionStart=d;this.textArea.selectionEnd=d}else{if(document.selection){var f=textarea.createTextRange();f.move("character",d);f.select()}}this.textArea.focus();this.outputBBCode();return},parseBBCode:function(e){e=e.replace(/(<([^>]+)>)/ig,"");textToHtmlCB=function(g,o,n,m,l,h,i){if(o&&o.length){if(!crlf2br){return g}switch(o){case"\r":return"";case"\n":return"<br>"}}validTag=function(q){if(!q||!q.length){return false}var p=/^\/?(?:b|i|u|pre|samp|code|list|colou?r|size|noparse|url|s|q|quote|img)$/;return p.test(q)};taginfo_t=function(q,p){this.bbtag=q;this.etag=p};var j=/^(:?black|silver|gray|white|maroon|red|purple|fuchsia|green|lime|orange|olive|yellow|navy|blue|teal|aqua|#(?:[0-9a-f]{3})?[0-9a-f]{3})$/i;var f=/^[-;\/\?:@&=\+\$,_\.!~\*'\(\)%0-9a-z]{1,512}$/i;var k=/^[\\.0-9]{1,8}$/i;if(validTag(n)){if(this.noparse){return"["+n+"]"}if(d.length&&d[d.length-1].bbtag=="url"&&urlstart>=0){return"["+n+"]"}switch(n){case"code":d.push(new taginfo_t(n,"</code></pre>"));crlf2br=false;return"<pre><code>";case"pre":d.push(new taginfo_t(n,"</pre>"));crlf2br=false;return"<pre>";case"list":d.push(new taginfo_t(n,"</ul>"));crlf2br=false;return"<ul>";case"color":case"colour":if(!m||!j.test(m)){m="inherit"}d.push(new taginfo_t(n,"</span>"));return'<span style="color: '+m+'">';case"size":if(!m||!k.test(m)){m="1"}d.push(new taginfo_t(n,"</span>"));return'<span style="font-size: '+Math.min(Math.max(m,0.7),20)+'px; line-height: normal">';case"s":d.push(new taginfo_t(n,"</span>"));return'<span style="text-decoration: line-through">';case"noparse":this.noparse=true;return"";case"url":d.push(new taginfo_t(n,"</a>"));if(m&&f.test(m)){urlstart=-1;return'<a href="'+m+'">'}urlstart=g.length+h;return'<a href="';case"img":d.push(new taginfo_t(n,'"/ >'));if(m&&f.test(m)){urlstart=-1;return'<img src="'+m+'"/ >'}urlstart=g.length+h;return'<img src="';case"quote":d.push(new taginfo_t(n,"</blockquote>"));if(m){urlstart=-1;return"<blockquote><strong>Quoted from <em>"+m+"</em></strong><br>"}urlstart=g.length+h;return"<blockquote><strong>Quote</strong><br>";default:d.push(new taginfo_t(n,"</"+n+">"));return"<"+n+">"}}if(validTag(l)){if(this.noparse){if(l=="noparse"){this.noparse=false;return""}return"[/"+l+"]"}if(!d.length||d[d.length-1].bbtag!=l){return'<span style="color: red">[/'+l+"]</span>"}if(l=="url"){if(urlstart>0){return'">'+i.substr(urlstart,h-urlstart)+d.pop().etag}return d.pop().etag}else{if(l=="code"||l=="pre"||l=="ul"){crlf2br=true}}return d.pop().etag}return g};var c,b,a,d;crlf2br=true;if(d==null||d.length){d=new Array(0)}c=e.replace(this.postfmt_re,textToHtmlCB);if(this.noparse){this.noparse=false}if(d.length){b=new String();if(d[d.length-1].bbtag=="url"){d.pop();b+='">'+e.substr(urlstart,e.length-urlstart)+"</a>"}while(d.length){b+=d.pop().etag}}return b?c+b:c},outputBBCode:function(){var a=this.previewArea;var b=this.parseBBCode(this.textArea.value);a.innerHTML=b}};
