(function(){var a=window.scrollie={NUM_ROWS:50,PADDING:25,INITIAL_GUESS:50,FUDGE:1000,offsets:[],totalHeight:0,viewport:null,paragraphs:null,pageNumber:1,interval:0,scrubber:null,average:this.INITIAL_GUESS};a.fetchText=function(d,b,c){path=this.correctPath();$.getJSON(path+"/"+d+".json",function(e){c(d,b,e);$("#"+a.pageNumber).addClass("highlight");a.updateScrubber(d)})};a.correctPath=function(){return window.PATH.replace(".html","")};a.poll=function(){if($("table.grafs").length>0){var d=this.viewport.height();var e=$("table.grafs").position().top;var b=$("table.grafs").position().top+$("table.grafs").height();if((d<b)&&(this.PADDING>e)){return}}a.stop();var c=this.viewport.scrollTop();start=this.reducer(c);a.computeAverage();if(start+this.NUM_ROWS-$("table.grafs tr").length>this.TOTAL_GRAFS){a.start();return}this.fetchText(start,c,function(h,g,f){a.render(h,g,f);a.start()})};a.computeAverage=function(){var b=_.compact(this.offsets);var c=_.reduce(b,function(d,e){return d+e},0);this.average=c>0?c/b.length-1:this.INITIAL_GUESS;$("#bar").height(this.TOTAL_GRAFS*this.average+this.FUDGE)};a.render=function(d,c,b){if($("table.grafs tr").length>0){c=c-a.PADDING}$("#paragraphs").html(window.JST.table({grafs:b}));$("#paragraphs table.grafs tr").each(function(e){a.offsets[e+d]=$(this).height()});$("#paragraphs table.grafs").css({top:c})};a.reducer=function(f){var g=0;var e=0;for(var d=0,b=this.offsets.length;d<b;d++){g=d;if(e>f){break}var c=_.isNumber(this.offsets[d])?this.offsets[d]:this.average;e+=c}return g};a.page=function(b){var c=this.correctPath().replace("show",b);$.getJSON(c+"/"+a.pageNumber+".json",function(d){if(!d){return}a.changeHash("/graf/"+d.graf.line_number)})};a.changeHash=function(b){window.location.hash=b};a.gotoLine=function(b){var c=parseInt(b,10);var d=(a.average*c);a.fetchText(c,d,function(g,f,e){a.render(g,f,e);a.computeAverage();a.viewport.scrollTop($("#paragraphs table.grafs").position().top-$("#bar").position().top);a.pageNumber=g;hashHistory.save(window.location.hash.replace("#",""))})};a.start=function(){if(a.interval===0){a.interval=setInterval(function(){a.poll()},200)}};a.stop=function(){clearInterval(a.interval);a.interval=0};a.updateScrubber=function(b){var c=this.viewport.height()/this.TOTAL_GRAFS;var d=Math.floor(c*b);a.scrubber.css({top:d})};a.showNote=function(b){var c=$(b).siblings("div.note");if(c.is(":hidden")){c.slideDown(75)}else{c.slideUp(75)}};a.run=function(f,d){this.TOTAL_GRAFS=f;this.offsets=new Array(this.TOTAL_GRAFS);this.viewport=$("#viewport");$("#bar").height(this.INITIAL_GUESS*this.TOTAL_GRAFS);var b=this.viewport.height()/f;var c=$("#divisions");c.height(this.viewport.height());var e=d.length;_.each(d,function(i,h){i=i.graf;var g=i.operation?i.operation:"";if(h+1<e){var j=Math.floor(b*i.line_number);$('<div class="'+g+'"></div>').css({top:j}).height(Math.ceil(b*(d[h+1].graf.line_number-i.line_number))).appendTo(c)}});a.scrubber=$('<div id="scrubber"></div>').appendTo(c);$("a#next").click(function(){a.page("next");return false});$("a#prev").click(function(){a.page("prev");return false});$("#viewport div.sticky").live("click",function(){a.showNote(this)});$("#viewport a.close").live("click",function(g){g.preventDefault();a.showNote($(this).parents("div.note").siblings("div.sticky"))});hashHistory.initialize();hashHistory.register(/#\/graf\//,function(g){a.gotoLine(g)});a.start();hashHistory.loadURL()}}());$(document).ready(function(){$(window).keyup(function(a){var b=String.fromCharCode(a.which+32);if(b=="j"){scrollie.page("next")}else{if(b=="k"){scrollie.page("prev")}}})});(function(){window.JST=window.JST||{};var a=function(c){var b=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+c.replace(/[\r\t\n]/g," ").replace(/'(?=[^%]*%>)/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/<%=(.+?)%>/g,"',$1,'").split("<%").join("');").split("%>").join("p.push('")+"');}return p.join('');");return b};window.JST.note=a('<div class="note" style="<%= $.browser.mozilla ? "left:30px" : "" %>">  <div class="title">    <%= note.title %>    <a href="" class="close">Close (x)</a>  </div>  <div class="description">    <%= note.description %>  </div></div>');window.JST.table=a('<table class=\'grafs\'>  <tbody>    <% for (var i = 0, l = grafs.length; i < l; i++) { %>      <tr id="<%= grafs[i].graf.line_number %>" class=\'<%= grafs[i].graf.operation %>\'>        <td class=\'original\'>          <% if (grafs[i].graf.note) { %>            <div id="note-<%=grafs[i].graf.note.id%>">              <div class="sticky" style="<%= $.browser.mozilla ? "left:-10px" : "" %>"></div>              <%= window.JST.note({ note: grafs[i].graf.note }) %>            </div>          <% }; %>          <%= grafs[i].graf.left %>        </td>        <td class=\'revision\'><%= grafs[i].graf.right %></td>      </tr>    <% } %>  </tbody></table>')})();
