function MM_swapImgRestore() { //v3.0
    var i, x, a = document.MM_sr; for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++) x.src = x.oSrc;
}
function MM_preloadImages() { //v3.0
    var d = document; if (d.images) {
        if (!d.MM_p) d.MM_p = new Array();
        var i, j = d.MM_p.length, a = MM_preloadImages.arguments; for (i = 0; i < a.length; i++)
            if (a[i].indexOf("#") != 0) { d.MM_p[j] = new Image; d.MM_p[j++].src = a[i]; }
    }
}

function MM_findObj(n, d) { //v4.01
    var p, i, x; if (!d) d = document; if ((p = n.indexOf("?")) > 0 && parent.frames.length) {
        d = parent.frames[n.substring(p + 1)].document; n = n.substring(0, p);
    }
    if (!(x = d[n]) && d.all) x = d.all[n]; for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
    for (i = 0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n, d.layers[i].document);
    if (!x && d.getElementById) x = d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
    var i, j = 0, x, a = MM_swapImage.arguments; document.MM_sr = new Array; for (i = 0; i < (a.length - 2); i += 3)
        if ((x = MM_findObj(a[i])) != null) { document.MM_sr[j++] = x; if (!x.oSrc) x.oSrc = x.src; x.src = a[i + 2]; }
}

var treeviewDivID = 'treeView';
function OnCheckBoxCheckChanged(evt) {

    var obj = window.event != window.undefined ? window.event.srcElement : evt.target;
    var isChkBoxClick = (obj.tagName.toLowerCase() == "input" && obj.type == "checkbox");

    /*
    var isExpandImageClick = (obj.tagName.toLowerCase() == "img") && obj.alt.toLowerCase().substring(0, 6) == "expand";

    var prevExpandingNode;
    var prevExpandingNodeSrc;
    var prevExpandingNodeAlt;

    if (isExpandImageClick) {
    if (prevExpandingNode != undefined) {
    if (prevExpandingNode.alt == "Loading ...") {
    prevExpandingNode.src = prevExpandingNodeSrc;
    prevExpandingNode.alt = prevExpandingNodeAlt;
    }
    }

    prevExpandingNode = obj;
    prevExpandingNodeSrc = obj.src;
    prevExpandingNodeAlt = obj.alt;
    obj.src = "assets/images/loading.gif";
    obj.alt = "Loading ...";
    }
    */


    if (isChkBoxClick) {
        var link = GetNextSibling(obj)

        //if (link != null && link.tagName.toLowerCase() == "a")
            //link.style.fontWeight = obj.checked ? "bold" : "normal";

        var parentTable = GetParentByTagName("table", obj);
        var nxtSibling = parentTable.nextSibling;
        if (nxtSibling && nxtSibling.nodeType == 1)//check if nxt sibling is not null & is an element node
        {
            if (nxtSibling.tagName.toLowerCase() == "div") //if node has children
            {
                //check or uncheck children at all levels
                CheckUncheckChildren(nxtSibling, obj.checked);

                //if (obj.checked)
                eval(link.href);

                //nxtSibling.style.display = obj.checked ? "block" : "none";

            }
        }
        //check or uncheck parents at all levels
        CheckUncheckParents(obj, obj.checked);

        var locationSelect = document.getElementById("ctl00_QuickSearch_Location");
        var locationCount = CheckedChildrenCount();

        locationSelect.value = "(" + CheckedChildrenCount() + ") " + (locationCount > 1 ? "Locations" : "Location") + " Selected";
    }
}

function GetNextSibling(currentObject) {
    var nxt = currentObject;
    do nxt = nxt.nextSibling;
    while (nxt && nxt.nodeType != 1);
    return nxt;
}

function CheckUncheckChildren(childContainer, check) {
    var childChkBoxes = childContainer.getElementsByTagName("input");
    var childChkBoxCount = childChkBoxes.length;
    for (var i = 0; i < childChkBoxCount; i++) {
        childChkBoxes[i].checked = check;
    }
}

function CheckedChildrenCount() {
    var checkedChildrenCount = 0;

    var container = document.getElementById(treeviewDivID);

    var childChkBoxes = container.getElementsByTagName("input");
    var childChkBoxCount = childChkBoxes.length;
    for (var i = 0; i < childChkBoxCount; i++) {
        var nxt = GetNextSibling(childChkBoxes[i]);

        if (nxt != null && nxt.tagName.toLowerCase() == "span" && childChkBoxes[i].checked) checkedChildrenCount++;
    }
    return checkedChildrenCount;
}

function CheckUncheckParents(srcChild, check) {
    var parentDiv = GetParentByTagName("div", srcChild);
    var parentNodeTable = parentDiv.previousSibling;

    if (parentNodeTable) {
        var checkUncheckSwitch;

        if (check) //checkbox checked
        {
            var isAllSiblingsChecked = AreAllSiblingsChecked(srcChild);
            if (isAllSiblingsChecked)
                checkUncheckSwitch = true;
            else
                return; //do not need to check parent if any(one or more) child not checked
        }
        else //checkbox unchecked
        {
            checkUncheckSwitch = false;
        }

        var inpElemsInParentTable = parentNodeTable.getElementsByTagName("input");
        if (inpElemsInParentTable.length > 0) {
            var parentNodeChkBox = inpElemsInParentTable[0];
            parentNodeChkBox.checked = checkUncheckSwitch;

            //do the same recursively
            CheckUncheckParents(parentNodeChkBox, checkUncheckSwitch);
        }
    }
}
function AreAllSiblingsChecked(chkBox) {
    var parentDiv = GetParentByTagName("div", chkBox);
    var childCount = parentDiv.childNodes.length;
    for (var i = 0; i < childCount; i++) {
        if (parentDiv.childNodes[i].nodeType == 1) //check if the child node is an element node
        {
            if (parentDiv.childNodes[i].tagName.toLowerCase() == "table") {
                var prevChkBox = parentDiv.childNodes[i].getElementsByTagName("input")[0];
                //if any of sibling nodes are not checked, return false
                if (prevChkBox != null && !prevChkBox.checked) {
                    return false;
                }
            }
        }
    }
    return true;
}

function TreeviewExpandCollapseAll(treeViewId, expandAll) {
    var displayState = (expandAll == true ? "none" : "block");
    var treeView = document.getElementById(treeViewId);

    if (treeView) {
        CheckUncheckChildren(treeView, false);

        var locationSelect = document.getElementById("ctl00_QuickSearch_Location");
        locationSelect.value = "Select Location";

        var treeLinks = treeView.getElementsByTagName("a");
        var nodeCount = treeLinks.length;

        for (i = 0; i < nodeCount; i++) {
            if (treeLinks[i].firstChild.tagName) {
                if (treeLinks[i].firstChild.tagName.toLowerCase() == "img") {
                    var currentToggleLink = treeLinks[i];
                    var childContainer = GetParentByTagName("table", currentToggleLink).nextSibling;

                    if (childContainer.style.display == displayState) {
                        eval(currentToggleLink.href);
                    }
                }
            }
        } //for loop ends
    }
}

//utility function to get the container of an element by tagname
function GetParentByTagName(parentTagName, childElementObj) {
    var parent = childElementObj.parentNode;

    while (parent.tagName.toLowerCase() != parentTagName.toLowerCase()) {
        parent = parent.parentNode;
    }
    return parent;
}

function toggleTreeViewDiv(ev, hide) {
    var treeViewDiv = document.getElementById(treeviewDivID);

    //TreeviewExpandCollapseAll("ctl00_QuickSearch_LocationTreeView", false);

    treeViewDiv.style.display = (hide == null && treeViewDiv.style.display == "none") || hide == false ? "" : "none";

    ev = ev ? ev : window.event;
    if (ev) ev.cancelBubble = true;
}

function DocumentOnMousedown(ev) {
    // hide treeview when mousedown event 
    // comes from any element except treeview child elements
    var eventSrc = ev && ev.target ? ev.target : event.srcElement;
    var treeviewElement = document.getElementById(treeviewDivID);
    while (eventSrc) {
        if (eventSrc == treeviewElement) return;
        eventSrc = eventSrc.parentNode;
    }

    toggleTreeViewDiv(ev, true);
}

