if (top.location != self.location) top.location = self.location; // global functions var seedval = 0; var compval = 0; var dform = document.forms["seqIn"]; // function main option (just enable or disable) function chMd() { for (var i = 0; i < dform.AU.length; i++) { dform.AU[i].checked = false; } dform.AU[2].disabled = true; dform.AU[3].disabled = true; dform.AU[4].disabled = true; dform.AU[5].disabled = true; for (var i = 0; i < dform.elements.length; i++) { if (dform.elements[i].value == "perfect" && dform.elements[i].checked == true) { dform.seed.disabled = true; dform.comp.disabled = true; } else if (dform.elements[i].value == "bulge" && dform.elements[i].checked == true) { dform.seed.disabled = true; dform.comp.disabled = true; dform.AU[2].disabled = false; dform.AU[4].disabled = false; dform.AU[5].disabled = false; } else if (dform.elements[i].value == "personal" && dform.elements[i].checked == true) { dform.seed.disabled = false; dform.comp.disabled = false; for (var j = 0; j < dform.AU.length; j++) { dform.AU[j].disabled = false; } } } } // function seed design (enable or disable and assign seedval) function chMd1() { for (var i = 0; i < dform.AU.length; i++) { dform.AU[i].checked = false; } dform.AU[2].disabled = false; dform.AU[3].disabled = false; dform.AU[4].disabled = false; dform.AU[5].disabled = false; dform.mis.disabled = true; var seed1 = document.seqIn.seed.selectedIndex; seedval = document.seqIn.seed.options[seed1].value; if (seedval == "7merA1") { dform.AU[2].disabled = true; } else if (seedval == "7merm8") { dform.AU[3].disabled = true; } else if (seedval == "8mer") { dform.AU[2].disabled = true; dform.AU[3].disabled = true; } else if (seedval == "custom") { dform.mis.disabled = false; } } // function supplementary design (enable or disable and compval assignment) function chMd2() { dform.match.disabled = true; var comp1 = document.seqIn.comp.selectedIndex; compval = document.seqIn.comp.options[comp1].value; if (compval == "custom") { dform.match.disabled = false; } } function chMd3() { var elements3 = document.getElementsByName("stickyends"); for (var i = 0; i <= elements3.length; i++) { if (elements3[i].value == "custom") { dform.end5.disabled = false; dform.end3.disabled = false; } else { dform.end5.value = ""; dform.end3.value = ""; dform.end5.disabled = true; dform.end3.disabled = true; } } } // function to convert U into T and remove strange characters function cleaning(str) { str = str.replace (/[().,?! _\s,]/g, ""); str = str.replace (/[0-9]/g, ""); str = str.toUpperCase(); var mi_array = new Array(); mi_array = str.split(''); var result = new Array(); var n = 0; for (n == 0; n < str.length; n++) { if (mi_array[n] == "U") { mi_array[n] = "T"; } result.push(mi_array[n]); } result = result.join(""); return (result); } // function to create complementary function comp(str) { var mi_array = new Array(); mi_array = str.split(''); var complementary = new Array(); var n = 0; for (n == 0; n < str.length; n++) { if (mi_array[n] == "A") { mi_array[n] = "T"; } else if (mi_array[n] == "T") { mi_array[n] = "A"; } else if (mi_array[n] == "C") { mi_array[n] = "G"; } else if (mi_array[n] == "G") { mi_array[n] = "C"; } complementary.push(mi_array[n]); } complementary = complementary.join(""); return (complementary); } // function to create reverse complementary function revcomp(str) { revcomplementary = str.split('').reverse().join(''); revcomplementary = comp(revcomplementary); return (revcomplementary); } // function to create mismatches function mismatcher(str) { var mi_array = new Array(); mi_array = str.split(''); var random = new Array(); var n = 0; for (n == 0; n < str.length; n++) { if (mi_array[n] == "A") { mi_array[n] = "G"; } else if (mi_array[n] == "T") { mi_array[n] = "C"; } else if (mi_array[n] == "C") { mi_array[n] = "T"; } else if (mi_array[n] == "G") { mi_array[n] = "A"; } random.push(mi_array[n]); } random = random.join(""); return (random); } // function to show results function showDiv(res1,res2,res3,res4) { document.getElementById('resultdiv').style.display='block'; document.getElementById('NamA').innerHTML = res1; document.getElementById('seqA').innerHTML = res2; document.getElementById('NamB').innerHTML = res3; document.getElementById('seqB').innerHTML = res4; } // MAIN FUNCTION. When button Go! is pressed function SBS() { // local variables assignments var nombre = document.getElementById('name').value; var mir = document.getElementById('mir').value; var spacer = document.getElementById('spacer').value; var mis = document.getElementById('mis').value; var mat = document.getElementById('match').value; var end1 = document.seqIn.stickyends.selectedIndex; var endings = document.seqIn.stickyends.options[end1].value; var end5 = document.getElementById('end5').value; var end3 = document.getElementById('end3').value; var length = mir.length; var newseed = 0; var newcomp = 0; var resfin = 0; var rcresult = 0; var charac = 0; // Retrotranscription and cleaning of RNA sequences mir = cleaning(mir); spacer = cleaning(spacer); end5 = cleaning(end5); end3 = cleaning(end3); document.getElementById('mir').value = mir; document.getElementById('spacer').value = spacer; document.getElementById('end5').value = end5; document.getElementById('end3').value = end3; mir = mir.split('').reverse().join(''); var seedstring = mir.substring(14, 22); var compstring = mir.substring(0, 14); // Alert error messages if (mir.match(/[^ACTG]/g)) { alert('The format of the miRNA is not acceptable'); return; } if (!(length == 22)) { alert('The miRNA sequence is not 22 nt long'); return; } if (spacer.match(/[^ACTGN]/g)) { alert('The format of the spacer is not acceptable') return; } if (end5.match(/[^ACTG]/g)) { alert("The format of the extreme custom sequence in 5' is not acceptable. Please input a DNA or RNA sequence"); return; } if (end3.match(/[^ACTG]/g)) { alert("The format of the extreme custom sequence in 3' is not acceptable. Please input a DNA or RNA sequence"); return; } // perfect binding site constructor if (document.seqIn.quality[0].checked == true) { resfin = comp(mir); charac = "perf"; } // nucleotide 9-12 randomizer else if (document.seqIn.quality[1].checked == true) { var seed1 = mir.charAt(21); seed1 = mismatcher(seed1); var seed = mir.substring(14, 21); seed = comp(seed); newseed = (seed + seed1); var rest1 = mir.substring(10, 14); rest1 = mismatcher(rest1); var rest = mir.substring(0, 10); rest = comp(rest); newcomp = (rest + rest1); resfin = newcomp.concat(newseed); charac = "bulge 9-12"; } // customized BS else if (document.seqIn.quality[2].checked == true) { if (seedval == 0 || compval == 0) { alert('Please select one seed type and one supplementary region');} // design 6mer seed if (seedval == "6mer") { var seed1 = mir.charAt(21); seed1 = mismatcher(seed1); var seed8 = mir.charAt(14); seed8 = mismatcher(seed8); var seed = mir.substring(15, 21); seed = comp(seed); newseed = (seed8 + seed + seed1); } // design 7merA1 seed else if (seedval == "7merA1") { var seed8 = mir.charAt(14); seed8 = mismatcher(seed8); var seed = mir.substring(15, 22); seed = comp(seed); newseed = (seed8 + seed); } // design 7merm8 seed else if (seedval == "7merm8") { var seed1 = mir.charAt(21); seed1 = mismatcher(seed1); var seed = mir.substring(14, 21); seed = comp(seed); newseed = (seed + seed1); } // design 8mer seed else if (seedval == "8mer") { newseed = comp(seedstring); } // design custom seed else if (seedval == "custom") { if (mis.length > 1 || mis.match(/\D/g)) { alert('The format of the input mismatches is not acceptable. Input only one number between 2 and 7'); return; } var result = new Array(); var cuseed = seedstring.split(''); cuseed = cuseed.reverse(); var mis_array = new Array(); mis_array = mis.split(', '); for (var nj = 0; nj < mis_array.length; nj++) { mis_array[nj] = mis_array[nj] - 1; } for (var i = 0; i < cuseed.length; i++) { var flag = 0; for (var j = 0; j < mis_array.length; j++) { if (i == mis_array[j]) { result[i] = mismatcher(cuseed[i]); flag = 1; } } if (!(flag == 1)) { result[i] = comp(cuseed[i]); } } newseed = result.reverse(); newseed = newseed.join(''); if (mis.length > 0) { } } // design 3 comp if (compval == 3) { var rest1 = mir.substring(9, 14); rest1 = mismatcher(rest1); var rest3 = mir.substring(0, 6); rest3 = mismatcher(rest3); var rest = mir.substring(6, 9); rest = comp(rest); newcomp = (rest3 + rest + rest1); } // design 4 comp else if (compval == 4) { var rest1 = mir.substring(10, 14); rest1 = mismatcher(rest1); var rest3 = mir.substring(0, 6); rest3 = mismatcher(rest3); var rest = mir.substring(6, 10); rest = comp(rest); newcomp = (rest3 + rest + rest1); } // design 5 comp else if (compval == 5) { var rest1 = mir.substring(10, 14); rest1 = mismatcher(rest1); var rest3 = mir.substring(0, 5); rest3 = mismatcher(rest3); var rest = mir.substring(5, 10); rest = comp(rest); newcomp = (rest3 + rest + rest1); } // design 6 comp else if (compval == 6) { var rest1 = mir.substring(10, 14); rest1 = mismatcher(rest1); var rest3 = mir.substring(0, 4); rest3 = mismatcher(rest3); var rest = mir.substring(4, 10); rest = comp(rest); newcomp = (rest3 + rest + rest1); } // design 7 comp else if (compval == 7) { var rest1 = mir.substring(10, 14); rest1 = mismatcher(rest1); var rest3 = mir.substring(0, 3); rest3 = mismatcher(rest3); var rest = mir.substring(3, 10); rest = comp(rest); newcomp = (rest3 + rest + rest1); } // design 8 comp else if (compval == 8) { var rest1 = mir.substring(10, 14); rest1 = mismatcher(rest1); var rest3 = mir.substring(0, 2); rest3 = mismatcher(rest3); var rest = mir.substring(2, 10); rest = comp(rest); newcomp = (rest3 + rest + rest1); } // design Total comp else if (compval == "total") { var rest1 = mir.substring(10, 14); rest1 = mismatcher(rest1); var rest = mir.substring(0, 10); rest = comp(rest); newcomp = (rest + rest1); } // design custom comp else if (compval == "custom") { var result = new Array(); var cucomp = compstring.split(''); cucomp = cucomp.reverse(); var match_array = new Array(); match_array = mat.split(', '); for (var nj = 0; nj < match_array.length; nj++) { match_array[nj] = match_array[nj] - 9; } for (var i = 0; i < cucomp.length; i++) { var flag = 0; for (var j = 0; j < match_array.length; j++) { if (i == match_array[j]) { result[i] = comp(cucomp[i]); flag = 1; } } if (!(flag == 1)) { result[i] = mismatcher(cucomp[i]); } } newcomp = result.reverse(); newcomp = newcomp.join(''); match_array = match_array.join(''); if (match_array.length > compstring.length || match_array.match(/\D/g)) { alert('The format of the input matches is not acceptable. Input only numbers separated by commas'); return; } } // put together seed and compensatory regions charac = "seed" + seedval + " compens" + compval; resfin = newcomp.concat(newseed); } //Addition of extra AUs // A/U in position 1 if (document.seqIn.AU[2].checked) { var result = new Array(); for (var i = 0; i < resfin.length; i++) { if (!(i == 21)) { result[i] = resfin[i]; } else { if (mir[21] == "T") { result[21] = "T"; } else { result[21] = "A"; } } } resfin = result.join(''); } // A/U in position 8 if (document.seqIn.AU[3].checked) { var result = new Array(); for (var i = 0; i < resfin.length; i++) { if (!(i == 14)) { result[i] = resfin[i]; } else { if (mir[14] == "T") { result[14] = "T"; } else { result[14] = "A"; } } } resfin = result.join(''); } // A/U in position 9 if (document.seqIn.AU[4].checked) { var result = new Array(); for (var i = 0; i < resfin.length; i++) { if (!(i == 13)) { result[i] = resfin[i]; } else { if (mir[13] == "T") { result[13] = "T"; } else { result[13] = "A"; } } } resfin = result.join(''); } // A/U in position 10 if (document.seqIn.AU[5].checked) { var result = new Array(); for (var i = 0; i < resfin.length; i++) { if (!(i == 12)) { result[i] = resfin[i]; } else { if (mir[12] == "T") { result[12] = "T"; } else { result[12] = "A"; } } } resfin = result.join(''); } // position -1 and 0 var AU1 = ""; if (document.seqIn.AU[0].checked && document.seqIn.AU[1].checked) { AU1 = "AA"; } else if (!document.seqIn.AU[0].checked && document.seqIn.AU[1].checked) { AU1 = "A"; } else if (document.seqIn.AU[0].checked && !document.seqIn.AU[1].checked) { AU1 = "CA"; } // addition of sticky ends var leading5 = ""; var complem3 = ""; var leading3 = ""; var complem5 = ""; if (endings == "BBB") { leading5 = "AATTCGCGGCCGCACTAGT"; complem3 = "ACTAGTGCGGCCGCG"; leading3 = "GCTAGCGCGGCCGCTGCA"; complem5 = "GCGGCCGCGCTAGC"; } if (endings == "XX") { leading5 = "CCGGG"; complem3 = "C"; leading3 = "C"; complem5 = "TCGAG"; } else if (endings == "custom") { leading5 = end5; leading3 = end3; complem3 = revcomp(leading5); complem5 = revcomp(leading3); } // creation of reverse complementary strand resfin = spacer.concat(resfin); resfin = resfin.concat(AU1); rcresult = revcomp(resfin); leading5 = leading5.toLowerCase(); complem5 = complem5.toLowerCase(); leading3 = leading3.toLowerCase(); complem3 = complem3.toLowerCase(); var output1 = ("> " + nombre + ", " + charac); var output2 = (leading5 + resfin + leading3); var output3 = ("> " + nombre + ", " + charac + " comp strand"); var output4 = (complem5 + rcresult + complem3); // output sequences showDiv(output1,output2,output3,output4); //End }