var clicked = false;

var selection = "";
var ie = false;


function detectBrowser() {
    var browser=navigator.appName;
    var b_version=navigator.appVersion;
    var version=parseFloat(b_version);
    if (browser == "Microsoft Internet Explorer") {
        ie = true;
    }
}

function initQueryPage() {
    detectBrowser();
    if (document.forms[0].resultFlag.value == "false") {
       document.forms[0].idType[0].checked = true;
       document.forms[0].geneIdType[0].checked=true;
       document.forms[0].outputFormat[0].checked = true;
       document.forms[0].selection[0].checked = true;
       document.forms[0].inputList.value="";
       document.forms[0].cellLine[0].checked = true;
       uncheckExperiments();

     /*  for(var i=0;i<document.forms[0].outputSelected.length;i++) {
          document.getElementById("outputSelected")[i].checked=false;    
       }        */

     //  experimentQueryReset();
       initBox();
       showGeneInputHelp();
    } else {
        if (document.forms[0].idType[1].checked) {
           hideDiv("geneIds");
           showDiv("probeIds");
           hideDiv("chromosome");
           hideDiv("miRNA");
        } else if (document.forms[0].idType[2].checked) {
           hideDiv("geneIds");
           hideDiv("probeIds");
           showDiv("chromosome");
           hideDiv("miRNA");
        } else if(document.forms[0].idType[3].checked) {
           hideDiv("geneIds");
           hideDiv("probeIds");
           hideDiv("chromosome");
           showDiv("miRNA");
        }

        if (document.forms[0].selection[1].checked) {
            hideDiv("LIST");
            showDiv("FILE");
        } else if (document.forms[0].selection[0].checked) {
            showDiv("LIST");
            hideDiv("FILE");
        }

        if (document.forms[0].cellLine[0].checked) {
            showDiv("Q2_NCI60");
            hideDiv("Q2_DU145");
        } else if (document.forms[0].cellLine[1].checked) {
           hideDiv("Q2_NCI60");
           showDiv("Q2_DU145");
        }
        showInputHelp();
    }
}

function refreshQuery() {
    document.getElementById("resultFlag").setAttribute("value","false");
    history.go(0);
}


function disableStepThree() {
        if (document.forms[0].outputFormat[0].checked )  {
                       for (var q=0; q < document.forms[0].outputSelected.length; q++ ) {
                             document.forms[0].outputSelected[q].disabled=false;

                   }
               }
        if (document.forms[0].outputFormat[1].checked )  {
                       for (var q=0; q < document.forms[0].outputSelected.length; q++ ) {
                             document.forms[0].outputSelected[q].disabled=false;

                   }
               }
        if (document.forms[0].outputFormat[2].checked )  {
                       for (var q=0; q < document.forms[0].outputSelected.length; q++ ) {
                             document.forms[0].outputSelected[q].disabled=false;

                   }
               }
         if (document.forms[0].outputFormat[3].checked )  {
                   for (var i=0; i <= document.forms[0].outputSelected.length; i++ ) {
                         if (i == 3 || i ==7 || i==8){
                            document.forms[0].outputSelected[i].checked=true;
                         }
                         else {
                            document.forms[0].outputSelected[i].checked=false;
                         }
                         document.forms[0].outputSelected[i].disabled=true;

                   }
               }

                if (document.forms[0].outputFormat[0].checked )  {
                       for (var q=0; q < document.forms[0].outputSelected.length; q++ ) {
                             document.forms[0].outputSelected[q].disabled=false;

                   }
               }
        if (document.forms[0].outputFormat[1].checked )  {
                       for (var q=0; q < document.forms[0].outputSelected.length; q++ ) {
                             document.forms[0].outputSelected[q].disabled=false;

                   }
               }
        if (document.forms[0].outputFormat[2].checked )  {
           for (var q=0; q < document.forms[0].outputSelected.length; q++ ) {
               document.forms[0].outputSelected[q].disabled=false;
           }
        }
        document.forms[0].outputSelected[4].disabled=false;
        document.forms[0].outputSelected[8].disabled=false;
        document.forms[0].outputSelected[9].disabled=false;
}

function showInputHelp()
{
    if (document.forms[0].idType[0].checked) {
        showGeneInputHelp();
    } else if (document.forms[0].idType[1].checked) {
        showAffyInputHelp();
    } else if (document.forms[0].idType[2].checked) {
        showChromosomeInputHelp();
    } else if (document.forms[0].idType[3].checked) {
        showRnaiInputHelp();
    }
}

function showGeneInputHelp()
{
    if (document.forms[0].geneIdType[0].checked) {
        setHelp("abcb1", "BRCA2", "CNBP");
        setNote("Note: this will return only exact matches to the list entered.");
    } else if (document.forms[0].geneIdType[1].checked) {
        setHelp("abcb1", "BRCA2", "CNBP");
        setNote("Note: this will return aliases and exact matches to the list entered.");
    } else if (document.forms[0].geneIdType[2].checked) {
        setHelp("Cyclyn", "death", "c");
        setNote("Note: this will return any gene whose name (not symbol) contains an entry from the list entered.");
    } else if (document.forms[0].geneIdType[3].checked) {
        setHelp("10594", "826", "54537");
        setNote("Note: this will return only exact matches to the list entered.");
    } else if (document.forms[0].geneIdType[4].checked) {
        setHelp("NM_005502", "NM_001025091.1", "NM_130786.2");
        setNote("Note: this will return only exact matches to the list entered.");
    } else if (document.forms[0].geneIdType[5].checked) {
        setHelp("NP_005493", "NP_001020262", "NP_065202.2");
        setNote("Note: this will return only exact matches to the list entered.");
    }
}

function showAffyInputHelp()
{
    setHelp("1431_at", "1007_s_at", "205131_x_at");
}

function showChromosomeInputHelp()
{
    if (document.forms[0].chromoIdType[0].checked) {
        setHelp("2", "3", "X");
        setNote("Note: this will return all probes on the specified chromosome entered.");
    } else if (document.forms[0].chromoIdType[1].checked) {
        setHelp("2p14", "1q21.1", "3q");
        setNote("Note: this will return all probes on the specified chromosome entered.");
    } else if (document.forms[0].chromoIdType[2].checked) {
        setHelp("10:230000:235000", "10:1300000:1850000", "");
        setNote("Note: this will return all probes on chromosome 10 whose transcription range overlaps the range entered.");
    } else if (document.forms[0].chromoIdType[3].checked) {
        setHelp("10:230000:5000", "", "");
        setNote("Note: this will return all probes on chromosome 10 whose transcription range overlaps the range entered.");      
    }
}

function showRnaiInputHelp()
{
    setHelp("mir-001b-2-prec", "let-7f-1-precNo1", "mir-025-prec");
}

function setHelp(example1, example2, example3)
{
    var example = document.getElementById("example");
    while (example.firstChild) {
      example.removeChild(example.firstChild);
    }
    var p = document.createElement('br');
    example.appendChild(document.createTextNode(example1));
    example.appendChild(p);
    var p2 = document.createElement('br');
    example.appendChild(document.createTextNode(example2));
    example.appendChild(p2);
    if (example3 != "") {
        example.appendChild(document.createTextNode(example3));
    }
}

function setNote(note)
{
    var example = document.getElementById("note");
    example.removeChild(example.firstChild);
    var p = document.createElement('samp');
    p.appendChild(document.createTextNode(note));
    document.getElementById("note").appendChild(p);
}

function showExperiments(idType) {
    uncheckExperiments();
    hideDiv("Q2_NCI60");
    hideDiv("Q2_NCI60_PROBE");
    hideDiv("Q2_NCI60_CHR");
    hideDiv("Q2_NCI60_MIRNA");
    hideDiv("Q2_DU145");
    hideDiv("Q2_DU145_PROBE");
    hideDiv("Q2_DU145_CHR");
    hideDiv("Q2_DU145_MIRNA");    
    if (document.forms[0].cellLine[0].checked) {
        if (idType == "gene") {
            showDiv("Q2_NCI60");
        } else if (idType == "probe") {
            showDiv("Q2_NCI60_PROBE");
        } else if (idType == "chromosome") {
            showDiv("Q2_NCI60_CHR");
        } else if (idType == "miRNA") {
            showDiv("Q2_NCI60_MIRNA");
        }
    } else {
        if (idType == "gene") {
            showDiv("Q2_DU145");
        } else if (idType == "probe") {
            showDiv("Q2_DU145_PROBE");
        } else if (idType == "chromosome") {
            showDiv("Q2_DU145_CHR");
        } else if (idType == "miRNA") {
            showDiv("Q2_DU145_MIRNA");
        }
    }
}

function showGeneIds() {
    showDiv("geneIds");
    document.forms[0].geneIdType[0].checked=true;
    showGeneInputHelp();
    hideDiv("probeIds");
    hideDiv("chromosome");
    hideDiv("miRNA");
}

function showProbeIds()
{
    showDiv("probeIds");
    showAffyInputHelp();
    document.forms[0].probeIdType.checked=true;
    hideDiv("geneIds");
    hideDiv("chromosome");
    hideDiv("miRNA");
}

function showChromosome()
{
    document.forms[0].chromoIdType[0].checked=true;
    showChromosomeInputHelp();
    showDiv("chromosome");
    hideDiv("geneIds");
    hideDiv("probeIds");
    hideDiv("miRNA");
}
function showmiRNA()
{
    showRnaiInputHelp();
    showDiv("miRNA");
    document.forms[0].miRNAIdType.checked=true;
    hideDiv("chromosome");
    hideDiv("geneIds");
    hideDiv("probeIds");
}
//function showIdType()
//{
//    showDiv(selection);
//}

function submitQuery() {
    var chipSelected = 0;
    var outputSelected = 0;
    document.forms[0].resultFlag.value = "true";
    if (document.forms[0].cellLine[0].checked) {
        chipSelected = countCheckedBox("experimentsNci60Selected");
    } else if (document.forms[0].cellLine[1].checked) {
        chipSelected = countCheckedBox("experimentsDu145Selected");
        //TODO Verify that this in an appropriate deactivation
        //          } else if (document.forms[0].cellLine[2].checked == true) {
        //            chipSelected = countCheckedBox("experimentsBothSelected");
    } else {
        alert("Error.");
        return false;
    }
    if (chipSelected < 1) {
        alert("You have to select at least 1 Chip/Normalization method in Step 4.");
        return false;
    }
//    else {
//        alert("method selected:" + document.getElementById("methodsSelectedNci60"));
//        return false;
//    }
    outputSelected = countCheckedBox("outputSelected");
   /* if (outputSelected < 1) {

        alert("You have to select at least one output data element in Step 5.");
        return false;
    }      */
    
    if (document.forms[0].selection[1].checked) {
        if (!enteredInputIdentifier()) {
            return false;
        } else {
            var fileName = document.forms[0].uploadFile.value;
            if (fileName == null || fileName == "") {
                alert("You must select an input file in Step 2a");
                return false;
            } else if (fileName.indexOf("\\") < 0 && (fileName.indexOf("/") < 0)) {
                alert("You must specify a file with path in Step 2a");
                return false;
            } else if (fileName.indexOf("txt") < 0) {
                alert("You must specify a text file in Step 2a");
                return false;
            }
        }
    } else if (document.forms[0].selection[0].checked) {
        if (!enteredInputIdentifier()) {
            return false;
        } else {
            if (document.forms[0].inputList.value == "") {
                alert("You must enter an identifier in Step 2a");
                return false;
            } else if (document.forms[0].idType[2].checked) {
                return checkChromosomeInputFormat();
            }
        }
    }
    
    var i = 0;
    while (i < document.forms[0].inputList.value.length)
    {
        if (document.forms[0].inputList.value.charAt(i) == '<' | document.forms[0].inputList.value.charAt(i) == '>' ||
            document.forms[0].inputList.value.charAt(i) == '\'')
        {
            alert("invalid characters used!");
            return false;
        }
        else
        {
            i++;
        }
    }
    
    var cellLine = "";
    if (document.forms[0].cellLine[0].checked) {
        cellLine = "experimentsNci60Selected";
    }
    else if (document.forms[0].cellLine[1].checked) {
        cellLine = "experimentsDu145Selected";
    }
   
}

function uncheckExperiments() {
    for (var i = 0; i < document.forms[0].experimentsNci60Selected.length; i++) {
        document.forms[0].experimentsNci60Selected[i].checked = false;
    }
}
function countCheckedBox(theName) {
    var total = 0;
    var max = document.getElementsByName(theName).length;
    var doc = document.getElementsByName(theName);
    for (var idx = 0; idx < max; idx++) {
        if (doc[idx].checked == true) {
            total += 1;
        }
    }
    return total;
}

function enteredInputIdentifier() {
    if (document.forms[0].idType[0].checked) {
        if (countCheckedBox("geneIdType") < 1) {
            alert("You must select a gene identifier type in Step 1a");
            return false;
        } else {
            return true;
        }
    }
    if (document.forms[0].idType[1].checked) {
        if (countCheckedBox("probeIdType") < 1) {
            return false;
        } else {
            return true;
        }
    }
    if (document.forms[0].idType[2].checked) {
        if (countCheckedBox("chromoIdType") < 1) {
            alert("You must select a genome identifier type in Step 1a");
            return false;
        } else {
            return true;
        }
    }
    if (document.forms[0].idType[3].checked) {
        if (countCheckedBox("miRNAIdType") < 1) {
            alert("You must select a miRNA identifier type in Step 1a");
            return false;
        } else {
            return true;
        }
    }
//    alert("You must select an input identifier type in Step 6.");
    alert("You must select an input identifier type in Step 1.");
    return false;
}
function checkChromosomeInputFormat() {
    var input = document.forms[0].inputList.value;
    if (document.forms[0].chromoIdType[0].checked) {
        return checkValidChromosome(input);
    } else if (document.forms[0].chromoIdType[1].checked) {
        if (input.indexOf("q") == -1 && input.indexOf("p") == -1) {
            alert("Invalid cytoband format in Step 2a.")
            return false;
        }
    }
    return true;
}
function checkValidChromosome(chr) {
    var chrVal = parseInt(chr).toString();
    if (!(chrVal == "NaN"))
    {
        if (chrVal != chr)
        {
            alert("Invalid Chromosome entered in Step 2a")
            return false;
        }
        else if (chrVal > 0 && chrVal < 22)
        {
            return true;
        }
        else
        {
            alert("Invalid Chromosome entered in Step 2a")
            return false;
        }
    }
    else
    {
        if (chr == 'X' || chr == 'Y' || chr == 'x' || chr == 'y')
        {
            return true;
        }
        else
        {
            alert("Invalid Chromosome entered in Step 2a")
            return false;
        }
    }
    return true;
}

function resetIdentifierValues()
{
    document.forms[0].uploadFile.value = "";
    document.forms[0].inputList.value = "";
}
function cleanoutExperimentSelection() {
    setOptionByName("experimentsNci60Selected");
    setOptionByName("experimentsDu145Selected");
    setOptionByName("experimentsBothSelected");
}

function changeToNCI60Options()
{
    cleanoutExperimentSelection();
    showDiv("Q2_NCI60");
    hideDiv("Q2_DU145");
    hideDiv("Q2_BOTH");
  //  setOptionByName("outputSelected");
}
function changeToDU145Options()
{
    cleanoutExperimentSelection();
    hideDiv("Q2_NCI60");
    showDiv("Q2_DU145");
    hideDiv("Q2_BOTH");
  //  setOptionByName("outputSelected");
}
function resetIdentifierTypes()
{
    for (var i = 0; i < document.forms[0].geneIdType.length; i++) {
        document.forms[0].geneIdType[i].checked = false;
    }
    for (var i = 0; i < document.forms[0].probeIdType.length; i++) {
        document.forms[0].probeIdType[i].checked = false;
    }
    for (var i = 0; i < document.forms[0].chromoIdType.length; i++) {
        document.forms[0].chromoIdType[i].checked = false;
    }
    for (var i = 0; i < document.forms[0].miRNAIdType.length; i++) {
        document.forms[0].miRNAIdType[i].checked = false;
    }
}

function isMiRNAExperimentChecked(theName) {
    var miRNAselected = false;
    var max = document.getElementsByName(theName).length;
    var doc = document.getElementsByName(theName);
    for (var idx = 0; idx < max; idx++) {
        if (doc[idx].checked == true) {
            if (doc[idx].value.indexOf("MicroRNA") > -1) {
                miRNAselected = true;
            }
            //            if (doc[idx].value == "RNA: miRNA Test/log2") {
            //                miRNAselected = true;
            //            }
        }
    }
    return miRNAselected;
}

function clickInputFormat(newSelection)
{
    setOptionByName("gene");
    setOptionByName("probeIdType");
    setOptionByName("chromoIdType");
    //        hideDiv("geneIds");
    //        hideDiv("probeIds");
    //        hideDiv("chromosome");
    if (newSelection == "FILE") {
        hideDiv("LIST");
        if (selection == "LIST" || selection == "") {
            showDiv("FILE");
        }
    } else if (newSelection == "LIST") {
        hideDiv("FILE");
        if (selection == "FILE" || selection == "") {
            showDiv("LIST");
        }
    }
    saveSelection(newSelection);
}
function saveSelection(theSelection)
{
    selection = theSelection;
}
function setOptionByName(theName)
{
    var max = document.getElementsByName(theName).length;
    var doc = document.getElementsByName(theName);
    for (var idx = 0; idx < max; idx++) {
        if (doc[idx].checked == true) {
            doc[idx].checked = false;
        }
    }
}


