﻿/** functions below work with checkboxTree **/

Telerik.Web.UI.RadTreeNode.prototype.get_checkBoxElement = function() {
    var checkBoxElement = $telerik.$(".rtChk input[type='checkbox']", this.get_textElement())[0];
    return checkBoxElement;
}

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");

    var treeControl = document.getElementById(tree.get_id());

    var checkBox;

    if (treeControl.getElementsByTagName("input").length > 0) {
        firstCheckBox = treeControl.getElementsByTagName("input")[0];
        firstCheckBox.focus();
    }
    
    //document.getElementById(tree.get_id()).focus();
    
    var selectedNode = tree.get_selectedNode();
    if (selectedNode) {
        selectedNode.scrollIntoView(true);
    }
    //clientLoadHandler(tree);
}

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);
}