﻿var SEPERATOR = ", ";

function ExpandTree(CLIENTID, sID, bSelectChildren) 
{
    var bExpanded;
    var oDiv;
    var imgX;
    var bParentChecked;
    var chkX;

    imgX = document.getElementById("img" + CLIENTID + "_" + sID);

    if (!bSelectChildren) 
    {
        oDiv = document.getElementById("div" + CLIENTID + '_' + sID);
        if (oDiv.style.display == 'block') 
        {
            oDiv.style.display = 'none';
            imgX.src = "images/expand.gif"
        }
        else 
        {
            oDiv.style.display = 'block';
            imgX.src = "images/expanded.gif"
        }
    }
    else 
    {
        bParentChecked = document.getElementById("chk" + CLIENTID + '_' + sID).checked;
        SetCheckboxes(CLIENTID, sID, bParentChecked)
    }

}

function SetAllCheckboxes(CLIENTID,bChecked) {
    var nElement;
    var nElements;
    var schkXID;
    var sParentIDs;
    var oLyr;
    var oElements;

    oLyr = document.getElementById('lyr' + CLIENTID);
    oElements = oLyr.getElementsByTagName('input');

    nElements = oElements.length;

    for (nElement = 0; nElement < nElements; nElement++) 
    {
        if (oElements[nElement].type == 'checkbox') 
        {
            if (oElements[nElement].id.indexOf(CLIENTID) >= 0) 
            {
                oElements[nElement].checked = bChecked;
            }
        }
    }
}

function SetCheckboxes(CLIENTID, sParentID, bChecked) 
{
    var nElement;
    var nElements;
    var schkXID;
    var sParentIDs;
    var oLyr;
    var oElements;

    if (bChecked) { OpenNode(CLIENTID, sParentID); }

    sParentIDs = "." + sParentID + ".";

    oLyr = document.getElementById('lyr' + CLIENTID);
    oElements = oLyr.getElementsByTagName('input');
    nElements = oElements.length;

    for (nElement = 0; nElement < nElements; nElement++) 
    {
        if (oElements[nElement].type == 'hidden') 
        {
            if (sParentIDs.indexOf("." + oElements[nElement].value + ".") >= 0)
            {
                schkXID = oElements[nElement].id.split("_")[oElements[nElement].id.split("_").length - 1];
                chkX = document.getElementById("chk" + CLIENTID + '_' + schkXID);
                chkX.checked = bChecked;
                sParentIDs = sParentIDs + schkXID + ".";
                if (bChecked) { OpenNode(CLIENTID, schkXID); }
            }
        }
    }
}

function OpenNode(CLIENTID, sID) 
{
    var imgX;
    var oDiv;
    
    oDiv = document.getElementById("div" + CLIENTID + '_' + sID);
    imgX = document.getElementById("img" + CLIENTID + "_" + sID);

    if (!(oDiv == null)) { oDiv.style.display = 'block'; }
    if (!(imgX == null)) {imgX.src = "images/expanded.gif"; }
}

function GetSelectText(CLIENTID) {
    var txtX;
    var sText;

    txtX = document.getElementById(CLIENTID + '_hidPleaseSelect');
    sText = txtX.value;

    return (sText);
}

function Repopulate(CLIENTID) {
    var sIDs;
    var asIDs;
    var nID;
    var nIDs;

    //reselect anything that was previously selected
    sIDs = GetSelectionPart(CLIENTID);

    if (sIDs != '') {
        asIDs = sIDs.split(',');
        nIDs = asIDs.length;

        for (nID = 0; nID < nIDs; nID++) {
            // must try because item may be a child which hasnt been created yet
            try {
                document.getElementById('chk' + CLIENTID + '_' + asIDs[nID]).checked = true;
            }
            catch (e) { }
        }
    }
}

function SubmitWindow(CLIENTID) {
    var sIDs = '';
    var sNames = '';
    var sPairs = '';

    ResolveSelections(CLIENTID);
    GetSelections(CLIENTID);
    sNames = GetSelectionPart(CLIENTID, true);

    document.getElementById(CLIENTID + '_spanX').innerHTML = sNames;

    try {
        RefreshCounts();
    }
    catch (e) { }

    hideAllLayers();
    return true;
}

function GetSelectionPart(CLIENTID, bNames) {
    var nPair;
    var sPairs;
    var asPairs;
    var sRes = '';
    var sID;
    var sName;

    sPairs = document.getElementById(CLIENTID + '_hidIDs').value;

    if (sPairs != '') {
        asPairs = sPairs.split(PAIR_SEPERATOR);

        for (nPair = 0; nPair < asPairs.length; nPair++) {
            sID = asPairs[nPair].split(KEYVALUE_SEPERATOR)[0];
            sName = asPairs[nPair].split(KEYVALUE_SEPERATOR)[1];

            if (bNames) {
                if (sRes == '') { sRes = sName } else { sRes = sRes + SEPERATOR + sName; }
            }
            else {
                if (sRes == '') { sRes = sID } else { sRes = sRes + ',' + sID; }
            }
        }
    }

    return (sRes);
}

function GetSelections(CLIENTID) {
    var i;
    var sName = '';
    var sNames = '';
    var sID = '';
    var sPair = '';
    var sPairs = '';
    var oLyr;
    var oElements;

    oLyr = document.getElementById('lyr' + CLIENTID);
    oElements = oLyr.getElementsByTagName('input');

    for (i = 0; i < oElements.length; i++) {

        if (oElements[i].id.indexOf('chk' + CLIENTID + '_') >= 0) {
            if (oElements[i].checked) {

                sID = oElements[i].id;
                sID = sID.replace('chk' + CLIENTID + '_', '');
                sName = document.getElementById('hid' + CLIENTID + '_' + sID).value;
                sPair = sID + KEYVALUE_SEPERATOR + sName;

                if (sPairs == '') { sPairs = sPair } else { sPairs = sPairs + PAIR_SEPERATOR + sPair; }
            }
        }
    }

    document.getElementById(CLIENTID + '_hidIDs').value = sPairs;
}

function Node(sID, sParentID, bChecked, bProcessed) 
{
    this.ID = sID;
    this.ParentID = sParentID;
    this.Checked = bChecked;
    this.Processed = bProcessed;
}

function ResolveSelections(CLIENTID) {
    var oLyr;
    var oElement;
    var oElements;
    var nElement;
    var sID;
    var sParentID;
    var txtParentID;
    var aNodes;
    var aNode;
    var nElement;
    var nNode=0;
    var bDone = false;
    
    aNodes = new Array();

    oLyr = document.getElementById('lyr' + CLIENTID);
    oElements = oLyr.getElementsByTagName('input');

    // gather all checkboxes in array for quicker and easier processing
    for (nElement = 0; nElement < oElements.length; nElement++) 
    {
        oElement = oElements[nElement];
        if (oElement.type == 'checkbox') 
        {
            sID = oElement.id.split("_")[oElement.id.split("_").length - 1];
            txtParentID = document.getElementById("hidParent" + CLIENTID + "_" + sID);
            if (txtParentID != null) 
            {
                sParentID = txtParentID.value;
            }
            aNodes[nNode++] = new Node(sID, sParentID, oElement.checked, false);
        }
    }

    while (!bDone) 
    {
      bDone = true;
      //for each one check its children
      for (nElement = 0; nElement < aNodes.length; nElement++)
      {
        aNode = aNodes[nElement];
        if ((!aNode.Processed) && (AllChildrenSelected(aNodes, aNode)))
        {
          //deselect all children
          DeselectAllChildren(aNodes, aNode.ID, CLIENTID)
          //select parent
          chkX = document.getElementById("chk" + CLIENTID + "_" + aNode.ID);
          chkX.checked = true;
          bDone = false;
          //flag processed
          aNode.Processed = true;
        }
      }
    }
}

function AllChildrenSelected(aNodes, aNodeP)
{
    var nNode;
    var aNode;
    var bRes=false;
    var bBottomLevel = true;
    var sParentID;

    sParentID = aNodeP.ID;
    
    for (nNode = 0; nNode < aNodes.length; nNode++) 
    {
        aNode = aNodes[nNode];
        if (aNode.ParentID == sParentID) 
        {
            bBottomLevel = false;
            bRes = (true) && (AllChildrenSelected(aNodes, aNode));
            if (!aNode.Checked) {bRes = false;  break; }
        }
    }

    if (bBottomLevel) { bRes = aNodeP.Checked; }
    
    return (bRes);
}

function DeselectAllChildren(aNodes,sParentID, CLIENTID)
{
    var nNode;
    var aNode;
    var bRes = true;
    var chkX;
    
    for (nNode = 0; nNode < aNodes.length; nNode++) 
    {
        aNode = aNodes[nNode];
        if (aNode.ParentID == sParentID) 
        {
            chkX = document.getElementById("chk" + CLIENTID + "_" + aNode.ID);
            chkX.checked = false;
            aNode.Processed = true;
            DeselectAllChildren(aNodes, aNode.ID, CLIENTID)
        }
    }
}

function FindNodeByID(aNodes, sID) 
{
    var oRes;

    for (nNode = 0; nNode < aNodes.length; nNode++) 
    {
        aNode = aNodes[nNode];
        if (aNode.ID == sID) 
        {
            oRes = aNode;
            break;
        }
    }

    return oRes;
}