﻿/** functions below work with checkboxTree **/

var _cbSetFlag = false;

function setTreeCheckboxes() {
    if (!_cbSetFlag) {
        //var $ = $telerik.$;
        Telerik.Web.UI.RadTreeNode.prototype.get_checkBoxElement = function() {
            var checkBoxElement = $telerik.$(".rtChk input[type='checkbox']", this.get_textElement())[0];
            return checkBoxElement;
        }
        _cbSetFlag = true;
    }
}

function clientNodeClicked(sender, eventArgs) {
    var node = eventArgs.get_node();
    node.set_checked(!node.get_checked());
    clientNodeChecked(sender, eventArgs);    
}

function clientNodeChecked(sender, eventArgs) {
    var node = eventArgs.get_node();    
    setParentChildrenNodeChecked(node);
    setTopOptionText(sender);    
}

function setParentChildrenNodeChecked(node) {
    var childNodes = node.get_nodes();
    var isChecked = node.get_checked();

    if (isChecked)
        node.set_expanded(true);

    UpdateAllChildren(childNodes, isChecked);

    var _parent;
    if (!node.get_checked()) {
        while (node.get_parent().set_checked != null) {
            node.get_parent().set_checked(false);
            node = node.get_parent();
        }
    }
    else {
        while (node.get_parent().set_checked != null) {
            _parent = node.get_parent();
            if (allChildrenChecked(_parent))
                _parent.set_checked(true);
            node = _parent;
        }
    }
}

function setTopOptionText(tree) {
    setTopOptionText(tree, false)
}

function setTopOptionText(tree,firstTimeLoad) {
    var nodeCount = 0;
    var nodes = tree.get_allNodes();
    for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].get_checked() && nodes[i].get_value() != "-1") {
            nodeCount++;
        }
    }

    if (!firstTimeLoad) {
        var comboBox = getComboByTree(tree);
            
        if (nodeCount <= 0) {
            var _topOptionDefaultText = eval(comboBox.get_id() + "_TopOptionText");
            comboBox.set_text(_topOptionDefaultText);
        }
        else {
            var _topOptionsSelectedText = eval(comboBox.get_id() + "_xOptionsSelected");
            comboBox.set_text(_topOptionsSelectedText.replace("[PH_X]", nodeCount));
        }
        comboBox.trackChanges();
        comboBox.commitChanges();
    }
}


function UpdateAllChildren(nodes, checked) {
    var i;
    for (i = 0; i < nodes.get_count(); i++) {
        if (checked) {
            nodes.getNode(i).check();
        }
        else {
            nodes.getNode(i).set_checked(false);
        }

        if (nodes.getNode(i).get_nodes().get_count() > 0) {
            UpdateAllChildren(nodes.getNode(i).get_nodes(), checked);
        }
    }
}
function allChildrenChecked(node) {
    var i;
    var nodes;
    nodes = node.get_nodes();
    for (i = 0; i < nodes.get_count(); i++) {
        if (!nodes.getNode(i).get_checked()) {
            return false;
        }
        if (!allChildrenChecked(nodes.getNode(i))) {
            return false;
        }
    }
    return true;
}

function OnClientDropDownOpenedHandler(sender, eventArgs) {
    var tree = sender.get_items().getItem(0).findControl("rtvMasterList");

    if (tree == null) {
        var _cbId = sender.get_id();
        _cbId = _cbId.replace(new RegExp("_", "g"), "$");
        _cbId += "$i0$btnShowTree";
        WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(_cbId, "", true, "", "", false, true));
    }
    else {
        initTree(tree, false);
    }
}

function clientLoadCalled(sender, eventArgs) {
    setTreeCheckboxes();
    initTree(sender, true);
}

function initTree(tree, bFirstTime) {
    var treeControl = document.getElementById(tree.get_id());
    var checkBox;
    if (treeControl.getElementsByTagName("input").length > 0) {
        firstCheckBox = treeControl.getElementsByTagName("input")[0];
        if (firstCheckBox && firstCheckBox != null && firstCheckBox != undefined) {
            if (bFirstTime)
                setTimeout("try {firstCheckBox.focus();}catch (e){}", 150);
            else
                firstCheckBox.focus();
        }
    }



    var selectedNode = tree.get_selectedNode();
    if (selectedNode) {
        selectedNode.scrollIntoView(true);
    }
}    

function clientTreeKeyPressed(sender, eventArgs) {
    var Key = eventArgs.get_domEvent().keyCode;

    //esc key handler - hide tree if esc/tab key is pressed
    
    if (Key == 27 || Key == 9) {    
        var comboBox = getComboByTree(sender);
        comboBox.hideDropDown();

        var comboControl = document.getElementById(comboBox.get_id());

        var comboInputControl;

        if (comboControl.getElementsByTagName("input").length > 0) {
            comboInputControl = comboControl.getElementsByTagName("input")[0];
            comboInputControl.focus();
        }        
    }    
}

function getComboByTree(tree) {    
    var comboId = tree.get_id().replace("_i0_rtvMasterList", "");    
    var comboBox = $find(comboId);
    return comboBox;
}

function OnClientKeyPressingHandler(sender, eventArgs) {
    var Key = eventArgs.get_domEvent().keyCode;    
    if (Key == 38 || Key == 40) {
        sender.toggleDropDown();        
    }
}
//Add this method to Combobox's load event, in order to activate client load
function clientLoadHandler(sender) {
    var tree = sender.get_items().getItem(0).findControl("rtvMasterList");
    var nodes = tree.get_allNodes();    
    for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].get_checked()) {
            nodes[i].set_checked(true);
            setParentChildrenNodeChecked(nodes[i]);
        }
    }
    setTopOptionText(tree,true);
}
