function StringBuffer(){this.buffer=[]}StringBuffer.prototype.append=function append(a){this.buffer.push(a);return this};StringBuffer.prototype.toString=function toString(){return this.buffer.join("")};var SP={LINE_LENGTH:5,BLOCK_LENGTH:10,to_line:function(a){return Math.floor(a/(this.LINE_LENGTH*this.BLOCK_LENGTH))},to_index:function(d,c){for(var b=0;b<this.ytable.length;b++){if(c<this.ytable[b]||b==this.ytable.length-1){var a=Math.floor((d-this.x)/this.c_width);a=Math.min(Math.floor(a/(this.BLOCK_LENGTH+1))*this.BLOCK_LENGTH+Math.min((a%(this.BLOCK_LENGTH+1)),this.BLOCK_LENGTH-1),this.LINE_LENGTH*this.BLOCK_LENGTH-1);return(a+this.LINE_LENGTH*this.BLOCK_LENGTH*b)}}},from_str_index:function(a){a=Math.floor(a/(this.BLOCK_LENGTH+1))*this.BLOCK_LENGTH+Math.min((a%(this.BLOCK_LENGTH+1)),this.BLOCK_LENGTH-1);return a},to_str_index:function(a){a=Math.floor(a/(this.BLOCK_LENGTH))*(this.BLOCK_LENGTH+1)+Math.min((a%(this.BLOCK_LENGTH)),this.BLOCK_LENGTH-1);return a},get_y_before:function(a){return this.ytable[Math.floor(a/(this.BLOCK_LENGTH*this.LINE_LENGTH))-1]}};String.prototype.repeat=function(a){return new Array(a+1).join(this)};function annotate_sorted_range(b,v,c,e,a,m,q){var o=e.is_enzyme?"enzymelabel":"featurelabel";for(var k=b[0];k<=b[1];k++){var f=new StringBuffer();f.append("<div class='numberclass'>&nbsp;</div>");f.append("<div class='");f.append(o);f.append("bar'>");var l=k*SP.LINE_LENGTH*SP.BLOCK_LENGTH;var u=Math.max(0,v-l-1);var w=Math.min(SP.LINE_LENGTH*SP.BLOCK_LENGTH,c-l-1);u=SP.to_str_index(u);w=SP.to_str_index(w);if(u==0&&w==SP.LINE_LENGTH*SP.BLOCK_LENGTH){f.append(m)}else{if(e.is_enzyme){var x=v+e.primary_cut_index;if(e.complementary){x=c-e.complementary_cut_index+1}for(var t=0;t<SP.LINE_LENGTH;t++){var h=l+t*SP.BLOCK_LENGTH;for(var r=0;r<SP.BLOCK_LENGTH;r++){var g=h+r+1;if(g>c){break}if(g>=v){if(g<x){f.append(">")}else{f.append("<")}}else{f.append("&nbsp;")}}f.append("&nbsp;")}}else{for(var t=0;t<SP.LINE_LENGTH;t++){var h=l+t*SP.BLOCK_LENGTH;for(var r=0;r<SP.BLOCK_LENGTH;r++){var g=h+r+1;if(g>c){break}if(g>=v){f.append("~")}else{f.append("&nbsp;")}}f.append("&nbsp;")}}}f.append("</div>");var p=new StringBuffer();p.append("<div class='numberclass'>&nbsp;</div>");p.append("<div class='");p.append(o);if(q){p.append("'>")}else{p.append("' onclick='CF.click(\"");p.append(e.feature_id);p.append("\")'>")}if(!e.is_translation){var s=Math.round((u+w)/2)-Math.round((e.name.length)/2);s=Math.max(s,0);p.append("&nbsp;".repeat(s));p.append(e.name)}else{for(var t=0;t<SP.LINE_LENGTH;t++){for(var r=0;r<SP.BLOCK_LENGTH;r++){var g=k*SP.LINE_LENGTH*SP.BLOCK_LENGTH+t*SP.BLOCK_LENGTH+r+1;if(g>=v&&g<=c){var d=g-v;if(d%3==1){var n=Math.floor(d/3);p.append(e.notes.translation.charAt(n))}else{p.append("&nbsp;")}}else{p.append("&nbsp;")}}p.append("&nbsp;")}}p.append("</div>");if(a[k]==null){}if(e.complementary){a[k].push(f.toString());a[k].push(p.toString())}else{a[k].splice(0,0,f.toString());a[k].splice(0,0,p.toString())}}}function annotate_sequence(v,g,J,w){var v=v.toUpperCase();var m=new StringBuffer();var C=v.length;var H=Math.ceil(C/SP.BLOCK_LENGTH);var q=new StringBuffer();var a=new Array();SP.name=J;if(!w){var w=false}for(var z=0;z<H;z++){if(z%SP.LINE_LENGTH==0){q.append("<div class='numberclass'>");q.append(z*SP.BLOCK_LENGTH+1);q.append("&nbsp;</div><div class='sequencetext'>")}var r=z*SP.BLOCK_LENGTH;var I=Math.min(r+SP.BLOCK_LENGTH,C)-1;q.append(v.substring(r,I+1));if(z%SP.LINE_LENGTH==SP.LINE_LENGTH-1){q.append("</div>");a[Math.floor(z/SP.LINE_LENGTH)]=[q.toString()];q=new StringBuffer()}else{q.append(" ")}}if(q.toString()!=""){q.append("</div>");a[Math.floor((H-1)/SP.LINE_LENGTH)]=[q.toString()]}var l=[];for(var D=0,A=g.length;D<A;D++){var e=g[D];if(e.is_translation){l.push(e)}}for(var D=0,A=g.length;D<A;D++){var e=g[D];if(!e.is_translation){l.push(e)}}var t=[];for(var D=0,A=l.length;D<A;D++){var e=l[D];if(e.is_enzyme&&!DS.show_restrictions_in_sequence){continue}if(e.is_orf&&!DS.show_orfs_in_sequence){continue}if(e.is_translation&&!DS.show_translations_in_sequence){continue}if(!e.is_translation&&!e.is_enzyme&&!g.is_orf&&!DS.show_features_in_sequence){continue}t.push(e)}var k=new StringBuffer();for(var z=0;z<SP.LINE_LENGTH;z++){for(var y=0;y<SP.BLOCK_LENGTH;y++){k.append("~")}k.append("&nbsp;")}var s=k.toString();for(var D=0,A=t.length;D<A;D++){var e=t[D];var E=parseInt(e.sequence_start);var d=parseInt(e.sequence_end);var F=Math.floor((E-1)/(SP.LINE_LENGTH*SP.BLOCK_LENGTH));var B=Math.floor((d-1)/(SP.LINE_LENGTH*SP.BLOCK_LENGTH));var b=null;if(E<=d){b=[F,B];annotate_sorted_range(b,E,d,e,a,s,w)}else{var h=Math.floor(0/(SP.LINE_LENGTH*SP.BLOCK_LENGTH));var n=Math.floor((C-1)/(SP.LINE_LENGTH*SP.BLOCK_LENGTH));annotate_sorted_range([F,n],E,C,e,a,s,w);annotate_sorted_range([h,B],1,d,e,a,s,w)}}for(var z=0,G=Math.ceil(C/(SP.LINE_LENGTH*SP.BLOCK_LENGTH));z<G;z++){var x=a[z];for(var y=0,A=x.length;y<A;y++){m.append(x[y])}m.append("<hr/>")}var p=$(SP.name);p.innerHTML=m.toString();var c=p.getElementsByTagName("div");var u=[];for(var z=0,o=c.length;z<o;z++){if(c[z].className!="sequencetext"){continue}u.push(c[z])}SP.text_lines=u;Event.observe(window,"load",computeHeight);Event.observe(window,"resize",computeHeight)}function computeHeight(){var f=$(SP.name);var j=getSequenceLength();var d=f.getElementsByTagName("div");var h=getTop(f);for(var g=0,e=d.length;g<e;g++){if(d[g].className!="sequencetext"){continue}var b=new Element("span").update("&nbsp;");$(d[g]).appendChild(b);SP.x=getRight(d[g-1]);SP.width=getRight(d[g].lastChild)-SP.x-1;var c=Math.min(j,SP.LINE_LENGTH*SP.BLOCK_LENGTH);c=SP.to_str_index(c);SP.c_width=SP.width/c;SP.width=SP.c_width*(SP.LINE_LENGTH*(SP.BLOCK_LENGTH+1));$(d[g]).removeChild(b);break}var a=[];d=f.getElementsByTagName("hr");for(var g=0,e=d.length;g<e;g++){a.push(getTop(d[g])-h)}SP.ytable=a};