_OPS={actions:[],undo_stack:[],redo_stack:[]};function confirmExit(){return"Any changes you have made to the current sequence will be lost."}function setFeatureIds(){for(var a=0,b=features.length;a<b;a++){setFeatureId(features[a])}}function refresh(a,d,b){var c=document.getElementById("sequenceraw").innerHTML;CF=new ClickFunctions(features);annotate_sequence(c,features,SP.name);computeHeight();if(LOC.circular=="circular"){CV=generate_circle(c.length,features,"vector")}else{CV=generate_linear(c.length,features,"vector")}SE.last_highlight=[0,0];SE.selected_feature="";SE.highlight_info.innerHTML="";if(a!=null&&d!=null){SE.highlight_no_scroll(a,d);if(b!=null){SE.selected_feature=b}}}function setFeatureId(a){a.feature_id=(a.feature_type+"_"+a.sequence_start+"_"+a.sequence_end)+"_"+Math.floor(Math.random()*1000)}function addFeature(e,d,c,b,a){_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;var f={name:e,feature_type:d,sequence_start:c,sequence_end:b,complementary:a,is_translation:false,is_enzyme:false,is_orf:false};setFeatureId(f);features.push(f);refresh(c-1,b-1,f.feature_id)}function getFeatureIndex(c){var b=-1;for(var d=0,a=features.length;d<a;d++){if(features[d].feature_id==c){b=d;break}}return b}function removeFeature(b){var a=getFeatureIndex(b);if(a==-1){return}_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;var c=features[a];features.splice(a,1);SE.selected_feature="";setFlashWithUndo("Removed feature.");refresh(SE.last_highlight[0],SE.last_highlight[1])}function copyState(){var c=[];for(var b=0,a=features.length;b<a;b++){c.push(copyFeature(features[b]))}var d=$("sequenceraw").innerHTML;return{sequence:d,features:c,prop:Object.clone(PROP),loc:Object.clone(LOC),se0:SE.last_highlight[0],se1:SE.last_highlight[1]}}function restoreState(a){features=a.features;$("sequenceraw").innerHTML=a.sequence;PROP=a.prop;LOC=a.loc;refresh(a.se0,a.se1)}function copyFeature(a){var b={name:a.name,feature_type:a.feature_type,sequence_start:a.sequence_start,sequence_end:a.sequence_end,complementary:a.complementary,is_translation:a.is_translation,is_enzyme:a.is_enzyme,is_orf:a.is_orf,feature_id:a.feature_id,notes:a.notes};return b}function editFeature(g,f,e,d,b,a){var c=getFeatureIndex(g);if(c==-1){return}var h=features[c];_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;h.name=f;h.feature_type=e;h.sequence_start=d;h.sequence_end=b;h.complementary=a;h.is_orf=false;setFeatureId(h);refresh(d-1,b-1,h.feature_id)}function undo(){if(_OPS.undo_stack.length==0){return}var a=_OPS.undo_stack[_OPS.undo_stack.length-1];_OPS.redo_stack.push(copyState());_OPS.undo_stack.splice(_OPS.undo_stack.length-1,1);restoreState(a);setFlashText("Undo successful.");return}function redo(){if(_OPS.redo_stack.length==0){return}var a=_OPS.redo_stack[_OPS.redo_stack.length-1];_OPS.undo_stack.push(copyState());_OPS.redo_stack.splice(_OPS.redo_stack.length-1,1);restoreState(a);setFlashText("Redo successful.");return}function editFeaturePrep(){if(SE.selected_feature!=""){var a=getFeatureIndex(SE.selected_feature);if(a==-1){return}var b=features[a];Modalbox.show($("add_feature"),{title:"Edit Feature",width:800});$("feature_name").value=b.name;$("feature_sequence_start").value=b.sequence_start;$("feature_sequence_end").value=b.sequence_end;$("feature_feature_type").value=b.feature_type;$("feature_complementary").checked=b.complementary;var c=$("feature_submit_link");c.onclick=function(){editFeatureSubmit()};c.innerHTML="Apply Changes"}}function editFeatureSubmit(){editFeature(SE.selected_feature,$("feature_name").value,$("feature_feature_type").value,$("feature_sequence_start").value,$("feature_sequence_end").value,$("feature_complementary").checked);Modalbox.hide();setFlashWithUndo("Feature has been updated.")}function addFeaturePrep(){if(SP.text_lines.length==0){alert("Can't add a feature to an empty sequence!");return}Modalbox.show($("add_feature"),{title:"Add Feature",width:800});$("feature_name").value="New Feature";$("feature_sequence_start").value=(SE.last_highlight[0]>=0)?SE.last_highlight[0]+1:1;$("feature_sequence_end").value=(SE.last_highlight[1]>=0)?SE.last_highlight[1]+1:1;$("feature_feature_type").value="misc_feature";$("feature_complementary").checked=false;var a=$("feature_submit_link");a.onclick=function(){addFeatureSubmit()};a.innerHTML="Add Feature"}function addFeatureSubmit(){addFeature($("feature_name").value,$("feature_feature_type").value,$("feature_sequence_start").value,$("feature_sequence_end").value,$("feature_complementary").checked);setFlashWithUndo("Added feature.");Modalbox.hide()}function getSortedRanges(b,a){if(b[0]<=b[1]){return[[b[0],b[1]]]}else{return[[b[0],a],[1,b[1]]]}}function saveSortedRangesToFeature(a,b){if(b.sequence_start<=b.sequence_end){b.sequence_start=a[0][0];b.sequence_end=a[0][1]}else{b.sequence_start=a[0][0];b.sequence_end=a[1][1]}}function getRangeFromFeature(b){var a=[b.sequence_start,b.sequence_end];return a}function getSortedTuple(a){if(a.sequence_start<a.sequence_end){return[a.sequence_start,a.sequence_end]}return[a.sequence_end,a.sequence_start]}function isOverlappingSorted(b,a){var d=Math.max(b[0],a[0]);var c=Math.min(b[1],a[1]);return d<=c}function isOverlapping(d,c,b){var a=[d.sequence_start,d.sequence_end];if(a[0]<=a[1]){if(c[0]<=c[1]){return isOverlappingSorted(a,c)}else{return isOverlappingSorted(a,[c[0],b])||isOverlappingSorted(a,[1,c[1]])}}else{if(c[0]<=c[1]){return isOverlappingSorted(c,[a[0],b])||isOverlappingSorted(c,[1,a[1]])}else{return true}}}function featureBehind(a,b){return(a.sequence_start>=b[1]&&a.sequence_end>=b[1])}function featureShiftUp(a,b){a.sequence_start=a.sequence_start-b;a.sequence_end=a.sequence_end-b;setFeatureId(a)}function sortedRangeBehind(a,b){return(a[0]>=b[1]&&a[1]>=b[1])}function sortedRangeShiftUp(a,b){a[0]=a[0]-b;a[1]=a[1]-b}function rangeWithinRange(b,c,a){if(b[0]<=b[1]){if(c[0]<=c[1]){return b[0]>=c[0]&&b[1]<=c[1]}else{return(b[0]>=c[0])||(b[1]<=c[1])||(c[0]==c[1]+1)}}else{if(c[0]<=c[1]){return c[1]-c[0]+1==a}else{return b[0]>=c[0]&&b[1]<=c[1]}}}function featureWithin(d,c,b){var a=[d.sequence_start,d.sequence_end];return rangeWithinRange(a,c,b)}function rangeWithinFeature(d,c,b){var a=[d.sequence_start,d.sequence_end];return rangeWithinRange(c,a,b)}function makeCheckBoxList(e){var a=new StringBuffer();for(var d=0,c=e.length;d<c;d++){var b=e[d];a.append('<input id="feature_');a.append(b.feature_id);a.append('" checked type="checkbox"/>');a.append("&nbsp;");a.append(b.name);a.append(" ");a.append(b.sequence_start);a.append(" ");a.append(b.sequence_end);a.append("<br/>")}return a.toString()}function deleteSeqPrep(){if(SE.last_highlight[0]<0||SE.last_highlight[1]<0){return}var b=[SE.last_highlight[0]+1,SE.last_highlight[1]+1];var h=[];var g=[];var a=$("sequenceraw").innerHTML.length;for(var f=0,e=features.length;f<e;f++){var d=features[f];if(isOverlapping(d,b,a)){if(featureWithin(d,b,a)||d.is_translation){g.push(d)}else{h.push(d)}}}var c=new StringBuffer();if(h.length>0){c.append("<p>The following features are affected by the deletion.  Please select the features you would like to keep:</p>");c.append(makeCheckBoxList(h))}handleForcedDelete(g,c);$("delete_keep").innerHTML=c.toString();Modalbox.show($("delete_sequence"),{title:"Delete Sequence",width:800})}function handleForcedDelete(e,a){if(e.length>0){a.append("<p>The following features will be removed:");for(var d=0,c=e.length;d<c;d++){var b=e[d];a.append("<br/>");a.append(e[d].name);a.append(" ");a.append(e[d].sequence_start);a.append(" ");a.append(e[d].sequence_end);a.append('<input id="feature_');a.append(b.feature_id);a.append('" type="hidden" value="0"/>')}a.append("</p>")}}function deleteSeqSubmit(){var d=$("delete_keep").getElementsByTagName("input");var f=[];var c=[];var e="feature_";for(var b=0,a=d.length;b<a;b++){if(d[b].checked==1){f.push(d[b].id.substring(e.length))}else{c.push(d[b].id.substring(e.length))}}deleteSeq(SE.last_highlight[0],SE.last_highlight[1],f,c);Modalbox.hide();setFlashWithUndo("Delete selected sequence.")}function deleteSeq(x,c,t,s){_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;for(var z=0,m=s.length;z<m;z++){var h=getFeatureIndex(s[z]);if(h==-1){return}features.splice(h,1)}var n=[x+1,c+1];var e=n[1]-n[0]+1;var q=$("sequenceraw").innerHTML.length;var d=getSortedRanges(n,q);for(var z=0,m=t.length;z<m;z++){var h=getFeatureIndex(t[z]);if(h==-1){return}var f=features[h];var a=getRangeFromFeature(f);var r=getSortedRanges(a,q);function g(k,j,i){var A=k[1]-k[0]+1;if(!isOverlappingSorted(k,j)){return}if(rangeWithinRange(k,j,i)){if(j[1]>=k[1]){j[1]-=A}}else{if(j[0]>=k[1]||j[1]>=k[1]){j[0]=Math.max(j[0],k[1]+1);j[1]=Math.max(j[1],k[1]+1)}if(j[0]<=k[0]||j[1]<=k[0]){j[0]=Math.min(j[0],k[0]-1);j[1]=Math.min(j[1],k[0]-1)}}}if(r.length==1){if(d.length==1){g(d[0],r[0],q)}else{g(d[0],r[0],q);g(d[1],r[0],q)}}else{if(d.length==1){g(d[0],r[0],q);g(d[0],r[1],q)}else{g(d[0],r[0],q);g(d[1],r[1],q)}}saveSortedRangesToFeature(r,f);setFeatureId(f)}for(var z=0,m=features.length;z<m;z++){var f=features[z];var a=getRangeFromFeature(f);var r=getSortedRanges(a,q);for(var y=0,p=r.length;y<p;y++){for(var w=0,v=d.length;w<v;w++){var l=r[y];var b=d[w];if(isOverlappingSorted(b,l)){continue}if(sortedRangeBehind(l,b)){var o=b[1]-b[0]+1;sortedRangeShiftUp(l,o)}}}saveSortedRangesToFeature(r,f);setFeatureId(f)}var u=$("sequenceraw").innerHTML;if(x<=c){u=u.substring(0,x)+u.substring(c+1)}else{u=u.substring(c+1,x)}$("sequenceraw").innerHTML=u;refresh(SE.last_highlight[0],SE.last_highlight[0])}function insertSeqPrep(){if(SE.last_highlight[0]<0){return}Modalbox.show($("insert_sequence"),{title:"everyVECTOR",width:800});var c=SP.to_line(SE.last_highlight[0]);var k="(Empty sequence)";if(SP.text_lines.length>0){var k=SP.text_lines[c].innerHTML;var g=SP.to_str_index(SE.last_highlight[0]%(SP.LINE_LENGTH*SP.BLOCK_LENGTH));var j=g;k=k.replace(/<[^>]*>/g,"");k=k.substring(0,g)+"<span class='highlight'>"+k.substring(g,j+1)+"</span>"+k.substring(j+1)}$("backbone_sequence_container").innerHTML='<span class="sequence_text">...'+k+"...</span>";var f=[SE.last_highlight[0]+1,SE.last_highlight[0]+1];var d=[];var h=[];var l=$("sequenceraw").innerHTML.length;for(var e=0,b=features.length;e<b;e++){var m=features[e];if(isOverlapping(m,f,l)){if(m.is_translation){h.push(m)}else{d.push(m)}}}var a=new StringBuffer();if(d.length>0){a.append("<p>The following features may be affected by the insertion.  Please select the features you would like to keep:</p>");a.append(makeCheckBoxList(d))}handleForcedDelete(h,a);$("insert_keep").innerHTML=a.toString()}function insertSeqSubmit(){var d=$("insert_keep").getElementsByTagName("input");var g=[];var c=[];var f="feature_";for(var b=0,a=d.length;b<a;b++){if(d[b].checked==1){g.push(d[b].id.substring(f.length))}else{c.push(d[b].id.substring(f.length))}}var e=($("insertion_point_before").checked)?true:false;pasteSeq(SE.last_highlight[0],e,$("insert_sequence_input_textbox").value,[],g,c);Modalbox.hide();setFlashWithUndo("Sequence inserted.")}Array.prototype.contains=function(b){var a=this.length;while(a--){if(this[a]===b){return true}}return false};function getRemainingFeatures(e){var d=[];for(var c=0,b=features.length;c<b;c++){var a=features[c];if(!e.contains(a.feature_id)){d.push(a)}}return d}function cleanCharacters(b,a){if(a.toUpperCase()=="DNA"){b=b.toLowerCase();b=b.replace(/[^atgcrymkdhvbswn]/g,"n")}else{if(a.toUpperCase()=="RNA"||a.toUpperCase()=="MRNA"){b=b.toLowerCase();b=b.replace(/[^augcrymkdhvbswn]/g,"n")}else{b=b.toUpperCase();b=b.replace(/[^A-Z\*-]/g,"X")}}return b}function rc(b){var a=LOC.natype=="DNA";if(a){b=b.replace(/a/g,"T");b=b.replace(/t/g,"A");b=b.replace(/g/g,"C");b=b.replace(/c/g,"G");b=b.replace(/r/g,"Y");b=b.replace(/y/g,"R");b=b.replace(/m/g,"K");b=b.replace(/k/g,"M");b=b.replace(/d/g,"H");b=b.replace(/h/g,"D");b=b.replace(/v/g,"B");b=b.replace(/b/g,"V");b=b.replace(/s/g,"S");b=b.replace(/w/g,"W");b=b.replace(/n/g,"N")}else{b=b.replace(/a/g,"U");b=b.replace(/u/g,"A");b=b.replace(/g/g,"C");b=b.replace(/c/g,"G");b=b.replace(/r/g,"Y");b=b.replace(/y/g,"R");b=b.replace(/m/g,"K");b=b.replace(/k/g,"M");b=b.replace(/d/g,"H");b=b.replace(/h/g,"D");b=b.replace(/v/g,"B");b=b.replace(/b/g,"V");b=b.replace(/s/g,"S");b=b.replace(/w/g,"W");b=b.replace(/n/g,"N")}b=b.split("").reverse().join("");return b.toLowerCase()}function rcSeqPrep(){if(SE.last_highlight[0]<0||SE.last_highlight[1]<0){return}var b=[SE.last_highlight[0]+1,SE.last_highlight[1]+1];var h=[];var g=[];var a=$("sequenceraw").innerHTML.length;for(var f=0,e=features.length;f<e;f++){var d=features[f];if(isOverlapping(d,b,a)){if(d.is_translation){g.push(d)}else{h.push(d)}}}var c=new StringBuffer();if(h.length>0){c.append("<p>The following features are affected by the reverse complement.  Please select the features you would like to keep:</p>");c.append(makeCheckBoxList(h))}handleForcedDelete(g,c);$("rc_keep").innerHTML=c.toString();Modalbox.show($("rc_sequence"),{title:"Reverse Complement Sequence",width:800})}function rcSeqSubmit(){if(SP.text_lines.length==0){alert("Can't reverse complement an empty sequence!");return}var d=$("rc_keep").getElementsByTagName("input");var f=[];var c=[];var e="feature_";for(var b=0,a=d.length;b<a;b++){if(d[b].checked==1){f.push(d[b].id.substring(e.length))}else{c.push(d[b].id.substring(e.length))}}rcSeq(SE.last_highlight[0],SE.last_highlight[1],f,c);Modalbox.hide();setFlashWithUndo("Reverse complemented sequence.")}function rcSeq(l,m,j,n){_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;for(var c=0,b=n.length;c<b;c++){var f=getFeatureIndex(n[c]);if(f==-1){return}features.splice(f,1)}var k=getSequenceLength();var d=[l+1,m+1];for(var c=0,b=j.length;c<b;c++){var f=getFeatureIndex(j[c]);if(f==-1){return}var o=features[f];if(featureWithin(o,d,k)){o.complementary=!o.complementary}}var h=$("sequenceraw").innerHTML;if(l<=m){h=h.substring(0,l)+rc(h.substring(l,m+1))+h.substring(m+1)}else{var a=h.substring(l);var g=h.substring(0,m+1);var e=rc(a+g);h=e.substring(a.length)+h.substring(m+1,l)+e.substring(0,a.length)}$("sequenceraw").innerHTML=h;refresh(l,m)}function translateSeqSubmit(){if(SP.text_lines.length==0){Modalbox.hide();alert("Can't translate an empty sequence!");return}var g=null;var f=$("use_rc").checked;if(f){g=$("candidate_translation_rc").value}else{g=$("candidate_translation").value}var d=[SE.last_highlight[0]+1,SE.last_highlight[1]+1];var b=$("sequenceraw").innerHTML.length;if($("add_to_sequence").checked&&g.length>0){_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;var c=-1;var a=-1;if(f){c=d[1]-3*g.length+1;a=d[1];if(c<1){c=c+b}}else{c=d[0];a=d[0]+3*g.length-1;if(a>b){a=a-b}}var e={name:"Amino acid translation",feature_type:"misc_feature",sequence_start:c,sequence_end:a,complementary:f,is_translation:true,is_enzyme:false,notes:{translation:g}};setFeatureId(e);features.push(e);refresh(e.sequence_start-1,e.sequence_end-1);setFlashWithUndo("Added translation.")}if($("save_sequence").checked){saveTranslation(f?g.reverse():g,$("amino_acid_name").value,$("amino_acid_folder_id").value)}Modalbox.hide()}function pasteSeq(v,a,m,l,t,s){var r=getRemainingFeatures(s.concat(t));m=cleanCharacters(m,LOC.natype);_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;for(var x=0,k=s.length;x<k;x++){var f=getFeatureIndex(s[x]);if(f==-1){return}features.splice(f,1)}var n=[v+1,v+1];var c=m.length;var p=$("sequenceraw").innerHTML.length;for(var x=0,k=t.length;x<k;x++){var f=getFeatureIndex(t[x]);if(f==-1){return}var e=features[f];var b=getRangeFromFeature(e);var q=getSortedRanges(b,p);for(var w=0,o=q.length;w<o;w++){var h=q[w];if(!isOverlappingSorted(n,h)){continue}if(h[0]==n[0]&&a){sortedRangeShiftUp(h,-c)}else{if(h[1]==n[0]&&!a){}else{if(h[0]<n[0]){h[1]+=c}}}}saveSortedRangesToFeature(q,e);setFeatureId(e)}for(var x=0,k=r.length;x<k;x++){var e=r[x];var b=getRangeFromFeature(e);var q=getSortedRanges(b,p);for(var w=0,o=q.length;w<o;w++){var h=q[w];if(sortedRangeBehind(h,n)){sortedRangeShiftUp(h,-c)}}saveSortedRangesToFeature(q,e);setFeatureId(e)}var u=$("sequenceraw").innerHTML;if(a){u=u.substring(0,v)+m+u.substring(v)}else{u=u.substring(0,v+1)+m+u.substring(v+1)}$("sequenceraw").innerHTML=u;for(var x=0,c=l.length;x<c;x++){var g=l[x];var d=v;if(!a){d=v+1}g.sequence_start+=d+1;g.sequence_end+=d+1;setFeatureId(g);features.push(g)}if(a){refresh(v,v+m.length-1)}else{refresh(v+1,v+1+m.length-1)}}function restriction(c){_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;var a=[];for(var b=0,d=features.length;b<d;b++){if(!features[b].is_enzyme){a.push(features[b])}}if(!DS.show_restrictions_in_graphics&&!DS.show_restrictions_in_sequence){DS.show_restrictions_in_graphics=true;DS.show_restrictions_in_sequence=true}features=a.concat(c);refresh()}function getCheckedValue(b){if(!b){return""}var c=b.length;if(c==undefined){if(b.checked){return b.value}else{return""}}for(var a=0;a<c;a++){if(b[a].checked){return b[a].value}}return""}function setCheckedValue(b,d){if(!b){return}var c=b.length;if(c==undefined){b.checked=(b.value==d.toString());return}for(var a=0;a<c;a++){b[a].checked=false;if(b[a].value==d.toString()){b[a].checked=true}}}function editPropertiesPrep(){Modalbox.show($("edit_properties"),{title:"Sequence properties",width:800});var c=$("locus_form");if(c!=null){var b=c["locus[natype]"];var a=c["locus[circular]"];var d=LOC.natype;if(LOC.natype=="mRNA"){d="RNA"}setCheckedValue(b,d);setCheckedValue(a,LOC.circular)}$("prop_comments").value=PROP.comments;$("prop_keywords").value=PROP.keywords}function editPropertiesSubmit(){_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;var c=$("locus_form");if(c!=null){var b=c["locus[natype]"];var a=c["locus[circular]"];old_natype=LOC.natype;LOC.natype=getCheckedValue(b);LOC.circular=getCheckedValue(a);if(LOC.natype!=old_natype){if(LOC.natype=="RNA"||LOC.natype=="mRNA"){var d=$("sequenceraw").innerHTML;d=d.replace(/t/g,"u");$("sequenceraw").innerHTML=d}else{if(LOC.natype=="DNA"){var d=$("sequenceraw").innerHTML;d=d.replace(/u/g,"t");$("sequenceraw").innerHTML=d}}}}PROP.comments=$("prop_comments").value;PROP.keywords=$("prop_keywords").value;refresh(SE.last_highlight[0],SE.last_highlight[1],SE.selected_feature);Modalbox.hide();setFlashWithUndo("Edited sequence properties.")}function editDisplaySettingsPrep(){Modalbox.show($("display_settings"),{title:"Display Settings",width:800});$("show_features_in_sequence").checked=DS.show_features_in_sequence;$("show_features_in_graphics").checked=DS.show_features_in_graphics;if($("show_restrictions_in_sequence")!=null){$("show_restrictions_in_sequence").checked=DS.show_restrictions_in_sequence}if($("show_translations_in_sequence")!=null){$("show_translations_in_sequence").checked=DS.show_translations_in_sequence}if($("show_restrictions_in_graphics")!=null){$("show_restrictions_in_graphics").checked=DS.show_restrictions_in_graphics}if($("show_orfs_in_sequence")!=null){$("show_orfs_in_sequence").checked=DS.show_orfs_in_sequence}if($("show_orfs_in_graphics")!=null){$("show_orfs_in_graphics").checked=DS.show_orfs_in_graphics}}function editDisplaySettingsSubmit(){DS.show_features_in_sequence=$("show_features_in_sequence").checked;DS.show_features_in_graphics=$("show_features_in_graphics").checked;if($("show_restrictions_in_sequence")!=null){DS.show_restrictions_in_sequence=$("show_restrictions_in_sequence").checked}if($("show_translations_in_sequence")!=null){DS.show_translations_in_sequence=$("show_translations_in_sequence").checked}if($("show_restrictions_in_graphics")!=null){DS.show_restrictions_in_graphics=$("show_restrictions_in_graphics").checked}if($("show_orfs_in_sequence")!=null){DS.show_orfs_in_sequence=$("show_orfs_in_sequence").checked}if($("show_orfs_in_graphics")!=null){DS.show_orfs_in_graphics=$("show_orfs_in_graphics").checked}refresh(SE.last_highlight[0],SE.last_highlight[1],SE.selected_feature);Modalbox.hide()}function copy(h){if(SE.last_highlight[0]<0||SE.last_highlight[1]<0){return}var a=[SE.last_highlight[0]+1,SE.last_highlight[1]+1];var g=getSequenceSelection();var f=[];for(var d=0,c=features.length;d<c;d++){var b=features[d];if(featureWithin(b,a)&&!b.is_enzyme){_feature=copyFeature(b);_feature.sequence_start=_feature.sequence_start-a[0];_feature.sequence_end=_feature.sequence_end-a[0];if(_feature.sequence_end<0){_feature.sequence_end=_feature.sequence_end+getSequenceLength()}f.push(_feature)}}var e=encodeURIComponent(Object.toJSON(f));new Ajax.Updater("script_box",h,{asynchronous:true,evalScripts:true,parameters:"name="+encodeURIComponent(NAME+" "+a[0]+"-"+a[1])+"&sequence="+encodeURIComponent(g)+"&features="+e+"&res_type="+RES_TYPE+"&authenticity_token="+AUTHENTICITY_TOKEN})}function update_export_form(){$("export_sequence").value="";$("export_name").value=NAME;$("export_features").value=Object.toJSON(features);$("export_locus").value=Object.toJSON(LOC);$("export_prop").value=Object.toJSON(PROP);$("export_display_settings").value=Object.toJSON(DS);$("export_sequence_length").value=$("sequenceraw").innerHTML.length}function print_sequence(a){update_export_form();$("export_sequence").value=$("sequenceraw").innerHTML;$("export_form").action=a;$("export_form").submit()}function save_svg(a){update_export_form();$("export_form").action=a;$("export_form").submit()}function save_png(a){update_export_form();$("export_form").action=a;$("export_form").submit()}function save_genbank(a){update_export_form();$("export_sequence").value=$("sequenceraw").innerHTML;$("export_form").action=a;$("export_form").submit()}function saveasSubmit(){var e=$("sequenceraw").innerHTML;var b=Object.toJSON(features);var a=Object.toJSON(LOC);var d=Object.toJSON(PROP);var c=Object.toJSON(DS);$("save_sequence").value=e;$("save_features").value=b;$("save_locus").value=a;$("save_prop").value=d;$("save_display_settings").value=c;$("sequence_form").submit()}function pastePrep(a){if(SE.last_highlight[0]<0){return}Modalbox.show(a+"?res_type="+RES_TYPE,{title:"everyVECTOR",width:800})}function pastePrep2(){var c=SP.to_line(SE.last_highlight[0]);var k="(Empty sequence)";if(SP.text_lines.length>0){k=SP.text_lines[c].innerHTML;var g=SP.to_str_index(SE.last_highlight[0]%(SP.LINE_LENGTH*SP.BLOCK_LENGTH));var j=g;k=k.replace(/<[^>]*>/g,"");k=k.substring(0,g)+"<span class='highlight'>"+k.substring(g,j+1)+"</span>"+k.substring(j+1)}$("backbone_sequence_container").innerHTML='<span class="sequence_text">...'+k+"...</span>";var f=[SE.last_highlight[0]+1,SE.last_highlight[0]+1];var d=[];var h=[];var l=$("sequenceraw").innerHTML.length;for(var e=0,b=features.length;e<b;e++){var m=features[e];if(isOverlapping(m,f,l)){if(m.is_translation){h.push(m)}else{d.push(m)}}}var a=new StringBuffer();if(d.length>0){a.append("<p>The following features may be affected by the paste.  Please select the features you would like to keep:</p>");a.append(makeCheckBoxList(d))}handleForcedDelete(h,a);$("paste_keep").innerHTML=a.toString();Modalbox.resizeToContent()}function pasteSeqSubmit(d){var b=$("clipboard_form")["selected_clipboard_item"];if(!b){Modalbox.hide();setFlashText("Nothing to paste!");return}if(!b.length){var c=b;new Ajax.Updater("script_box",d,{asynchronous:true,evalScripts:true,parameters:"clipboard_item="+c.value+"&authenticity_token="+AUTHENTICITY_TOKEN});return}for(var a=0;a<b.length;a++){var c=b[a];if(c.checked){new Ajax.Updater("script_box",d,{asynchronous:true,evalScripts:true,parameters:"clipboard_item="+c.value+"&authenticity_token="+AUTHENTICITY_TOKEN});break}}}function save(f){var e=$("sequenceraw").innerHTML;var b=encodeURIComponent(Object.toJSON(features));var a=encodeURIComponent(Object.toJSON(LOC));var d=encodeURIComponent(Object.toJSON(PROP));var c=encodeURIComponent(Object.toJSON(DS));window.onbeforeunload=null;new Ajax.Updater("script_box",f,{asynchronous:true,evalScripts:true,parameters:"sequence="+e+"&features="+b+"&locus="+a+"&prop="+d+"&display_settings="+c+"&authenticity_token="+AUTHENTICITY_TOKEN})}function revert_to_saved(){window.onbeforeunload=null;location.reload(true)}function setFlashWithUndo(a){setFlashText(a+" <a href='#' onclick='undo(); return false;'>Undo</a>")}function selectTranslation(){if($("use_rc").checked){$("candidate_translation").hide();$("candidate_translation_rc").show()}else{$("candidate_translation").show();$("candidate_translation_rc").hide()}}function blastAll(){$("blast_sequence").value=$("sequenceraw").innerHTML;$("blast_form").submit()}function blastSelection(){$("blast_sequence").value=getSequenceSelection();$("blast_form").submit()}function sendCopy(a){if(window.onbeforeunload!=null){alert("You probably want to save this document before sending a copy of it.");return}Modalbox.show(a,{title:"everyVECTOR",width:800,params:("account_action=send_copy&check_"+RES_ID+"=1&authenticity_token="+AUTHENTICITY_TOKEN),method:"post"})}function publish(a){Modalbox.show(a,{title:"everyVECTOR",width:800,params:("account_action=publish&check_"+RES_ID+"=1&authenticity_token="+AUTHENTICITY_TOKEN),method:"post"})}function updateEnzymeInfo(a){var b=a.options[a.selectedIndex].value;$("enzyme_name").innerHTML=b;$("enzyme_cut_info_box").innerHTML=ENZYMES[b][0]+"<br/>"+ENZYMES[b][1]}function selectAllFromSelect(a){for(var c=0,b=a.options.length;c<b;c++){a.options[c].selected=true}a.focus();return false}function findORFPrep(){Modalbox.show($("find_orfs"),{title:"Find ORFs"})}Array.prototype.min=function(){return Math.min.apply({},this)};function findORFSubmit(){_OPS.undo_stack.push(copyState());_OPS.redo_stack=[];window.onbeforeunload=confirmExit;var h=$("orf_start_codons").value.toUpperCase().split(" ");var a=$("orf_end_codons").value.toUpperCase().split(" ");var b=parseInt($("orf_min_length").value);var j=$("sequenceraw").innerHTML;new_features=[];for(var e=0,c=features.length;e<c;e++){if(features[e].is_orf!=true){new_features.push(features[e])}}features=new_features;var g=findORFsInSequence(h,a,b,j);features=features.concat(g);for(var e=0;e<h.length;e++){h[e]=rc(h[e]).split("").reverse().join("")}for(var e=0;e<a.length;e++){a[e]=rc(a[e]).split("").reverse().join("")}var f=findORFsInSequence(h,a,b,rc(j));for(var e=0;e<f.length;e++){var d=f[e].sequence_start;f[e].sequence_start=j.length-f[e].sequence_end+1;f[e].sequence_end=j.length-d+1;f[e].complementary=true}features=features.concat(f);if(!DS.show_orfs_in_graphics&&!DS.show_orfs_in_sequence){DS.show_orfs_in_graphics=true;DS.show_orfs_in_sequence=true}refresh(SE.last_highlight[0],SE.last_highlight[1],SE.selected_feature);setFlashWithUndo("Completed ORF search.");Modalbox.hide();return false}function findORFsInSequence(r,x,q,b){var u=[];for(var v=0;v<r.length;v++){var n=r[v];if(n.length==3){u.push(n)}}u=new RegExp("("+u.join("|")+")","ig");var m=[];for(var v=0;v<x.length;v++){var a=x[v];if(a.length==3){m.push(a)}}m=new RegExp("("+m.join("|")+")","ig");var w=b.replace(u,"!@#");var k=b.replace(m,"!@#");var h=0;var f=[];while(h<b.length){h=w.indexOf("!@#",h);if(h!=-1){f.push(h)}else{break}h++}var l=[];h=0;while(h<b.length){h=k.indexOf("!@#",h);if(h!=-1){l.push(h)}else{break}h++}var p=[];var o=-1;var s=-1;var c=new Hash();for(var v=0;v<f.length;v++){var e=f[v];var d=-1;for(var t=0;t<l.length;t++){if(l[t]>f[v]&&((l[t]-f[v])%3)==0){d=l[t];break}}if(d!=-1&&d>=e+q){if(o!=-1&&c.get(d)==true){continue}var g={name:"ORF",feature_type:"misc_feature",sequence_start:e+1,sequence_end:d,complementary:false,is_translation:false,is_enzyme:false,is_orf:true};setFeatureId(g);p.push(g);o=e;s=d;c.set(d,true)}}return p};