

function Option(text, value) {
  this.text = text;
  this.value = value;
  this.length = 0; 
}

function addOption(option_list, text, value) {
  option_list[option_list.length] = new Option(text, value);
  option_list.length++;
}

var alist  = new Option();


function change_ALIGN_TYPE(form) {
    var i = form.ALIGN_TYPE.selectedIndex;
    form.YEAR.length = alist[i].length;
    for (j = 0; j < form.YEAR.length; j++) {
        form.YEAR[j].text = alist[i][j].text;
        form.YEAR[j].value = alist[i][j].value;
    }
	change_YEAR(form);
}

function change_YEAR(form) {
    var i = form.ALIGN_TYPE.selectedIndex;
    var j = form.YEAR.selectedIndex;
    if ( form.ORGANISM.value == "HIV" ) {
        form.SUBORGANISM.length = alist[i][j].length;
        for (k = 0; k < form.SUBORGANISM.length; k++) {
            form.SUBORGANISM[k].text = alist[i][j][k].text;
            form.SUBORGANISM[k].value = alist[i][j][k].value;
        }
    }
	change_SUBORGANISM(form);
}

function change_SUBORGANISM(form) {
    var i = form.ALIGN_TYPE.selectedIndex;
    var j = form.YEAR.selectedIndex;
	var k;
    if ( form.ORGANISM.value == "HIV" ) {
	    k = form.SUBORGANISM.selectedIndex;
	} else { // HCV
	    k = 0;  // in HCV, form.SUBORGANISM is a hidden input box, not a select type
	}
	form.REGION.length = alist[i][j][k].length;
	for (l = 0; l < form.REGION.length; l++) {
	    form.REGION[l].text = alist[i][j][k][l].text;
	    form.REGION[l].value = alist[i][j][k][l].value;
	}

	// genotype or subtype
    if ( form.ORGANISM.value == "HIV" ) {
		if ( form.SUBORGANISM[k].value == "HIV1" ) {
        	var hiv_geno_sub_text  = ['All', 'All M Group (A-K + Recombinants)', 'NO Recombinants (A-K)'];
        	var hiv_geno_sub_value = ['All', 'ALLM', 'A-K'];
 
            form.GENO_SUB.length = hiv_geno_sub_text.length;
            for ( n=0; n<hiv_geno_sub_text.length; n++ ) {
                form.GENO_SUB[n].text  = hiv_geno_sub_text[n];
                form.GENO_SUB[n].value = hiv_geno_sub_value[n];
            }
        } else if ( form.SUBORGANISM[k].value == 'HIV2' || form.SUBORGANISM[k].value == 'SIV' ) {
            form.GENO_SUB.length = 1;
           	form.GENO_SUB[0].text  = 'All';
           	form.GENO_SUB[0].value = 'All';
		} 
	} 
	change_REGION(form);
}

function change_REGION(form) {
    var i = form.ALIGN_TYPE.selectedIndex;
    var j = form.YEAR.selectedIndex;
    var k ;
    var l = form.REGION.selectedIndex;
    if ( form.ORGANISM.value == "HIV" ) {
    	k = form.SUBORGANISM.selectedIndex;
	} else { // HCV
	    k = 0;  // in HCV, form.SUBORGANISM is a hidden input box, not a select type
	}
    form.BASETYPE.length = alist[i][j][k][l].length;
    for (m = 0; m < form.BASETYPE.length; m++) {
        form.BASETYPE[m].text = alist[i][j][k][l][m].text;
        form.BASETYPE[m].value = alist[i][j][k][l][m].value;
    }
}



function Form_Validator(form)
{
	// select user-defined range
	if ( form.PRE_USER[1].checked )
	{
		if ( form.START.value == "" )
		{		
			alert("Please enter a Start coordinate" );
			form.START.select();
			form.START.focus();
			return (false);
		}
		else if ( form.END.value == "" )
		{		
			alert("Please enter an End coordinate" );
			form.END.select();
			form.END.focus();
			return (false);
		}
		else if ( parseInt(form.START.value) > parseInt(form.END.value) )
		{
			alert("Please enter valid Start and End coordinates" );
			form.START.select();
			form.START.focus();
			return (false);
		}
	
		// chekc the availability of data
		if ( form.ORGANISM.value == "HIV"  && form.ALIGN_TYPE.value == "CON" ) 
		{	
			alert("The user defined ragne is not available for the consensus alignments.\nPlease select other options.");
			form.ALIGN_TYPE.focus();
			return (false);
		}
		if ( form.SUBORGANISM.value == "SIV"  && form.ALIGN_TYPE.value == "ALL" && form.YEAR.value == "1997" )
		{	
			alert("The user defined ragne is not available for this alignments.\nPlease select other options.");
			form.ALIGN_TYPE.focus();
			return (false);
		}
	}

	// check availability of PRO alignments
	if ( form.BASETYPE.value == "PRO"  ) 
	{
		if ( form.PRE_USER[1].checked ) 
		{
			alert("Please select DNA alignment to see User-defined range. ");
			form.BASETYPE.focus();
			return (false);
		}

		if ( form.ORGANISM.value == "HIV" ) 
		{
			// in case of HIV, only DNA genome sequence is available	
			if ( ( form.REGION.value == "Genome" )  && ( form.PRE_USER[0].checked ) ) 
			{
				alert("No protein genome alignments are available.\nPlease select DNA alignments.");
				form.BASETYPE.focus();
				return (false);
			}
		}

		// no proteins for LTR, UTR	
		if ( ( form.REGION.value == "LTR" || form.REGION.value == "5UTR" || form.REGION.value == "3UTR" )  &&
		     ( form.PRE_USER[0].checked ) ) 
		{
			alert("No protein alignments are available for LTRs and UTRs.\nPlease select DNA alignments.");
			form.BASETYPE.focus();
			return (false);
		}

		// get the user defined range from genome, but no genome sequences of HIV-ALL-Protein
		if ( form.ALIGN_TYPE.value == "ALL"  && form.PRE_USER[1].checked )
		{
			alert("No protein alignments are available for the sepecified range .\nPlease select DNA alignments.");
			form.BASETYPE.focus();
			return (false);
		}

		// get the user defined range from genome, but no genome sequences of HIV-con-Protein
		if ( form.ALIGN_TYPE.value == "CON"  && form.PRE_USER[1].checked )
		{
			alert("No protein alignments are available for the sepecified range .\nPlease select DNA alignments.");
			form.BASETYPE.focus();
			return (false);
		}
	}
	
	return (true);
}


