function StartBlastCgi() {
    if (document.forms[0].CMD.value == "Put") {
        if (document.forms[0].PAGE.value == "Proteins" || 
            document.forms[0].PAGE.value == "Translations") 
            CreateSubmenu(document.forms[0].GAPCOSTS.options, document.forms[0].MATRIX_NAME.options);
        if (document.forms[0].PAGE.value == "Translations")
            TranslationCombinations(1, document.forms[0].PROGRAM, document.forms[0].DATABASE.options, document.forms[0].GENETIC_CODE.options, document.forms[0].UNGAPPED_ALIGNMENT, document.forms[0].TAXID_LIST);
        else
            TranslationCombinations(0, document.forms[0].PROGRAM, document.forms[0].DATABASE.options, 0, document.forms[0].UNGAPPED_ALIGNMENT, document.forms[0].TAXID_LIST);
    }
}

function CreateSubmenu(menu, matr) {
    if (matr[matr.selectedIndex].text == "BLOSUM62") {
	menu.length = 6;
	menu.selectedIndex = 4;
	menu[0].text = 'Existence:  9 Extension: 2';
	menu[0].value = '9 2';
	menu[1].text = 'Existence:  8 Extension: 2';
	menu[1].value = '8 2';
	menu[2].text = 'Existence:  7 Extension: 2';
	menu[2].value = '7 2';
	menu[3].text = 'Existence: 12 Extension: 1';
	menu[3].value = '12 1';
	menu[4].text = 'Existence: 11 Extension: 1';
	menu[4].value = '11 1';
	menu[5].text = 'Existence: 10 Extension: 1';
	menu[5].value = '10 1';
    } else if (matr[matr.selectedIndex].text == "PAM30") {
	menu.length = 6;
	menu.selectedIndex = 4;
	menu[0].text = 'Existence:  7 Extension: 2';
	menu[0].value = '7 2';
	menu[1].text = 'Existence:  6 Extension: 2';
	menu[1].value = '6 2';
	menu[2].text = 'Existence:  5 Extension: 2';
	menu[2].value = '5 2';
	menu[3].text = 'Existence: 10 Extension: 1';
	menu[3].value = '10 1';
	menu[4].text = 'Existence:  9 Extension: 1';
	menu[4].value = '9 1';
	menu[5].text = 'Existence:  8 Extension: 1';
	menu[5].value = '8 1';
    } else if (matr[matr.selectedIndex].text == "PAM70") {
	menu.length = 6;
	menu.selectedIndex = 4;
	menu[0].text = 'Existence:  8 Extension: 2';
	menu[0].value = '8 2';
	menu[1].text = 'Existence:  7 Extension: 2';
	menu[1].value = '7 2';
	menu[2].text = 'Existence:  6 Extension: 2';
	menu[2].value = '6 2';
	menu[3].text = 'Existence: 11 Extension: 1';
	menu[3].value = '11 1';
	menu[4].text = 'Existence: 10 Extension: 1';
	menu[4].value = '10 1';
	menu[5].text = 'Existence:  9 Extension: 1';
	menu[5].value = '9 1';
    } else if (matr[matr.selectedIndex].text == "BLOSUM80") {
	menu.length = 6;
	menu.selectedIndex = 4;
	menu[0].text = 'Existence:  8 Extension: 2';
	menu[0].value = '8 2';
	menu[1].text = 'Existence:  7 Extension: 2';
	menu[1].value = '7 2';
	menu[2].text = 'Existence:  6 Extension: 2';
	menu[2].value = '6 2';
	menu[3].text = 'Existence: 11 Extension: 1';
	menu[3].value = '11 1';
	menu[4].text = 'Existence: 10 Extension: 1';
	menu[4].value = '10 1';
	menu[5].text = 'Existence:  9 Extension: 1';
	menu[5].value = '9 1';
    } else if (matr[matr.selectedIndex].text == "BLOSUM45") {
	menu.length = 12;
	menu.selectedIndex = 4;
	menu[0].text = 'Existence: 13 Extension: 3';
	menu[0].value = '13 3';
	menu[1].text = 'Existence: 12 Extension: 3';
	menu[1].value = '12 3';
	menu[2].text = 'Existence: 11 Extension: 3';
	menu[2].value = '11 3';
	menu[3].text = 'Existence: 10 Extension: 3';
	menu[3].value = '10 3';
	menu[4].text = 'Existence: 15 Extension: 2';
	menu[4].value = '15 2';
	menu[5].text = 'Existence: 14 Extension: 2';
	menu[5].value = '14 2';
	menu[6].text = 'Existence: 13 Extension: 2';
	menu[6].value = '13 2';
	menu[7].text = 'Existence: 12 Extension: 2';
	menu[7].value = '12 2';
	menu[8].text = 'Existence: 19 Extension: 1';
	menu[8].value = '19 1';
	menu[9].text = 'Existence: 18 Extension: 1';
	menu[9].value = '18 1';
	menu[10].text = 'Existence: 17 Extension: 1';
	menu[10].value = '17 1';
	menu[11].text = 'Existence: 16 Extension: 1';
	menu[11].value = '16 1';
    } else {
	alert('Internal error: matrix is not specified');
    }
}
function CleanField(arg) {
    arg.value = '';
}

function Object_Type_Combinations(object, type) {

    if (object[object.selectedIndex].value == "Alignment") {
	type.length = 4;
	type.selectedIndex = 0;
	type[0].text = 'HTML';
	type[0].value = 'HTML';
	type[1].text = 'Plain Text';
	type[1].value = 'Text';
	type[2].text = 'ASN.1';
	type[2].value = 'ASN.1';
	type[3].text = 'XML';
	type[3].value = 'XML';
    } else if (object[object.selectedIndex].value == "PSSM") {
	type.length = 1;
	type.selectedIndex = 0;
	type[0].text = 'Text';
	type[0].value = 'Text';
    } else if (object[object.selectedIndex].value == "BlastObject") {
	type.length = 2;
	type.selectedIndex = 0;
	type[0].text = 'ASN.1';
	type[0].value = 'ASN.1';
	type[1].text = 'XML';
	type[1].value = 'XML';
    } else if (object[object.selectedIndex].value == "Bioseq") {
	type.length = 1;
	type.selectedIndex = 0;
	type[0].text = 'ASN.1';
	type[0].value = 'ASN.1';
    } else if (object[object.selectedIndex].value == "Neighbors") {
	type.length = 1;
	type.selectedIndex = 0;
	type[0].text = 'Text';
	type[0].value = 'Text';
    } else if (object[object.selectedIndex].value == "BlastObjectReport") {
	type.length = 1;
	type.selectedIndex = 0;
	type[0].text = 'HTML';
	type[0].value = 'HTML';
    } else if (object[object.selectedIndex].value == "SearchInfo") {
	type.length = 1;
	type.selectedIndex = 0;
	type[0].text = 'Text';
	type[0].value = 'Text';
    } else {
	alert('Internal error: format_object is not specified');
    }
}

function TranslationCombinations(is_translated, program, databases, gencodes, hidden_ungapped_alignment, taxid_list) {
  if (!taxid_list) {
    preset_db = databases[0].text;             
    databases.selectedIndex = 0;
    if ((!is_translated && program.value == "blastp") || 
        (is_translated && program.selectedIndex == 0)) {
        /* blastp or blastx */

	databases.length = 5;

	databases[0].text = 'nr';
	databases[0].value = 'nr';
        if (preset_db == "nr")
       	    databases.selectedIndex = 0;
	databases[1].text = 'swissprot';
	databases[1].value = 'swissprot';
        if (preset_db == "swissprot")
       	    databases.selectedIndex = 1;
	databases[2].text = 'pat';
	databases[2].value = 'pat';
        if (preset_db == "pat")
       	    databases.selectedIndex = 2;
	databases[3].text = 'pdb';
	databases[3].value = 'pdb';
        if (preset_db == "pdb")
       	    databases.selectedIndex = 3;
	databases[4].text = 'month';
	databases[4].value = 'month';
        if (preset_db == "month")
       	    databases.selectedIndex = 4;
    } else if ((!is_translated && program.value == "blastn") || 
        (is_translated && (program.selectedIndex == 1 || 
        program.selectedIndex == 2))) {
        /* blastn, megablast, tblastn, tblastx */

	databases.length = 14;

	databases[0].text = 'nr';
	databases[0].value = 'nr';
        if (preset_db == "nr")
       	    databases.selectedIndex = 0;
	databases[1].text = 'est';
	databases[1].value = 'est';
        if (preset_db == "est")
       	    databases.selectedIndex = 1;
	databases[2].text = 'est_human';
	databases[2].value = 'est_human';
        if (preset_db == "est_human")
       	    databases.selectedIndex = 2;
	databases[3].text = 'est_mouse';
	databases[3].value = 'est_mouse';
        if (preset_db == "est_mouse")
       	    databases.selectedIndex = 3;
	databases[4].text = 'est_others';
	databases[4].value = 'est_others';
        if (preset_db == "est_others")
       	    databases.selectedIndex = 4;
	databases[5].text = 'gss';
	databases[5].value = 'gss';
        if (preset_db == "gss")
       	    databases.selectedIndex = 5;
	databases[6].text = 'htgs';
	databases[6].value = 'htgs';
        if (preset_db == "htgs")
       	    databases.selectedIndex = 6;
	databases[7].text = 'pat';
	databases[7].value = 'pat';
        if (preset_db == "pat")
       	    databases.selectedIndex = 7;
	databases[8].text = 'pdb';
	databases[8].value = 'pdb';
        if (preset_db == "pdb")
       	    databases.selectedIndex = 8;
	databases[9].text = 'month';
	databases[9].value = 'month';
        if (preset_db == "month")
       	    databases.selectedIndex = 9;
	databases[10].text = 'alu_repeats';
	databases[10].value = 'alu';
        if (preset_db == "alu")
       	    databases.selectedIndex = 10;
	databases[11].text = 'dbsts';
	databases[11].value = 'dbsts';
        if (preset_db == "dbsts")
       	    databases.selectedIndex = 11;
	databases[12].text = 'chromosome';
	databases[12].value = 'chromosome';
        if (preset_db == "chromosome")
       	    databases.selectedIndex = 12;
	databases[13].text = 'wgs';
	databases[13].value = 'wgs';
        if (preset_db == "wgs")
       	    databases.selectedIndex = 13;	


    } else {
	alert('Internal error: blast_program is not specified');
    }
  }

    if (is_translated) {
       if (program.selectedIndex == 0 || program.selectedIndex == 2) {
	gencodes.length = 13;
	gencodes.selectedIndex = 0;
	gencodes[0].text = 'Standard (1)';
	gencodes[0].value = '1';
	gencodes[1].text = 'Vertebrate Mitochondrial (2)';
	gencodes[1].value = '2';
	gencodes[2].text = 'Yeast Mitochondrial (3)';
	gencodes[2].value = '3';
	gencodes[3].text = 'Mold Mitochondrial; ... (4)';
	gencodes[3].value = '4';
	gencodes[4].text = 'Invertebrate Mitochondrial (5)';
	gencodes[4].value = '5';
	gencodes[5].text = 'Ciliate Nuclear; ... (6)';
	gencodes[5].value = '6';
	gencodes[6].text = 'Echinoderm Mitochondrial (9)';
	gencodes[6].value = '9';
	gencodes[7].text = 'Euplotid Nuclear (10)';
	gencodes[7].value = '10';
	gencodes[8].text = 'Bacterial (11)';
	gencodes[8].value = '11';
	gencodes[9].text = 'Alternative Yeast Nuclear (12)';
	gencodes[9].value = '12';
	gencodes[10].text = 'Ascidian Mitochondrial (13)';
	gencodes[10].value = '10';
	gencodes[11].text = 'Flatworm Mitochondrial (14)';
	gencodes[11].value = '14';
	gencodes[12].text = 'Blepharisma Macronuclear (15)';
	gencodes[12].value = '15';
      } else if (program.selectedIndex == 1) {
	gencodes.length = 1;
	gencodes.selectedIndex = 0;
	gencodes[0].text = 'Disabled';
	gencodes[0].value = '0';
      } else {
	alert('Internal error: blast_program is not specified');
      }

      if (program.selectedIndex == 2) {
	  hidden_ungapped_alignment.value = 'yes';
      } else {
      	  hidden_ungapped_alignment.value = 'no';
      }
    }
}

function HitlistsizeVsDescriptionsAlignments(hitlist, descr, align) {

    var	i = 0;

    var old_descr_selected = descr.selectedIndex;
    var old_align_selected = align.selectedIndex;

    descr.length = 1;
    align.length = 1;

    while (i <= hitlist.selectedIndex+1) {
	if (i == 0) {
	    descr[i].text = "0"; 
	    descr[i].value = "0"; 
	    align[i].text = "0"; 
	    align[i].value = "0"; 
	} else if (i == 1) {
	    descr[i].text = "10"; 
	    descr[i].value = "10"; 
	    align[i].text = "10"; 
	    align[i].value = "10"; 
	} else if (i == 2) {
	    descr[i].text = "50"; 
	    descr[i].value = "50"; 
	    align[i].text = "50"; 
	    align[i].value = "50"; 
	} else if (i == 3) {
	    descr[i].text = "100"; 
	    descr[i].value = "100"; 
	    align[i].text = "100"; 
	    align[i].value = "100"; 
	} else if (i == 4) {
	    descr[i].text = "250"; 
	    descr[i].value = "250"; 
	    align[i].text = "250"; 
	    align[i].value = "250"; 
	} else if (i == 5) {
	    descr[i].text = "500"; 
	    descr[i].value = "500"; 
	    align[i].text = "500"; 
	    align[i].value = "500"; 
	} else if (i == 6) {
	    descr[i].text = "1000"; 
	    descr[i].value = "1000"; 
	    align[i].text = "1000"; 
	    align[i].value = "1000"; 
	} else {
	    alert('Internal error: hitlist');
	}
	i++;
	descr.length = i+1;
	align.length = i+1;
    } 
    descr.length--;
    align.length--;

    if (i-1 < old_descr_selected) {
	descr.selectedIndex = i-1;
    } else {
	descr.selectedIndex = old_descr_selected;
    }
    if (i-1 < old_align_selected) {
	align.selectedIndex = i-1;
    } else {
	align.selectedIndex = old_align_selected;
    }
}

function OpenResultsWindow(winname) {

    properties="width="+self.innerWidth+",height="+self.innerHeight;
    xwnd=window.open("",winname, properties + ',toolbar=yes,location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes');

    if(xwnd==null) { alarm("Cannot open new window"); }

    xwnd.document.open();
    xwnd.document.write(
	    "<html><body>\nChecking status...<br>\n<script language=\"JavaScript\"><!--\nopener.document.forms[0].submit();//--></SCRIPT>\n<br></body></html>");
    xwnd.document.close();
}

function SetClusterHitsParameters(on) {
    if (on.checked == 1) {
        document.forms[0].CLUSTER_LTHRESH.value = '0.9';
        document.forms[0].CLUSTER_STHRESH.value = '1.6';    
        document.forms[0].CLUSTER_OTHRESH.value = '0.5';    
        document.forms[0].CLUSTER_BIDIRECT.checked = 1;
    } else {
        document.forms[0].CLUSTER_LTHRESH.value = '';
        document.forms[0].CLUSTER_STHRESH.value = '';    
        document.forms[0].CLUSTER_OTHRESH.value = '';    
        document.forms[0].CLUSTER_BIDIRECT.checked = 0;
    }
}

