/* wdEditor with Autocomplete and Suggestions */
/* Copyright Kenneth Tsang 2013 */
(function(a){a.jxeenoEditor=function(d){var k=a(d);a('
').appendTo(document.body);var e="";var j={elId:"#wdEditor-suggest",type:"",showing:false,replaceLocation:{start:0,end:0},list:[],selected:0,select:function(o){if(typeof(o)=="undefined"){o=this.selected}var p=this.list[o];i(k[0],p.replacement,this.replaceLocation.start,this.replaceLocation.end,false);this.hideSuggest();if(typeof(p.select)=="object"){var n=g(k[0]);l(k[0],n+p.select[0]+p.select[1],n+p.select[0])}else{f(k[0])}},setHover:function(n){if(typeof(n)=="undefined"){n=this.selected}a(j.elId+" li a").removeClass("hover");a(j.elId+" li a#ui-"+n+"-id").addClass("hover")},showSuggest:function(){if(this.list.length==0){this.hideSuggest();return}var n=k.getCaretPosition();var o={};o.left=k.offset().left+n.left;o.top=k.offset().top+n.top;var p="";a.each(this.list,function(r,q){p+='"});a(j.elId).html(p);a(j.elId+" .ui-menu-item a").click(function(){j.selected=this.id.match(/ui-([0-9]+)-id/)[1];j.select()}).hover(function(){j.selected=this.id.match(/ui-([0-9]+)-id/)[1];j.setHover()});a(j.elId).css({top:o.top,left:o.left}).show();this.selected=0;this.setHover();this.showing=true},hideSuggest:function(){this.type="";this.showing=false;this.replaceLocation={start:0,end:0};this.list=[];this.selected=0;a(j.elId).hide()}};var g=function(o){if(o.selectionStart){return o.selectionStart}else{if(document.selection){o.focus();var p=document.selection.createRange();if(p==null){return 0}var n=o.createTextRange(),q=n.duplicate();n.moveToBookmark(p.getBookmark());q.setEndPoint("EndToStart",n);return q.text.length}}return 0};var b=function(s,u,t){var n=s.scrollTop;var p=0;if(typeof(t)=="undefined"){var t=true}var v=((s.selectionStart||s.selectionStart=="0")?"ff":(document.selection?"ie":false));if(v=="ie"){s.focus();var r=document.selection.createRange();r.moveStart("character",-s.value.length);p=r.text.length}else{if(v=="ff"){p=s.selectionStart}}var o=(s.value).substring(0,p);var q=(s.value).substring(p,s.value.length);s.value=o+u+q;p=p;if(!t){p+=u.length}if(v=="ie"){s.focus();var r=document.selection.createRange();r.moveStart("character",-s.value.length);r.moveStart("character",p);r.moveEnd("character",0);r.select()}else{if(v=="ff"){s.selectionStart=p;s.selectionEnd=p;s.focus()}}s.scrollTop=n};var i=function(u,w,n,r,v){var o=u.scrollTop;var q=n;var x=((u.selectionStart||u.selectionStart=="0")?"ff":(document.selection?"ie":false));var p=(u.value).substring(0,n);var s=(u.value).substring(r,u.value.length);u.value=p+w+s;q=q;if(!v){q+=w.length}if(x=="ie"){u.focus();var t=document.selection.createRange();t.moveStart("character",-u.value.length);t.moveStart("character",q);t.moveEnd("character",0);t.select()}else{if(x=="ff"){u.selectionStart=q;u.selectionEnd=q;u.focus()}}u.scrollTop=o};var h=function(t,s,u){var n=t.scrollTop;var p=0;if(typeof(u)=="undefined"){var u=true}var v=((t.selectionStart||t.selectionStart=="0")?"ff":(document.selection?"ie":false));if(v=="ie"){t.focus();var r=document.selection.createRange();r.moveStart("character",-t.value.length);p=r.text.length}else{if(v=="ff"){p=t.selectionStart}}var o=(t.value).substring(0,p);var q=(t.value).substring(p,t.value.length);if(u){o=o.substring(-s,s);p-=s}else{q=q.substr(0,s)}t.value=o+q;if(v=="ie"){t.focus();var r=document.selection.createRange();r.moveStart("character",-t.value.length);r.moveStart("character",p);r.moveEnd("character",0);r.select()}else{if(v=="ff"){t.selectionStart=p;t.selectionEnd=p;t.focus()}}t.scrollTop=n};function l(o,p,n){o.focus();if(o.setSelectionRange){o.setSelectionRange(p,n)}else{if(o.createTextRange){o=o.createTextRange();o.collapse(true);o.moveEnd("character",n);o.moveStart("character",p);o.select()}}}var f=function(o,A){var E=a(o);var q=E.val();if(A==undefined){A=event}var D=A.keyCode;if(q==e){if(j.showing){switch(D){case 13:case 9:j.select();break;case 27:j.hideSuggest();return;break;case 38:if((j.selected-1)>=0){j.selected-=1;j.setHover()}break;case 40:if((j.selected+1)<=(j.list.length-1)){j.selected+=1;j.setHover()}break}}return}e=q;var B=g(o);var t=true;var v=q.substr(0,B);var x=q.substr(B);var C=v.match(/([\n\r]|^)(.*?)$/);if(C!=null){C=C[2]}else{C=""}var r=x.match(/^(.*?)([\n\r]|$)/);if(r!=null){r=r[1]}else{r=""}var z=C+r;var n=false;if(x.length==0||x.match(/^[\n\r]/)){n=true}var u=function(P,Q,I,N){var L=P.split("");var F=P.regexEscape();var H=1;while(Htoc",brackets:["[[","]]"],dual:false,dataVar:[{},[]]},{blockName:"div",brackets:["[[","]]"],closeBlock:"[[/div]]",dual:false,dataVar:[{"*":{params:{style:"css: code;","class":"css-class"},singleLine:false,onlySingleLine:false,importance:0}},[]]},{blockName:"table",brackets:["[[","]]"],closeBlock:"[[/table]]",dual:false,dataVar:[{"*":{params:{style:"css: code;","class":"css-class"},singleLine:false,onlySingleLine:false,importance:0}},[]]},{blockName:"row",brackets:["[[","]]"],closeBlock:"[[/row]]",dual:false,dataVar:[{"*":{params:{style:"css: code;","class":"css-class"},singleLine:false,onlySingleLine:false,importance:0}},[]]},{blockName:"cell",brackets:["[[","]]"],closeBlock:"[[/cell]]",dual:false,dataVar:[{"*":{params:{style:"css: code;","class":"css-class"},singleLine:false,onlySingleLine:false,importance:0}},[]]},{blockName:"image",brackets:["[[","]]"],dual:true,dataVar:[{"":{params:{link:"uri",alt:"str",title:"str",width:"px|em|%",height:"px|em|%",style:"css","class":"css-class",size:"square|thumbnail|small|medium|large"},singleLine:true,onlySingleLine:true,importance:0}},[]]}];a.each(p,function(H,G){var F=c(G.blockName,G.dual,G.brackets,G.dataVar,z,v,C,x,r,B,D,u);if(!F){t=false}});if(D==13&&v.match(/([\n\r])$/)){var w=v.substr(0,v.length-C.length);var s=w.match(/([\n\r]|^)(.*?)[\n\r]$/);if(s!=null){s=s[2]}else{s=""}a.each(p,function(H,G){var J=[G.brackets[0].regexEscape(),G.brackets[1].regexEscape()];var I=u(G.blockName,G.dual,J,s);if(I[0]){if(typeof(G.dataVar[0][a.trim(I[1])])!="undefined"||typeof(G.dataVar[0]["*"])!="undefined"){if(typeof(G.dataVar[0]["*"])!="undefined"){var F=G.dataVar[0]["*"]}else{var F=G.dataVar[0][a.trim(I[1])]}if(!F.onlySingleLine&&!s.match(new RegExp(G.closeBlock.regexEscape()))){b(k[0],"\n"+G.closeBlock,true)}}}})}var y=[{opening:"[!--",closing:"--",multiple:false},{opening:"[",closing:"]",multiple:true},{opening:"//",closing:"//",multiple:false},{opening:"**",closing:"**",multiple:false},{opening:"__",closing:"__",multiple:false},{opening:"@@",closing:"@@",multiple:false},{opening:"@<",closing:">@",multiple:false},{opening:"##",closing:"|text##",multiple:false},{opening:"%%",closing:"%%",multiple:false},{opening:"{$",closing:"}",multiple:false},{opening:"%%form_data{",closing:"}",multiple:false},{opening:"%%form_raw{",closing:"}",multiple:false},{opening:"%%form_hint{",closing:"}",multiple:false},{opening:"%%form_label{",closing:"}",multiple:false},{opening:"%%content{",closing:"}",multiple:false}];a.each(y,function(G,F){m(F.opening,F.closing,F.multiple,z,C,r,D)});if(!t){j.showSuggest()}else{j.hideSuggest()}};var m=function(n,s,B,w,u,q,y){var r=n.regexEscape();var o=s.regexEscape();var A="";if(B){A="+"}var v=function(D){var C=D.match(new RegExp("("+r+A+")"));if(!C){return 0}return C[1].length};var t=v(u);if(!q.match(new RegExp("[^("+r+"{"+t+"})]"+o+t))){var p=u.match(new RegExp("("+r+A+")$"));if(!p){p=""}else{p=p[1]}var x=q.match(new RegExp("^("+o+A+")"));if(!x){x=""}else{x=x[1]}if(p.length>0){if(B){var z=p.length-x.length}else{if(p==""){p=0}else{p=1}if(x==""){x=0}else{x=1}var z=p-x}if(z<0){h(k[0],(-z)*(s.length),false)}else{if(y!=8){b(k[0],s.repeat(z))}}}}};var c=function(I,q,t,n,J,B,O,H,u,N,Q,A){var z=n[0];var v=n[1];var E=[t[0].regexEscape(),t[1].regexEscape()];var w=true;var C=A(I,q,E,J);if(C[0].length){if(new RegExp("^"+C[0].regexEscape()).test(I)&&I!=a.trim(C[0])){w=false;var y=new RegExp("^("+C[0].html_entities().regexEscape()+")");var o=I.html_entities().match(y);var s=t[0];s+=I.html_entities().replace(y,"$1");s+="..."+t[1];var F=t[0]+I+" ";j.list.push({label:s,replacement:F});j.replaceLocation={start:N-(t[0]+C[0]).length,end:N}}else{if(typeof(z[a.trim(C[1])])!="undefined"||typeof(z["*"])!="undefined"){if(typeof(z["*"])!="undefined"){var D=z["*"]}else{var D=z[a.trim(C[1])]}var r=(a.map(D.params,function(T,S){return S}).length>0);if(r){w=false;var K=N-O.length;var p=C[2].substr(0,O.length-(t[0]+C[0]+C[1]).length);if(O.length>(t[0]+C[0]+C[1]+(C[2]?"":" ")+C[2]).length){p="a"}var G=C[2].match(/[^\\]["]/g);if(G){var x=((G.length%2)==0)}else{var x=false}if(p==""){p=" "}if(a.trim(p)==""||(x&&p.match(/ $/))){var M="";if(!O.match(/ $/)){M=" "}a.each(D.params,function(T,S){j.list.push({label:M+T+'="'+S+'"',replacement:M+T+'="'+S+'"',select:[-1,-S.length]})});j.replaceLocation={start:N,end:N}}else{if(p.match(/ ([a-zA-Z]+)(=|=")?$/)){var L=p.match(/ ([a-zA-Z]+)(=|=")?$/)[1];var P=L.regexEscape();var R=new RegExp("^"+P,"i");a.each(D.params,function(T,S){if(T.match(R)){j.list.push({label:T+'="'+S+'"',replacement:T+'="'+S+'"',select:[-1,-S.length]})}});j.replaceLocation={start:N-L.length,end:N}}}j.list=j.list.slice(0,10)}}else{w=false;var P=a.trim(C[1]).regexEscape();var R=new RegExp("^"+P,"i");a.each(z,function(V,S){if(V.match(R)){var U=(objLen(S.params)>0);var T=t[0]+I+" ";T=T.replace(new RegExp("^("+E[0]+C[0]+")"),"$1");T+=V.replace(new RegExp("^("+P+")"),"$1");if(U){T+="..."}if(C[3]){T+=""+t[1]+""}else{T+=t[1]}var W=t[0]+I+" "+V+" ".repeat(U);j.list.push({label:T,replacement:W,meta:S})}});j.list=j.list.sort(function(T,S){return S.meta.importance-T.meta.importance}).slice(0,10);var K=N-O.length;j.replaceLocation={start:N-O.length,end:K+(t[0]+C[0]+C[1]).length}}}}return w};k.keydown(function(n){if(j.showing){switch(n.which){case 13:case 9:case 27:case 38:case 40:n.preventDefault();return false;break}}});k.keyup(function(n){f(this,n)});a('Autocomplete enabled!
').css({color:"#333","font-family":"monospace","font-weight":"bold"}).prependTo(a(".edit-help-34"));String.prototype.repeat=function(n){return new Array(n+1).join(this)};String.prototype.regexEscape=function(){return this.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")};String.prototype.html_entities=function(){return a("").text(this).html()};objLen=function(n){var p=0;var o;for(o in n){if(n.hasOwnProperty(o)){p++}}return p}}})(jQuery);