﻿/* JavaScript Document
* Contains methods used by the drop down controls, i.e. Job Search & Talent Bank
*/


window.onload = function() {
    init();
}
// sets all the checkboxes to be checked & highlighted that should be
function init() {
    var codes_holder = document.getElementById("ctl00_MCPH_JSC_codes_holder");
    var divArr = codes_holder.getElementsByTagName("div");
    var count = 0;
    for (var i = 0; i < divArr.length; i++) {
        if (divArr[i].className == "tree_click_div") {
            count++;
            var checkboxes = divArr[i].nextSibling.getElementsByTagName("input");
            for (var j = 0; j < checkboxes.length; j++) {
                if (checkboxes[j].checked) nodeSelected(checkboxes[j]);
            }
        }
    }
}
// causes any click to fire the doc_click function
document.onclick = doc_click;

var drop_clicked = false;
var header_clicked = false;
var list_clicked = false;

// closes other tree divs provided that a drop down hasn't been clicked
function doc_click() {
    if (!drop_clicked) closeOtherTreeDivs();
    drop_clicked = false;
}
// toggle drop_clicked flag, reset other flags
function drop_click() {
    if (!header_clicked) drop_clicked = true;
    header_clicked = false;
}
// toggle header_clicked flag
function header_click() {
    header_clicked = true;
}
// hide current list
function closeList() {
    var list = document.getElementById("list");
    list.style.display = "none";
}
// hides all tree divs
function closeOtherTreeDivs() {
    var codes_holder = document.getElementById("ctl00_MCPH_JSC_codes_holder");
    var divArr = codes_holder.getElementsByTagName("div");
    for (var i = 0; i < divArr.length; i++) {
        if (divArr[i].className == "tree_click_div" || divArr[i].className == "tree_click_div_active") {
            divArr[i].nextSibling.className = "hiddenTreeView";
        }
    }
    return true;
}
// shows children of selected parent, shuffles parent to top if child list too long
function showChildren(expander) {
    var active = "";
    if (expander.className.indexOf("active") != -1) active = "_active";
    expander.className = expander.className.indexOf("open") == -1 ? "parentStyle_open" + active : "parentStyle" + active;
    expander.nextSibling.className = expander.nextSibling.className == "hidden" ? "childNodesHolder" : "hidden";
    expander.parentNode.scrollTop = expander.offsetTop;
}
// sets the style of the selected child dependent upon the state of its checkbox
function nodeSelected(checkbox) {
    checkbox.parentNode.className = checkbox.checked ? "colourHighlight" : "";
    checkbox.parentNode.style.fontWeight = checkbox.checked ? "bold" : "normal";
    toggleParent(checkbox);
    countChecks(checkbox);
}
// toggle style of parent dependent upon number of children checked
function toggleParent(checkbox) {
    var checkboxArr = checkbox.parentNode.parentNode.getElementsByTagName("input");
    var anyChildChecked = false;
    for (var i = 0; i < checkboxArr.length; i++) {
        if (checkboxArr[i].checked) {
            anyChildChecked = true;
            break;
        }
    }
    var classSet = "parentStyle";
    if (checkbox.parentNode.parentNode.previousSibling.className.indexOf("open") != -1) classSet += "_open";
    checkbox.parentNode.parentNode.previousSibling.className = anyChildChecked ? classSet + "_active" : classSet;
}
// counts number of checked children and updates the DropDowns header with number of options selected
function countChecks(checkbox) {
    var label = checkbox.parentNode.parentNode.parentNode.previousSibling;
    var checkboxArr = checkbox.parentNode.parentNode.parentNode.getElementsByTagName("input");
    var checkedCount = 0;
    for (var i = 0; i < checkboxArr.length; i++) {
        if (checkboxArr[i].checked) checkedCount++;
    }
    if (checkedCount < 1) {
        label.innerHTML = "Select an option";
        label.className = "tree_click_div";
    } else {
        label.className = "tree_click_div_active";
        if (checkedCount == 1) label.innerHTML = "1 option selected";
        else label.innerHTML = checkedCount + " options selected";
    }
}
// show/hide child div
function toggleOptions(clickDiv) {
    var treeViewDiv = clickDiv.nextSibling;
    var visible = treeViewDiv.className == "visibleTreeView";
    if (closeOtherTreeDivs()) {
        if (visible) treeViewDiv.className = "hiddenTreeView";
        else treeViewDiv.className = "visibleTreeView";
    }
}
