// Операции с нуклеотидной последовательностью

nucleotides = new Array("a","A","g","G","c","C","t","T","n","N"," ","s","S","w","W","r","R","y","Y","m","M","k","K","h","H","b","B","d","D","v","V");

complement = new Array("t","T","c","C","g","G","a","A","n","N"," ","s","S","w","W","y","Y","r","R","k","K","m","M","d","D","v","V","h","H","b","B");

function ut()
{
// забираем значения, заданные в форме
name_seq = document.sequt.s_name.value;
str = document.sequt.str.value;
var nl = parseFloat(document.sequt.nl.value); 
if(isNaN(nl)){alert(alt12_01); document.sequt.nl.focus(); return true;};
nl = Math.floor(Math.abs(nl));
document.sequt.nl.value = nl;


// приводим "str" к стандартному виду который будет называться "nseq"
var nseq = "";
nseq = str.replace(/[.\xB7]/g," ");
nseq = nseq.replace(/[^aAgGcCtTuUsSwWrRyYmMkKhHbBdDvVnN ]/g,"");
if(document.sequt.ftnt[0].checked) {nseq = nseq.toLowerCase()}
if(document.sequt.ftnt[1].checked) {nseq = nseq.toUpperCase()}
if(document.sequt.gap[0].checked) {nseq = nseq.replace(/ /g,"")}
else {lnseq_wo=nseq.replace(/ /g,"").length;
} //  end if
if(document.sequt.u_t[0].checked) {
nseq = nseq.replace(/u/g,"t");
nseq = nseq.replace(/U/g,"T");
nucleotides[6] = "t";
nucleotides[7] = "T";
complement[0] = "t";
complement[1] = "T";
} else {
nseq = nseq.replace(/t/g,"u");
nseq = nseq.replace(/T/g,"U");
nucleotides[6] = "u";
nucleotides[7] = "U";
complement[0] = "u";
complement[1] = "U";
} // end if

lnseq = nseq.length;
if(lnseq<3){alert(alt12_02); document.sequt.str.focus(); return true;};

// проверяем, что какие-то преобразования выбраны
if(!(document.sequt.meth0.checked || document.sequt.meth1.checked || document.sequt.meth2.checked || document.sequt.meth3.checked || document.sequt.meth4.checked)) {alert(alt12_03); document.sequt.meth0.focus(); return true;};

// открываем окно 
id = window.open('','sequtil', config='height=500,width=600,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,location=no,status=no');
id.document.write("<title>&nbsp;&nbsp;&nbsp;Sequence Utilities&nbsp;&nbsp;&nbsp;</title><BODY BGCOLOR='white'>");
id.focus();
nstrings = Math.floor(lnseq/nl);

// выводим исходную последовательность
if(document.sequt.meth0.checked) {
i1 = 0;
out0_seq = "";
while(i1<nstrings+1) { i1++; out0_seq = out0_seq + nseq.substring(i1*nl-nl, i1*nl)+"<br>";}
id.document.write("<h4>Initial sequence in 5' --&gt; 3' direction:</h4><TT><pre>");
id.document.write("&gt;" + name_seq + "  -  " + lnseq + " nucleotides");
if(document.sequt.gap[1].checked) {lngap = lnseq - lnseq_wo;
out0_seq=out0_seq.replace(/ /g,"&middot;");
id.document.write("(" + lnseq_wo + ") and gaps(" + lngap +")")}; // end if
id.document.write("<br><font color=#808080>");
id.document.write(out0_seq);
id.document.write("</pre></TT></font>");
}

if(document.sequt.meth1.checked || document.sequt.meth2.checked) {
i2 = 0;
r_seq = "";
while(i2<lnseq+1) { i2++; r_seq = r_seq + nseq.charAt(lnseq - i2 + 1)}
}

// выводим последовательность в обратном направлении
if(document.sequt.meth1.checked) {
i3 = 0;
out1_seq = "";
while(i3<nstrings+1) { i3++; out1_seq = out1_seq + r_seq.substring(i3*nl-nl, i3*nl)+"<br>";}
id.document.write("<h4>Initial sequence in the opposite direction (3' --&gt; 5'):</h4><TT><pre>");
id.document.write("&lt; (3' --&gt; 5') " + name_seq + "  -  " + lnseq + " nucleotides");
if(document.sequt.gap[1].checked) {lngap = lnseq - lnseq_wo;
out1_seq=out1_seq.replace(/ /g,"&middot;");
id.document.write("(" + lnseq_wo + ") and gaps(" + lngap +")")}; // end if
id.document.write("<br><font color='Gray'>");
id.document.write(out1_seq);
id.document.write("</pre></TT></font>");
}

// выводим комплементарную последовательность в 5' -- 3' направлении
if(document.sequt.meth2.checked) {
i4 = 0;
c_seq = "";
while(i4<lnseq+1) { 
	i4++; i5 = 0;
	while(i5<31) {i5++; if(r_seq.substring(i4-1,i4)==nucleotides[i5-1]) {c_seq = c_seq + complement[i5-1]; break};}
}
i6 = 0;
out2_seq = "";
while(i6<nstrings+1) { i6++; out2_seq = out2_seq + c_seq.substring(i6*nl-nl, i6*nl)+"<br>";}

id.document.write("<h4>Complementary sequence in 5' --&gt; 3' direction:</h4><TT><pre>");
id.document.write("&gt; (5' --&gt; 3' complementary sequence) " + name_seq + "  -  " + lnseq + " nucleotides");
if(document.sequt.gap[1].checked) {lngap = lnseq - lnseq_wo;
out2_seq=out2_seq.replace(/ /g,"&middot;");
id.document.write("(" + lnseq_wo + ") and gaps(" + lngap +")")}; // end if
id.document.write("<br><font color='Gray'>");
id.document.write(out2_seq);
id.document.write("</pre></TT></font>");
}


if(document.sequt.meth3.checked || document.sequt.meth4.checked) {
i7 = 0;
cr_seq = "";
while(i7<lnseq+1) { 
	i7++; i8 = 0;
	while(i8<31) {i8++; if(nseq.substring(i7-1,i7)==nucleotides[i8-1]) {cr_seq = cr_seq + complement[i8-1]; break};}
}
}

// выводим комплементарную последовательность в 3' -- 5' направлении
if(document.sequt.meth3.checked) {

i9 = 0;
out3_seq = "";
while(i9<nstrings+1) { i9++; out3_seq = out3_seq + cr_seq.substring(i9*nl-nl, i9*nl)+"<br>";}

id.document.write("<h4>Complementary sequence in the opposite direction (3' --&gt; 5'):</h4><TT><pre>");
id.document.write("&lt; (3' --&gt; 5' complementary sequence) " + name_seq + "  -  " + lnseq + " nucleotides");
if(document.sequt.gap[1].checked) {lngap = lnseq - lnseq_wo;
out3_seq=out3_seq.replace(/ /g,"&middot;");
id.document.write("(" + lnseq_wo + ") and gaps(" + lngap +")")}; // end if
id.document.write("<br><font color='Gray'>");
id.document.write(out3_seq);
id.document.write("</pre></TT></font>");
}

// выводим двухцепочечную последовательность
if(document.sequt.meth4.checked) {
id.document.write("<h4>Double stranded sequence:</h4><TT><pre>");
id.document.write("&lt; " + name_seq + "  -  " + lnseq + " nucleotides");
if(document.sequt.gap[1].checked) {lngap = lnseq - lnseq_wo;
id.document.write("(" + lnseq_wo + ") and gaps(" + lngap +")")}; // end if
id.document.write("<br><font color='Gray'>")
i9 = 0;
while(i9<nstrings+1) { i9++; 
id.document.write(nseq.substring(i9*nl-nl, i9*nl).replace(/ /g,"&middot;")+"<br>");
id.document.write(cr_seq.substring(i9*nl-nl, i9*nl).replace(/ /g,"&middot;")+"<br><br><br>");
}
id.document.write("</pre></TT></font>");
}

// закрываем окно 
id.document.write("</body></html>");
id.document.close();

}