var SMarkUp=function(){var a=navigator.userAgent.toLowerCase(),h={opera:a.indexOf("opera")>-1,ie:a.indexOf("msie")>-1,ie6:a.indexOf("msie 6")>-1,ie7:a.indexOf("msie 7")>-1,safari:a.indexOf("webkit")};var n="",d=document.getElementsByTagName("script");for(var f=0;f<d.length;f++){if(d[f].src){var k=d[f].src.split("/"),b=k.pop();if(/smarkup\.?(.*?)\.js$/i.test(b)){n=k.join("/");break}}}d=null;var g=function(i){return new RegExp("(^|\\s)"+i+"(\\s|$)")};String.prototype.pasteTo=function(t,p){t.focus();var o=0;if(document.selection&&!h.opera){var r=document.selection.createRange(),i=r.duplicate();i.moveToElementText(t);i.setEndPoint("EndToEnd",r);o=i.text.strlen()-r.text.strlen();r.text=this;if(p){i.moveStart("character",o);i.moveEnd("character",this.strlen());i.select()}}else{if(t.selectionStart!=undefined){o=t.selectionStart;var v=t.value,u=t.scrollTop,q=t.selectionEnd,s=o+this.strlen();t.value=v.substr(0,o)+this+v.substr(q,v.length);t.scrollTop=u;if(p){t.setSelectionRange(o,s)}else{t.setSelectionRange(s,s)}}else{t.value+=this;t.setSelectionRange(t.value.length,t.value.length)}}return o};String.prototype.parse=function(q){var p=this;for(var o in q){p=p.replace(new RegExp("{"+o+"}","g"),q[o])}return p};String.prototype.strlen=function(){var i=this.length;if(h.opera){i+=this.length-this.replace(/\n*/g,"").length}else{if(h.ie){i-=this.length-this.replace(/\r*/g,"").length}}return i};if(!String.prototype.trim){String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}}var j=function(q){var i=function(u){var r=e(document.getElementById(q)).find("div.smarkup-overlap,div.smarkup-dialog").css({display:u?"block":"none"})[1];if(u==false){var t=e(r).find("div.smarkup-dialog-form")[0];var s=t.parentNode;s.removeChild(t);s.innerHTML='<div class="smarkup-dialog-form"></div>'}return r};var p=function(s,u,t){var r=document.createElement("input");r.type="button";r.name=s;r.value=u;r.className=s+"-button";r.onclick=t;return r};var o=function(r){var s={};e(r).parent("div").find("input,select").each(function(){if(this.type!="button"){s[this.name.replace(/^smu_/,"")]=this.value}});return s};this.show=function(u){var x=i(true),z=u.events||{},s=e(x).find("div.smarkup-dialog-form")[0],v=u.content||{};if(!s.parentNode.onkeydown){e(s.parentNode).bind({keydown:function(C,B){var A=C.which||C.keyCode;if(A==13){if((B.type||null)=="text"){e(this).find("input.insert-button")[0].onclick(C);return false}}}})}if(v.content){v.content.call(this,s);if(v.events){for(var y in v.events){var t=this;s[y]=function(A){v.events[y].call(t,A||window.event,o(this));return false}}}}else{if(typeof v=="string"){s.innerHTML=v}else{s.appendChild(v)}}var r=document.createElement("p");s.appendChild(r);var t=this;if(z.onsave||v.onBeforeInsert){r.appendChild(p("insert","Ok",function(A){var B=o(this);if(v.onBeforeInsert){v.onBeforeInsert.call(t,B)}else{z.onsave.callback.call(this,A,B)}t.hideDialog()}))}r.appendChild(p("cancel","Cancel",function(A){if(z.oncancel){z.oncancel.call(this,A)}A.stopPropagation();t.select()}));e(x).css({marginTop:"-"+(x.offsetHeight/2)+"px"});try{e(x).find("input.smarkup-dialog-text")[0].focus()}catch(w){}r=s=null;return x};this.hide=function(){return i(false)}};var c=function(){var r=0,o;var i=function(w,v){o.innerHTML+="<dl><dt></dt><dd></dd></dl>";o.getElementsByTagName("dt")[r].appendChild(w);o.getElementsByTagName("dd")[r++].appendChild(v)};var q=function(w){var v=document.createElement("label");v.innerHTML=w+":&nbsp;";return v};var s=function(v,x){var w=(h.ie&&!h.opera)?document.createElement("<"+v+' name="smu_'+x+'"/>'):document.createElement(v);w.name="smu_"+x;return w};var p=function(w){var v=s("input",w.name);v.type=w.type;v.value=w.value||"";v.className=w.className||"";i(q(w.label),v);v=null};var u=function(v){v.className="smarkup-dialog-text";p(v)};var t=function(C){var x=function(J,H,F){var E,G,I;for(var D in H){G=D}I=H[D];E=document.createElement("option");E.setAttribute("value",G);E.innerHTML=I;E.selected=F==G;J.appendChild(E)};var y=s("select",C.name),z=C.list,B,A;for(var w in z){if(z[w].constructor==String){A={};A[w]=z[w]}else{A=z[w]}if(!A.group&&!A.options){x(y,A,C.value||null)}else{B=document.createElement("optgroup");B.label=A.group;for(var v in A.options){x(B,A.options[v],C.value||null)}y.appendChild(B);B=null}}i(q(C.label),y);y=null};return{build:function(x,w){r=0;o=document.createElement("div");if(w){o.innerHTML="<h3>"+w+"</h3>"}for(var v=0;v<x.length;v++){if(x[v].type=="text"){u(x[v])}else{if(x[v].type=="list"){t(x[v])}}}return o}}}();var l=function(i){this.length=0;this.push([i]);return this};l.prototype=function(){var o=function(v,B,r){var C=[];var A=r.split(",");var t=function(F,q,D,p){var E=0;if(D&&g(D).test(F.className)){if(!q||q==F.tagName.toLowerCase()){E=p.push(F)}}else{if(!D&&q==F.tagName.toLowerCase()){E=p.push(F)}}return !!E};var x=function(p){var D=p.split(".");return{tag:D[0],cls:D[1]}};for(var z=0;z<A.length;z++){r=x(A[z]);for(var y=0;y<v.length;y++){if(B=="parent"){var s=null;for(s=v[z].parentNode;s&&s!=document.body;s=s.parentNode){if(t(s,r.tag,r.cls,C)){break}}break}else{if(B=="children"){var u=v[y].childNodes;for(var w=0;w<u.length;w++){t(u[w],r.tag,r.cls,C)}}else{if(B=="find"){var u=v[y].getElementsByTagName(r.tag||"*");for(var w=0;w<u.length;w++){t(u[w],r.tag,r.cls,C)}}}}}}return C};var i=function(p){return function(r){r=r||window.event;var q=r.target||r.srcElement;if(q.nodeType==3){q=q.parentNode}return p.call(this,r,q)}};return{push:function(p){this.length=0;Array.prototype.push.apply(this,p)},each:function(q){for(var p=0;p<this.length;p++){q.call(this[p])}return this},css:function(r){for(var q in r){for(var p=0;p<this.length;p++){this[p].style[q]=r[q]}}return this},parent:function(p){this.push(o(this,"parent",p));return this},children:function(p){this.push(o(this,"children",p));return this},find:function(p){this.push(o(this,"find",p));return this},bind:function(p){this.each(function(){for(var q in p){this["on"+q]=i(p[q])}});return this},attach:function(p){this.each(function(){for(var q in p){if(this.addEventListener){this.addEventListener(q,i(p[q]),false)}else{el.attachEvent("on"+q,function(r){return function(){return i(p[q]).call(r)}}(this))}}})}}}();var e=function(i){return new l(i)};e.ajax=function(){var o=function(){return window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")};var i=function(p){var s=o();s.open(p.method,p.url+"?&nocache="+(new Date().getTime()),p.async);if(p.async){s.onreadystatechange=function(){if(s.readyState==4&&s.status==200){p.complete(s.responseText)}}}s.setRequestHeader("content-type","application/x-www-form-urlencoded");if(p.data){var r=[];for(var q in p.data){r.push(encodeURIComponent(q)+"="+encodeURIComponent(p.data[q]))}p.data=r.join("&")}else{p.data=null}s.send(p.data);if(!p.async){p.complete(s.responseText)}};return{get:function(p){p.method="get",i(p)},post:function(p){p.method="post",i(p)}}}();function m(P,Q,o){o=parseInt(o)||300;var B="id-smarkup-"+P,q=new j(B),L={},M={},ab=this,w=shiftKey=ctrlKey=false,F=null,D=null,A=null,N=false,p=0;if(Q.preview){var G=Q.preview;if(G.template){F=G.template.replace(/^~/,n)}else{if(G.parser){D=G.parser.replace(/^~/,n)}}A=G.parserVar||null;N=G.autoRefresh||false}var y=function(){return document.getElementById(B)};var v=function(){return document.getElementById(P)};var S=function(af,i){var ad=v();ad.focus();if(isNaN(af)&&isNaN(i)){if(h.ie){var ac=document.selection.createRange(),ae=ac.duplicate();ae.moveToElementText(ad);ae.setEndPoint("EndToEnd",ac);p=af=ae.text.strlen()-ac.text.strlen();i=ac.text.strlen()}else{p=af=ad.selectionStart;i=ad.selectionEnd-ad.selectionStart}}if(h.ie&&ad.createTextRange){if(!isNaN(af)&&!isNaN(i)){var ac=s.createTextRange();ac.collapse(true);ac.moveStart("character",af);ac.moveEnd("character",i);ac.select()}}else{if(ad.setSelectionRange){scroll=ad.scrollTop;ad.setSelectionRange(af,af+i);ad.scrollTop=scroll}}};var z=function(){var i=v(),ac=null;if(document.selection){ac=document.selection.createRange().text.replace(/\r/g,"")}else{ac=i.value.substr(i.selectionStart,i.selectionEnd-i.selectionStart)}return ac};var Z=function(af,ag){var an=[],aj=[],ai=af.open||"",am=af.close||"",ac=af.wrapSelection||"",ae=v(),ad=z().trim(),al=false;if(!ad){ad=af.placeholder||"";al=ad.length||-1}if((shiftKey&&ctrlKey)||af.wrapMultiline){ad=ad.match(/^(.*?)$/gm)}else{ad=[ad]}if(w&&af.alt){ai=af.alt.open||"";am=af.alt.close||""}an.push(af.prepend||"");an.push(ai+"{selection}"+am);an.push(af.append||"");an=an.join("");if(ac&&!ac.replace(/{selection}|\n/g,"")){an=an.replace("{selection}",ac);ac=null}if(ac){for(var ah=0,ao=null;ah<ad.length;ah++){if(ao=ac.replace("{selection}",ad[ah].trim())){aj.push(ao)}}an=an.replace("{selection}",aj.join(""))}else{for(var ah=0,ao=null;ah<ad.length;ah++){if(ao=an.replace("{selection}",ad[ah].trim())){aj.push(ao)}}an=aj.join("")}if(ag){an=an.parse(ag).parse({attributes:function(){var ap=[];for(var aq in ag){ap.push(aq+'="'+ag[aq]+'"')}return" "+ap.join(" ")}})}p=an.replace(/\n{2,}/g,"\n").pasteTo(ae);if(al>-1){var ak=ai+(af.prepend||"");S(p+(h.opera?ak.strlen():ak.length),al)}if(N){G()}};var u=function(i){p=i.pasteTo(v());if(N){G()}};var X=function(ad){if(!ad){return false}var i=ad.rel?L[ad.rel]:ad,ac=i.dialog||null;if(!ac){q.show.call(ab,{content:c.build(i.attributes,i.title||""),events:{onsave:{callback:function(ae,af){Z(i,af)}},oncancel:function(){q.hide()}}})}else{q.show.call(ab,{content:ac,events:{oncancel:function(){q.hide()}}})}return false};var r="";var G=function(){var ae=e(y()).find("div.smarkup-preview")[0],ac=null;e(ae).css({display:"block"});ac=ae.getElementsByTagName("iframe")[0]||null;if(!ac){ac=document.createElement(h.ie?'<iframe frameborder="0"></iframe>':"iframe");ac.src="";ac.className="smarkup-preview-iframe";ae.appendChild(ac)}if(!ae.onclick){ae.onclick=function(){e(this).css({display:"none"});ac=this.getElementsByTagName("iframe")[0]||null;if(ac){ac.parentNode.removeChild(ac);ac=null}}}if(F||D){var i=function(af){ac=ac.contentWindow||ac;ac.document.open();ac.document.write(af.parse({content:v().value}));ac.document.close();ac=null};if(F&&!r){e.ajax.get({url:F,complete:i,async:false})}else{if(D){var ad={};ad[A||"data"]=v().value;e.ajax.post({url:D,complete:i,data:ad,async:true})}}}};var W='<div class="smarkup '+Q.name+'" id="'+B+'"><div class="smarkup-toolbar"><ul class="smarkup-toolbar"></ul><br clear="all" /></div><div class="smarkup-search"><input type="text" name="smu_qsearch" class="qsearch" autocomplete="off" /><a href="#" title="Move to next match"></a><small></small></div><div class="smarkup-textarea-wrapper"><div class="smarkup-textarea"></div></div><div class="smarkup-preview"><div class="smarkup-preview-header">Document Preview [ x ]</div></div><div class="smarkup-overlap"></div><div class="smarkup-dialog"><div class="smarkup-dialog-header"><div class="smarkup-dialog-tl"></div><div class="smarkup-dialog-tr"></div></div><div class="smarkup-dialog-body"><div class="smarkup-dialog-form"></div></div><div class="smarkup-dialog-footer"><div class="smarkup-dialog-bl"></div><div class="smarkup-dialog-br"></div></div></div>';"</div>";var s=v(),R=document.createElement("div");R.innerHTML=W;s.parentNode.insertBefore(R.getElementsByTagName("div")[0],s);s.oldClass=s.className||"";s.oldCSS=s.style.cssText||"";s.className=="";s.style.cssText="";e(s).css({height:o+"px"});var aa=function(ah){var ad=ah.which||ah.keyCode;ab.shiftKey=shiftKey=ah.shiftKey;ab.altKey=w=ah.altKey;ab.ctrlKey=ctrlKey=ah.ctrlKey||ah.metaKey;if(h.opera&&/^(keydown|keypress)$/.test(ah.type)){ab.altKey=w=ad==18;ab.ctrlKey=ad==17}var af=function(){e(y()).find("div.smarkup-search").css({display:"block"}).find("input.qsearch")[0].focus();return false};if(ah.type=="keydown"){if(ad==9){var ag=z().match(/^(.*?)$/mg);if(ag.length>1){for(var ac=0;ac<ag.length;ac++){if(!shiftKey){ag[ac]=ag[ac].trim()?"   "+ag[ac]:""}else{ag[ac]=ag[ac].replace(/^   /,"")}}p=ag.join("\n").pasteTo(this,true)}else{p="   ".pasteTo(this)}return false}else{if(ad==13){var ai=null;if(ctrlKey){ai=Q.onCtrlEnter||null}else{if(shiftKey){ai=Q.onShiftEnter||null}}if(ai){u((ai.open||"")+(ai.close||""));return false}}else{if(ad==27){e(y()).find("div.smarkup-search").css({display:"none"})}else{if(ad==112){X(L.help);return false}}}}if(ctrlKey){var ae=String.fromCharCode(ad).toLowerCase();if(M[ae]){if(M[ae].dialog){X(M[ae])}else{Z(M[ae])}return false}}}else{if(ah.type=="keyup"){if(ad==70&&ctrlKey){return af()}}else{if(ah.type=="keypress"){if(h.opera){if(ad==9||(ctrlKey&&(ad==112||ad==98))){return false}}if(ad==102&&ctrlKey){return af()}}}}};e(s).bind({keydown:aa,keyup:aa,keypress:aa,focus:function(i){SMarkUp.focused=SMarkUp.instances[this.id]}});e(y()).find("div.smarkup-textarea")[0].appendChild(s);var T=Q.markup,C='<li{ddcls}><a href="#" rel="{tag}" class="{cls}" title="{title}"></a>{ddmenu}</li>',H='<li class="separator">------------------------</li>',K='<div class="smarkup-ddmenu"><ul class="smarkup-ddmenu">{tags}</ul></div>',O='<li><a href="#" rel="{tag}" class="{cls}">{title}</a></li>',x=[],I=[];for(var Y in T){if(!T[Y].separator){var V=C.parse({tag:T[Y].name,cls:T[Y].className||T[Y].name,title:(T[Y].title||"")+(T[Y].key?" [Ctrl + "+T[Y].key.toUpperCase()+"]":"")});if(T[Y].dropDownMenu){var t=[];for(var U=0;U<T[Y].dropDownMenu.length;U++){var J=T[Y].dropDownMenu[U];t.push(O.parse({tag:J.name,title:J.title||J.name,cls:J.className||J.name}));L[J.name]=J;if(J.key){M[J.key.toLowerCase()]=J}}V=V.parse({ddcls:' class="ddmenu"',ddmenu:K.parse({tags:t.join("")})})}else{V=V.parse({ddcls:"",ddmenu:""})}I.push(V)}if(T[Y].separator){x.push(I.join(""));I=[]}else{L[T[Y].name]=T[Y];if(T[Y].key){M[T[Y].key.toLowerCase()]=T[Y]}}}if(I.length){x.push(I.join(""))}e(y()).find("ul.smarkup-toolbar").bind({click:function(ad,ac){if(!ac.parentNode.className){var i=ab.button=L[ac.rel];if(i.invoke&&ab[i.invoke]){ab[i.invoke].call(ab);return false}else{if(i.dialog){X(ac)}else{if(!i.attributes){if(i.onBeforeInsert){i.onBeforeInsert.call(ab)}else{Z(L[ac.rel])}}else{if(i.replace){i.replace.call(this)}else{X(ac)}}}}}return false},contextmenu:function(i){return false}})[0].innerHTML=x.join(H);e(y()).find("input.qsearch").bind({keyup:function(ah){var ai="",ac=e(this).parent("div").find("a")[0],ag=this.value.replace(/\\/g,"");if(ag){var ae=new RegExp(ag,"gi"),af=[],ad=v().value,i=ag.length;while(ae.test(ad)){af.push({start:ae.lastIndex-i,end:i})}if(af.length>0){ai=af.length+" matches found";ac.matches=af;ac.index=0;if(!ac.onclick){ac.onclick=function(){if(this.matches){if(this.index==this.matches.length){this.index=0}var aj=v(),ak=this.matches[this.index++];S(ak.start,ak.end)}return false}}}else{ai="Nothing found";ac.matches=null}}else{ai="";ac.matches=null}e(this).parent("div").find("small")[0].innerHTML=ai},keydown:function(ac){var i=ac.which||ac.keyCode;if(i==13){e(this).parent("div").find("a")[0].onclick();return false}else{if(i==27){e(y()).find("div.smarkup-search").css({display:"none"});v().focus();return false}}},keypress:function(i){if(h.opera&&(i.which||i.keyCode)==13){return false}},focus:function(){this.select()}});e(document).bind({keydown:function(i){if((i.which||i.keyCode)==27){q.hide();S()}}});var E=function(){var i=v();var ac=e(i).parent("div.smarkup")[0];ac.parentNode.insertBefore(i,ac);ac.parentNode.removeChild(ac);P=i.id;if(/^smu-/.test(P)){i.id=""}i.className=i.oldClass;i.style.cssText=i.oldCSS;i.onkeydown=i.onkeyup=i.onkeypress=null;delete SMarkUp.instances[P]};this.id=P;this.name=v().name||P;this.button=null;this.shiftKey=this.ctrlKey=this.altKey=false;this.paste=function(i){u(i)};this.insert=function(i){Z(i)};this.select=function(ac,i){S(ac,i)};this.selection=function(){return z()};this.value=function(i){if(!i){return v().value}else{v().value=i}};this.textarea=function(){return v()};this.buttons=function(){return L};this.showDialog=function(i){X(i)};this.hideDialog=function(){q.hide()};this.preview=function(){G()};this.remove=function(){E()}}return{bind:function(s,p,o){var r=[];if(typeof s=="string"){r.push(document.getElementById(s))}else{if(typeof s=="object"){if(s.nodeType){r.push(s)}else{if(s.constructor){if(s.constructor==Function){r=s()}else{if(s.length){for(var q=0;q<s.length;q++){if(typeof s[q]=="string"){r.push(document.getElementById(s[q]))}else{if(typeof s[q]=="object"&&s[q].nodeType){r.push(s[q])}}}}}}}}}this.conf[p].name=p;for(var q=0;q<r.length;q++){if(!r[q].id){r[q].id="smu-"+(new Date().getTime())}this.instances[r[q].id]=new m(r[q].id,this.conf[p],o)}r=null},insert:function(o){if(o.target&&SMarkUp.instances[o.target]){SMarkUp.instances[o.target].insert(o)}else{for(var p in SMarkUp.instances){SMarkUp.instances[p].insert(o)}}},instances:{},getInstance:function(i){return SMarkUp.instances[i]||null},getInstanceByName:function(o){for(var p in SMarkUp.instances){SMarkUp.instances[p].name==o;return SMarkUp.instances[p]}return null},conf:{},registerAddOns:function(r){for(var o in r.addons){SMarkUp.addons[o]=r.addons[o]}var p=r.style||false;if(p==true){var q=document.createElement("link");q.rel="stylesheet";q.type="text/css";q.href=n+"/addons/"+r.name+"/style.css";document.getElementsByTagName("head")[0].appendChild(q)}},addons:{searchAndReplace:{name:"find",title:"Search &amp; Replace",key:"H",dialog:{content:function(o){var i='<h3>Search &amp; Replace</h3><dl><dt><label>Search:</label></dt><dd><input type="text" name="smu_search" value="" class="smarkup-dialog-text"/></dd></dl><dl><dt><label>Replace:</label></dt><dd><input type="text" name="smu_replace" class="smarkup-dialog-text"/></dd></dl>';o.innerHTML=i},onBeforeInsert:function(i){if(i.search){var o=new RegExp(i.search,"gi");if(this.selection()){this.paste(this.selection().replace(o,i.replace))}else{this.value(this.value().replace(o,i.replace))}}}}},preview:{name:"preview",invoke:"preview",title:"Preview Document"},help:{name:"help",title:"Quick Help",dialog:{content:function(p){var o={Tab:"Use Tab key to indent multiline selection","Shift + Tab":"Use Shift + Tab keys to decrease indent of multiline selection","Ctrl + Shift + Button Click":"Will aply markup to all selected lines instead of whole selection","Cmd + Shift + Button Click":"Will aply markup to all selected lines (Mac OS X only)","Alt + Button Click":"Will wrap text in alternative markup if alternate markup is defined for the button","Ctrl + F":"Will open Quick Search toolbar for focused textarea","Cmd + F":"Will open Quick Search toolbar for focused textarea (Mac OS X only)",Esc:"Will hide Quick Search toolbar for focused textarea or will hide any opened modal dialog","Ctrl + F1":"Will show Quick Help","Cmd + F1":"Will show Quick Help (Mac OS X only)"},q="<dt>{dt}</dt><dd>{dd}</dd>",t='<a href="#" class="{class}></a>',s=[];s.push("<h3>Quick Help</h3>");s.push('<div class="smarkup_help">');s.push("<h4>Shortcut Keys</h4>");s.push("<dl>");for(var r in o){s.push(q.parse({dt:r,dd:o[r]}))}s.push("</dl>");s.push("</div>");p.innerHTML=s.join("")}}}}}}();
