// recurse through form elements
function setupElementNodes(parentNode, ber)
{
    for (ber; ber < parentNode.childNodes.length; ber++)
    {
        if (parentNode.childNodes[ber].nodeType == 1)
        {
            if (parentNode.childNodes[ber].tagName == "INPUT"
             || parentNode.childNodes[ber].tagName == "SELECT"
             || parentNode.childNodes[ber].tagName == "OPTION")
            {
                childNode = parentNode.childNodes[ber];
                childNode.focused = false;
                childNode.hasFocus = function()
                {
                    return this.focused;
                };
                childNode.onfocus = function()
                {
                    this.focused = true;
                };
                childNode.onblur = function()
                {
                    this.focused = false;
                };
            }
        }
        if (parentNode.childNodes[ber].hasChildNodes())
        {
            setupElementNodes(parentNode.childNodes[ber], 0);
        }
    }
}


// Allow focus to be chcked on each form element
function setupElements()
{
    setupElementNodes(document.getElementById('queryForm'), 0);
}


function populateList(count, databaseValue)
{
    var databaseList = new Array();
    var pos = 0;
    for (var i = 0; databaseValue.length > i; i++)
    {
        // split out the checkbox identifier off craweld
        if (databaseValue[i][0].split("/").length > 1 &&
            databaseValue[i][0].split("/")[0] in list)
        {
            databaseList[pos++] = databaseValue[i][0].split("/")[0];
        }
        else if (databaseValue[i] in list)
        {
            databaseList[pos++] = databaseValue[i][0];
        }
    }
    if (databaseList.length == 0)
    {
        databaseList[0] = ["ALL"];
        count = 1;
    }

    // If all or no rectructs are selected, use default list
    if (count == recList.length || databaseList[0] == "ALL")
    {
        for (var i = 0; list["ALL"].length > i; i++)
        {
            document.getElementById('queryForm').fieldname1.options[i] = new Option(list["ALL"][i], list["ALL"][i], false, false);
            document.getElementById('queryForm').fieldname2.options[i] = new Option(list["ALL"][i], list["ALL"][i], false, false);
            document.getElementById('queryForm').fieldname3.options[i] = new Option(list["ALL"][i], list["ALL"][i], false, false);
        }
    }
    // Else if 1 recstruct selected, use that list.
    else if (count == 1)
    {
        if (!(databaseList[0] in list))
        {
            databaseList[0] = ["ALL"];
        }
        for (var i = 0; list[databaseList[0]].length > i; i++)
        {
            document.getElementById('queryForm').fieldname1.options[i] = new Option(list[databaseList[0]][i], list[databaseList[0]][i], false, false);
            document.getElementById('queryForm').fieldname2.options[i] = new Option(list[databaseList[0]][i], list[databaseList[0]][i], false, false);
            document.getElementById('queryForm').fieldname3.options[i] = new Option(list[databaseList[0]][i], list[databaseList[0]][i], false, false);
        }
    }
    else
    {
        var combinedList = new Array();

        var checkList = list[databaseList[0]];
        var inAll = true;
        for (var i = 0; checkList.length > i; i++)
        {
            inAll = true;
            for (var j = 1; databaseList.length > j; j++)
            {
                /* Check which terms are in ALL selected structs */
                var inThis = false;
                for (var k = 0; list[databaseList[j]].length > k; k++)
                {
                    if (checkList[i] == list[databaseList[j]][k])
                    {
                        inThis = true;
                    }
                }
                inAll = inThis;
                /* If the term is not in any struct then stop looking */
                if (!inThis) { break; }
            }
            if (inAll)
            {
                combinedList[combinedList.length] = checkList[i];
            }
        }


        for (var i = 0; combinedList.length > i; i++)
        {
            document.getElementById('queryForm').fieldname1.options[i] = new Option(combinedList[i], combinedList[i], false, false);
            document.getElementById('queryForm').fieldname2.options[i] = new Option(combinedList[i], combinedList[i], false, false);
            document.getElementById('queryForm').fieldname3.options[i] = new Option(combinedList[i], combinedList[i], false, false);
        }

    }

}


function usingChecks()
{
    var databaseValue = new Array();
    var seenData = new Array();
    // Check is any databases have been selected to change the drop
    //  down lists.
    for (var i = 0; document.getElementById('queryForm').Database.length > i; i++)
    {
        if (document.getElementById('queryForm').Database[i].checked)
        {
            var checkValue = document.getElementById('queryForm').Database[i].value;
            if (checkValue in dataSetConversionList)
            {
                // look at every database in the list.
                var items = dataSetConversionList[checkValue].split(",");
                for (var j = 0; items.length > j; j++)
                {
                    items[j] = items[j].toLowerCase();
                    // if database is not in the list then add
                    if (!(items[j] in seenData))
                    {
                        seenData[items[j]] = "";
                        databaseValue[databaseValue.length] = [items[j]];
                    }
                }
            }
        }
    }

    // Check if any dataset options are selected.
    for (var i = 0; document.getElementById('queryForm').Dataset.length > i; i++)
    {
        if (document.getElementById('queryForm').Dataset[i].checked)
        {
            var checkValue = document.getElementById('queryForm').Dataset[i].value;
            if (checkValue in dataSetConversionList)
            {
                // look at every database in the list.
                var items = dataSetConversionList[checkValue].split(",");
                for (var j = 0; items.length > j; j++)
                {
                    items[j] = items[j].toLowerCase();
                    // if database is not in the list then add
                    if (!(items[j] in seenData))
                    {
                        seenData[items[j]] = "";
                        databaseValue[databaseValue.length] = [items[j]];
                    }
                }
            }
        }
    }

    if (databaseValue.length == 0 ||
        databaseValue.length == recList.length ||
        databaseValue[0][0] == "")
    {
      databaseValue[0] = ["ALL"];
    }

    populateList(databaseValue.length, databaseValue);

}

function changeUsing(num)
{
    var list = document.getElementById("fieldname" + num);
    var item = list.value.toLowerCase().split("_");
    if ("phrase" == item[item.length - 1])
    {
        var option = document.getElementById("fieldtype" + num);
        for (var i = 0; option.length > i; i++)
        {
            if (option[i].value == "the exact phrase")
            {
                option[i].selected = true;
            }
            else
            {
                option[i].selected = false;
            }

        }
    }
}

function expandAll()
{
    var checkBase = document.getElementById('queryForm').Database;
    for (var i = 0; checkBase.length > i; i++)
    {
        expandList(checkBase[i].id);
    }

    changeList();
}

function expandList(id)
{
    var item = document.getElementById(id);
    var ulNode = item.parentNode;
    var found = false;
    for (var i = 0; ulNode.childNodes.length > i; i++)
    {
        if (ulNode.childNodes[i].nodeName == "UL")
        {
            if (!Element.visible(ulNode.childNodes[i]))
            {
                toggle(ulNode.childNodes[i].up().down("img"));
            }
            var listNode = ulNode.childNodes[i];
            for (var j = 0; listNode.childNodes.length > j; j++)
            {
                if (listNode.childNodes[j].nodeName == "LI")
                {
                    var liNode = listNode.childNodes[j];
                    for (var k = 0; liNode.childNodes.length > k; k++)
                    {
                        if (liNode.childNodes[k].nodeName == "INPUT")
                        {
                            if (liNode.childNodes[k].id != "")
                            {
                                var boxid = liNode.childNodes[k].id;
                                expandList(boxid);
                            }
                        }
                    }
                }
            }
        }
    }

}



function collapseAll()
{
    var checkBase = document.getElementById('queryForm').Database;
    for (var i = 0; checkBase.length > i; i++)
    {
        collapseList(checkBase[i].id);
    }

    changeList();
}

function collapseList(id)
{
    var item = document.getElementById(id);
    var ulNode = item.parentNode;
    var found = false;
    for (var i = 0; ulNode.childNodes.length > i; i++)
    {
        if (ulNode.childNodes[i].nodeName == "UL")
        {
            if (Element.visible(ulNode.childNodes[i]))
            {
                toggle(ulNode.childNodes[i].up().down("img"));
            }
            var listNode = ulNode.childNodes[i];
            for (var j = 0; listNode.childNodes.length > j; j++)
            {
                if (listNode.childNodes[j].nodeName == "LI")
                {
                    var liNode = listNode.childNodes[j];
                    for (var k = 0; liNode.childNodes.length > k; k++)
                    {
                        if (liNode.childNodes[k].nodeName == "INPUT")
                        {
                            if (liNode.childNodes[k].id != "")
                            {
                                var boxid = liNode.childNodes[k].id;
                                collapseList(boxid);
                            }
                        }
                    }
                }
            }
        }
    }

}

function setChecks(list)
{

    var checkSet = document.getElementById('queryForm').Dataset;
    var checkBase = document.getElementById('queryForm').Database;
    for (var i = 0; checkBase.length > i; i++)
    {
        checkBase[i].checked = false;
    }
    for (var i = 0; checkSet.length > i; i++)
    {
        checkSet[i].checked = false;
        Field.enable(checkSet[i]);
    }



    for (var i = 0; checkBase.length > i; i++)
    {
        var dbid = checkBase[i].id;
        checkProfileCheck(dbid, list);
    }

    return true;
}

function look(checkid, checkList)
{
    var id = checkid.split("/")[checkid.split("/").length - 1];
    var item = document.getElementById(id);
    var ulNode = item.up();
    var found = false;
    for (var i = 0; ulNode.childNodes.length > i; i++)
    {
        if (ulNode.childNodes[i].nodeName == "UL")
        {
            ulNode = ulNode.childNodes[i];
            found = true;
        }
    }

    if (found)
    {

        for (var i = 0; ulNode.childNodes.length > i; i++)
        {
            if (ulNode.childNodes[i].nodeName == "LI")
            {
                var liNode = ulNode.childNodes[i];
                for (var j = 0; liNode.childNodes.length > j; j++)
                {
                    if (liNode.childNodes[j].nodeName == "INPUT")
                    {
                        if (liNode.childNodes[j].id != "")
                        {
                            var boxid = liNode.childNodes[j].id;
                            checkProfileCheck(checkid + "/" + boxid, checkList);
                        }
                    }
                }
            }
        }
    }


}


function checkProfileCheck(checkid, checkList)
{
    var rootItem = checkid.split("/")[0];
    var specialGroup = false;
    var list = dataSetConversionList[checkid].split(",");
    var inIt = true;
    var id = checkid.split("/")[checkid.split("/").length - 1];

    /* Check for spcial case where selection is on of a group of items
       which share the exact same dataset collection */
    for (var k = 0; checkList.length > k; k++)
    {
        if (checkList[k] == (rootItem + "/" + id))
        {
            specialGroup = true;
        }
    }

    for (var j = 0; list.length > j; j++)
    {
        var outIt = false;
        for (var k = 0; checkList.length > k; k++)
        {
            if (list[j] == checkList[k][0])
            {
                outIt = true;
            }
            else if (checkList[k][0].split("/").length > 1 &&
                     checkList[k][0].split("/")[1] == id)
            {
                outIt = true;
            }
        }
        if (!outIt)
        {
            inIt = false;
        }
    }
    if (inIt)
    {
        /* Bills specific test - so far bills are the only group with multiple
           items with the same datasets. */
        if ((rootItem == "billsLegi" && specialGroup) ||
            (rootItem != "billsLegi"))
        {
            var item = document.getElementById(id);
            item.checked = true;
            checkBox(item);
        }
        else
        {
            look(checkid, checkList);
        }
    }
    else
    {
        look(checkid, checkList);
    }

    return true;
}

function clearDateFields(form)
{
	// clear the date values when a predefined date selection is selected.
	// Don't clear the dates entered if the user is selecting the "No Selection" option.
	if ( form.sysDate.options[form.sysDate.selectedIndex].value != "none" ) {
		form.dateFrom.value = "";
		form.dateTo.value = "";
	}
}

function resetQuery()
{

  document.getElementById("searchText").value = '';
  document.getElementById("field1").value = '';
  document.getElementById("fieldname1").value = document.getElementById("fieldname1")[0].value;
  var i = 0;
  var setHere = 0;
  while (i < document.getElementById("fieldtype1").length)
  {
    if (document.getElementById("fieldtype1")[i].defaultSelected)
    {
      setHere = i;
      break;
    }
    i++;
  }
  document.getElementById("fieldtype1").value = document.getElementById("fieldtype1")[setHere].value;
  document.getElementById("field2").value = '';
  document.getElementById("fieldname2").value = document.getElementById("fieldname2")[0].value;
  i = 0;
  setHere = 0;
  while (i < document.getElementById("fieldtype2").length)
  {
    if (document.getElementById("fieldtype2")[i].defaultSelected)
    {
      setHere = i;
      break;
    }
    i++;
  }
  document.getElementById("fieldtype2").value = document.getElementById("fieldtype2")[setHere].value;
  document.getElementById("field3").value = '';
  document.getElementById("fieldname3").value = document.getElementById("fieldname3")[0].value;
  i = 0;
  setHere = 0;
  while (i < document.getElementById("fieldtype3").length)
  {
    if (document.getElementById("fieldtype3")[i].defaultSelected)
    {
      setHere = i;
      break;
    }
    i++;
  }
  document.getElementById("fieldtype3").value = document.getElementById("fieldtype3")[setHere].value;
  document.getElementById("dateFrom").value = '';
  document.getElementById("dateTo").value = '';
  document.getElementById("searchText2").value = '';

  document.getElementById("sysDate").value = document.getElementById("sysDate")[0].value;
  document.getElementById("resultsPerPage").value = document.getElementById("resultsPerPage")[0].value;
  document.getElementById("orderBy").value = document.getElementById("orderBy")[0].value;

}

