﻿(function(B){ChiliBook={version:"2.2",automatic:true,automaticSelector:"code",lineNumbers:!true,codeLanguage:function(A){var D=B(A).attr("class");return D?D:""},recipeLoading:true,recipeFolder:"",replaceSpace:"&#160;",replaceTab:"&#160;&#160;&#160;&#160;",replaceNewLine:"&#160;<br/>",selectionStyle:["position:absolute; z-index:3000; overflow:scroll;","width:16em;","height:9em;","border:1px solid gray;","padding:15px;","background-color:yellow;"].join(" "),defaultReplacement:'<span class="$0">$$</span>',recipes:{},queue:{},mappath:{},unique:function(){return(new Date()).valueOf()}};B.fn.chili=function(A){var V=B.extend({},ChiliBook,A||{});function W(F,G,K){function H(a,d){var b=[];for(var c in a[d]){b.push(D(a,d,c))}return b}function D(c,e,d){var b=c[e][d];var a=(typeof b._match=="string")?b._match:b._match.source;return{recipe:c,blockName:e,stepName:d,exp:"("+a+")",length:1+(a.replace(/\\./g,"%").replace(/\[.*?\]/g,"%").match(/\((?!\?)/g)||[]).length,replacement:b._replace?b._replace:V.defaultReplacement}}function J(f){var q=1;var b=[];for(var d=0;d<f.length;d++){var e=f[d].exp;e=e.replace(/\\\\|\\(\d+)/g,function(o,p){return !p?o:"\\"+(q+1+parseInt(p,10))});b.push(e);q+=f[d].length}var a="((?:\\s|\\S)*?)";var g="((?:\\s|\\S)+)";var c="(?:"+b.join("|")+")";c=a+c+"|"+g;return new RegExp(c,G._case?"g":"gi")}function l(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;")}function C(a){return a.replace(/ +/g,function(b){return b.replace(/ /g,N)})}function i(a){a=l(a);if(N){a=C(a)}return a}function j(b,a){return W(b,a)}function L(b,a,c){return W(b,a,c)}function I(d,b,f,a){var p=V.replaceSpace;var e=D(b,f,a);var g=[e];var c=d.replace(J(g),function(){return m.apply({steps:g},arguments)});return c}function h(w,d,x){if(!d){return i(w)}var c=d.split("/");var f="";var y="";var b="";switch(c.length){case 1:f=c[0];break;case 2:f=c[0];y=c[1];break;case 3:f=c[0];y=c[1];b=c[2];break;default:return i(w)}function u(o){var q=Z(o);var p=V.recipes[q];if(!p){throw {msg:"recipe not available"}}return p}try{var e;if(""==b){if(""==y){if(""==f){}else{e=u(f);return j(w,e)}}else{if(""==f){e=x.recipe}else{e=u(f)}if(!(y in e)){return i(w)}return L(w,e,y)}}else{if(""==f){e=x.recipe}else{e=u(f)}if(""==y){y=x.blockName}if(!(y in e)){return i(w)}if(!(b in e[y])){return i(w)}return I(w,e,y,b)}}catch(g){if(g.msg&&g.msg=="recipe not available"){var a="chili_"+V.unique();if(V.recipeLoading){var z=Z(f);if(!V.queue[z]){try{V.queue[z]=[{cue:a,subject:w,module:d,context:x}];B.getJSON(z,function(q){V.recipes[z]=q;var p=V.queue[z];for(var s=0,o=p.length;s<o;s++){var r=h(p[s].subject,p[s].module,p[s].context);if(V.replaceTab){r=r.replace(/\t/g,V.replaceTab)}if(V.replaceNewLine){r=r.replace(/\n/g,V.replaceNewLine)}B("#"+p[s].cue).replaceWith(r)}})}catch(v){alert("the recipe for '"+f+"' was not found in '"+z+"'")}}else{V.queue[z].push({cue:a,subject:w,module:d,context:x})}return'<span id="'+a+'">'+i(w)+"</span>"}return i(w)}else{return i(w)}}}function M(b,c){var a=c.replace(/(<span\s+class\s*=\s*(["']))((?:(?!__)\w)+\2\s*>)/ig,"$1"+b+"__$3");return a}function m(){if(!arguments[0]){return""}var x=this.steps;var y=0;var a=2;var c=arguments[1];var v=arguments[arguments.length-3];if(!v){var w;while(w=x[y++]){var d=arguments;if(d[a]){var e="";if(B.isFunction(w.replacement)){var f=[];for(var b=0,g=w.length;b<g;b++){f.push(d[a+b])}f.push(d[d.length-2]);f.push(d[d.length-1]);e=w.replacement.apply({x:function(){var q=arguments[0];var o=arguments[1];var p={recipe:w.recipe,blockName:w.blockName};return h(q,o,p)}},f)}else{e=w.replacement.replace(/(\\\$)|(?:\$\$)|(?:\$(\d+))/g,function(o,p,q){if(p){return"$"}else{if(!q){return i(d[a])}else{if(q=="0"){return w.stepName}else{return i(d[a+parseInt(q,10)])}}}})}e=M(w.recipe._name,e);return i(c)+e}else{a+=w.length}}}else{return i(v)}}if(!K){K="_main";P(G)}if(!(K in G)){return i(F)}var N=V.replaceSpace;var E=H(G,K);var n=J(E);var k=F.replace(n,function(){return m.apply({steps:E},arguments)});return k}function O(D){if(document.createElement){var E=document.createElement("style");E.type="text/css";if(E.styleSheet){E.styleSheet.cssText=D}else{var C=document.createTextNode(D);E.appendChild(C)}document.getElementsByTagName("head")[0].appendChild(E)}}function P(D){var F=D._name;if(!V.queue[F]){var I=["/* Chili -- "+F+" */"];for(var G in D){if(G.search(/^_(?!main\b)/)<0){for(var H in D[G]){var C=D[G][H];if("_style" in C){if(C["_style"].constructor==String){I.push("."+F+"__"+H+" { "+C["_style"]+" }")}else{for(var E in C["_style"]){I.push("."+F+"__"+E+" { "+C["_style"][E]+" }")}}}}}}I=I.join("\n");O(I);V.queue[F]=true}}function R(F){var C=V.codeLanguage(F);if(""!=C){var D=Z(C);if(V.recipeLoading){if(!V.queue[D]){try{V.queue[D]=[F];B.getJSON(D,function(G){V.recipes[D]=G;var J=V.queue[D];for(var H=0,I=J.length;H<I;H++){U(J[H],D)}})}catch(E){alert("the recipe for '"+C+"' was not found in '"+D+"'")}}else{V.queue[D].push(F)}U(F,D)}else{U(F,D)}}}function U(E,F){var N=V.recipes[F];if(!N){return}var C=B(E);var L=C.text();if(!L){return}L=L.replace(/\r\n?/g,"\n");if(C.parent().is("pre")){if(!B.browser.safari){L=L.replace(/^\n/g,"")}}var J=W(L,N);if(V.replaceTab){J=J.replace(/\t/g,V.replaceTab)}if(V.replaceNewLine){J=J.replace(/\n/g,V.replaceNewLine)}E.innerHTML=J;if(B.browser.msie||B.browser.mozilla){X(E)}var H=C.parent();var I=H.attr("class");var M=/ln-(\d+)-([\w][\w\-]*)|ln-(\d+)|ln-/.exec(I);if(M){Q(E);var K=0;if(M[1]){K=parseInt(M[1],10);var D=B(".ln-"+M[1]+"-"+M[2]);var G=D.index(H[0]);D.slice(0,G).each(function(){K+=B(this).find("li").length})}else{if(M[3]){K=parseInt(M[3],10)}else{K=1}}C.find("ol")[0].start=K;B("body").width(B("body").width()-1).width(B("body").width()+1)}else{if(V.lineNumbers){Q(E)}}}function X(C){var D=null;B(C).parents().filter("pre").bind("mousedown",function(){D=this;if(B.browser.msie){document.selection.empty()}else{window.getSelection().removeAllRanges()}}).bind("mouseup",function(G){if(D&&(D==this)){D=null;var J="";if(B.browser.msie){J=document.selection.createRange().htmlText;if(""==J){return}J=T(J);var I='<textarea style="STYLE">'}else{J=window.getSelection().toString();if(""==J){return}J=J.replace(/\r/g,"").replace(/^# ?/g,"").replace(/\n# ?/g,"\n");var I='<pre style="STYLE">'}var H=B(I.replace(/\bSTYLE\b/,ChiliBook.selectionStyle)).appendTo("body").text(J).attr("id","chili_selection").click(function(){B(this).remove()});var E=G.pageY-Math.round(H.height()/2)+"px";var F=G.pageX-Math.round(H.width()/2)+"px";H.css({top:E,left:F});if(B.browser.msie){H[0].focus();H[0].select()}else{var L=window.getSelection();L.removeAllRanges();var K=document.createRange();K.selectNodeContents(H[0]);L.addRange(K)}}})}function Z(C){return ChiliBook.mapPath[V.recipeFolder+C+".js"]}function S(){var C="";if(B.browser.msie){C=document.selection.createRange().htmlText}else{C=window.getSelection().toString()}return C}function T(F){do{var E=ChiliBook.unique()}while(F.indexOf(E)>-1);var D="";if(/<br/i.test(F)||/<li/i.test(F)){if(/<br/i.test(F)){F=F.replace(/\<br[^>]*?\>/ig,E)}else{if(/<li/i.test(F)){F=F.replace(/<ol[^>]*?>|<\/ol>|<li[^>]*?>/ig,"").replace(/<\/li>/ig,E)}}var C=B("<pre>").appendTo("body").hide()[0];C.innerHTML=F;D=B(C).text().replace(new RegExp(E,"g"),"\r\n");B(C).remove()}return D}function Q(C){function F(M,b,J,L){var N=L?"</span>":"";var K="";if(M){K="<li>"+L+b+N+"</li>"}else{if(J){K="<li>"+L+J+N+"</li>"}}return K}function H(K,N,L,M){var J="";if(M){J=M}else{J=F(K,N,L,"")}return J}var I=B(C).html();var G=/<br>/.test(I)?"<br>":"<BR>";var D="<li>"+V.replaceSpace+"</li>";var E=I.replace(/(<span [^>]+>)((?:(?:&nbsp;|\xA0)<br>)+)(.*?)(<\/span>)/ig,"$2$1$3$4").replace(/(.*?)(<span .*?>)(.*?)(?:<\/span>(?:&nbsp;|\xA0)<br>|<\/span>)/ig,function(L,M,d,J){if(/<br>/i.test(J)){var N=M.split(G);var c=N.pop();M=N.join(G);var K=(M?M+G:"")+(c+J).replace(/((.*?)(?:&nbsp;|\xA0)<br>)|(.*)/ig,function(h,a,i,j){var b=F(a,i,j,d);return b});return K}else{return L}}).replace(/(<li>.*?<\/li>)|((.*?)(?:&nbsp;|\xA0)<br>)|(.+)/ig,function(L,N,b,M,J){var K=H(b,M,J,N);return K}).replace(/<li><\/li>/ig,D);C.innerHTML="<ol>"+E+"</ol>"}function Y(C){return B.map(C.split(""),function(E,D){return" "+E+" "+E.charCodeAt(0)+" "}).join(" ")}this.each(function(){var C=B(this);C.trigger("chili.before_coloring");R(this);C.trigger("chili.after_coloring")});return this};B(function(){if(ChiliBook.automatic){B(ChiliBook.automaticSelector).chili()}})})(jQuery);