﻿/*----------------------------------------------------------------------------

Javascript for use in the tree/CSMS

----------------------------------------------------------------------------*/

// TREE
function AddSelectedNodes(sender, selectedIDs) {
    var selectedNodes = sender.get_selectedNodes();
    if (selectedNodes != null && selectedNodes.length > 0) {
        var i; var selected = null;
        for (i = 0; i < selectedNodes.length; i++) {
            if (selected == null) {
                selected = GetNodeDetails(selectedNodes[i]);
            }
            else {
                selected = selected + '|' + GetNodeDetails(selectedNodes[i]);
            }
        }
        selectedIDs.value = selected;
    }
}

function GetNodeType(nCategory) {
    var nType = nCategory.split(',');
    return nType;
}

function GetParentDetails(node) {
    var strParentDetails = node.get_attributes().getAttribute('T1') + ':' + node.get_value();
    if (node.get_level() > 0) {
        strParentDetails = GetParentDetails(node.get_parent()) + '/' + strParentDetails;
    }
    return strParentDetails;
}

function GetNodeDetails(node) {
    var strNodeDetails = null;
    if (node.get_level() > 0) {
        strNodeDetails = GetParentDetails(node.get_parent())
    }
    if (strNodeDetails != null && strNodeDetails.length > 0) {
        strNodeDetails = strNodeDetails + '/' + node.get_attributes().getAttribute('T1') + ':' + node.get_value() + ';' + node.get_attributes().getAttribute('T1') + ',' + node.get_attributes().getAttribute('T2') + ',' + node.get_attributes().getAttribute('T3');
    }
    else {
        strNodeDetails = node.get_attributes().getAttribute('T1') + ':' + node.get_value() + ';' + node.get_attributes().getAttribute('T1') + ',' + node.get_attributes().getAttribute('T2') + ',' + node.get_attributes().getAttribute('T3');
    }
    return strNodeDetails;
}

function nContext(source, args, hdnContextID) {
    hdnContextID.value = args.get_menuItem().get_value() + '%' + GetNodeDetails(args.get_node());
}

function isNodeCheckable(node) {
    if (node.get_checkBoxElement() == null) {
        return false;
    }
    else {
        return true;
    }
}

function checkNodesonPostBack(tree) {
    var i;
    for (i = 0; i < tree.get_allNodes().length; i++) {
        if (tree.get_allNodes()[i].get_checked() == true) {
            checkNode(tree.get_allNodes()[i]);
        }
    }
}

function OpenNewWindow(strValue) {
    window.open(strValue);
}

function CheckNodesFromHdnField(HdnField, Tree, HdnUpdateCheckedIDs) {
    var tree = $find(Tree);
    var hdnCheckedIDs = $get(HdnField);
    var hdnUpdateCheckedIDs = $get(HdnUpdateCheckedIDs);

    if (hdnUpdateCheckedIDs != null && hdnUpdateCheckedIDs.value.toUpperCase() == 'TRUE') {

        if (hdnCheckedIDs != null) {
            if (hdnCheckedIDs.value != null && hdnCheckedIDs.value != '') {
                var checkedNodes = hdnCheckedIDs.value.split('|');
                var i = 0;
                for (i = 0; i < checkedNodes.length; i++) {
                    var node = checkedNodes[i].split(';');
                    if (node.length > 1) {
                        node = node[0].split('/');
                        if (node.length > 0) {
                            node = node[node.length - 1].split(':');
                            var allNodes = tree.get_allNodes();
                            var j = 0;
                            for (j = 0; j < allNodes.length; j++) {
                                if (isNodeCheckable(allNodes[j])) {
                                    if (allNodes[j].get_value() == node[1]) {
                                        if (allNodes[j].get_attributes()._data.T1 == node[0]) {
                                            allNodes[j].set_checked(true);
                                            if (allNodes[j].get_lastChild() != null) {
                                                var t = 0;
                                                var children = allNodes[j]._children._array;
                                                for (t = 0; t < children.length; t++) {
                                                    children[t].set_checked(true);
                                                }
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

    }

}

function Tree_onload(hdnErrorMsg, ClientID, TreeID, TreePanel) {
    if (hdnErrorMsg != null && hdnErrorMsg.value != '') {
        alert(hdnErrorMsg.value);
        hdnErrorMsg.value = '';
    }
    setTimeout('ScrollToSelectedNode_' + ClientID + '("' + TreeID + '", "' + TreePanel + '", "' + ClientID + '")', 250);
    setTimeout('Firefox100PercentHeight("' + ClientID + '")', 100);
}

function Firefox100PercentHeight(ClientID) {
    var TWrapper = document.getElementById(ClientID + '_T_wrapper');
    if (TWrapper) { TWrapper.style['height'] = '100%'; }
}

function showSearchIcon() {
    if ($get('" & txtTopSearch.ClientID & "') != null) {
        if ($get('" & txtTopSearch.ClientID & "').value == '') {

            if ($get('" & txtTopSearchOriginal.ClientID & "').value == '') {
                $get('" & btnTopSearchClear.ClientID & "').style.display = 'none';
                $get('" & btnTopSearch.ClientID & "').style.display = 'inline';
            }

            else {
                $get('" & btnTopSearchClear.ClientID & "').style.display = 'inline';
                $get('" & btnTopSearch.ClientID & "').style.display = 'none';
            }
        }

        else {
            if ($get('" & txtTopSearch.ClientID & "').value == $get('" & txtTopSearchOriginal.ClientID & "').value) {
                $get('" & btnTopSearchClear.ClientID & "').style.display = 'inline';
                $get('" & btnTopSearch.ClientID & "').style.display = 'none';
            }

            else {
                $get('" & btnTopSearchClear.ClientID & "').style.display = 'none';
                $get('" & btnTopSearch.ClientID & "').style.display = 'inline';
            }
        }

    }
}

function ScrollToSelectedNode(TreeClientID, TreePanelClientID, ClientID) {
    var Tree = $find(TreeClientID);
    var TreePanel = $find(TreePanelClientID);
    var node = Tree.get_selectedNode();
    var hasNodeBeenFound = this[ClientID + '_HasScrollNodeBeenFound'];
    if (node != null && TreePanel != null && hasNodeBeenFound != true) {
        var nodeYOffset = ScrollToSelectedNodeGetTopOffset(node);
        var nodeXOffset = ScrollToSelectedNodeGetLeftOffset(node);
        if (nodeYOffset > 0) {
            hasNodeBeenFound = true;
            this[ClientID + '_HasScrollNodeBeenFound'] = true;
            TreePanel.setScrollPos(nodeXOffset, nodeYOffset);
        }
    }

    var treeScrollCount = this[ClientID + '_ScrollToSelectedNode'];
    if (treeScrollCount == null) { treeScrollCount = 100; };
    if (!hasNodeBeenFound && treeScrollCount < 5) {
        this[ClientID + '_ScrollToSelectedNode'] += 1;
        setTimeout('ScrollToSelectedNode("' + TreeClientID + '", "' + TreePanelClientID + '", "' + ClientID + '")', 200);
    }
}


//Recursive loop to get the total TOP offset for the scrolling
function ScrollToSelectedNodeGetTopOffset(node) {
    var returnVal = 0;
    if (node != null) {
        returnVal += node.get_element().offsetTop;
        if (node.get_level() > 0) {
            var parentNode = node.get_parent();
            if (parentNode != null) {
                returnVal += ScrollToSelectedNodeGetTopOffset(parentNode);
            }
        }
    }
    return returnVal;
}


//Recursive loop to get the total LEFT offset for the scrolling
function ScrollToSelectedNodeGetLeftOffset(node) {
    var returnVal = 0;
    if (node != null) {
        returnVal += node.get_element().offsetLeft;
        if (node.get_level() > 0) {
            var parentNode = node.get_parent();
            if (parentNode != null) {
                returnVal += ScrollToSelectedNodeGetLeftOffset(parentNode);
            }
        }
    }
    return returnVal;
}

var expandedNodeChecked = null;
function onClientNodePopulated(sender, eventArgs) {
    if (expandedNodeChecked != null) {
        var parentNode = eventArgs.get_node();
        var childNodes = parentNode.get_nodes();
        var childNodeCount = childNodes.get_count();
        for (var nodeIndex = 0; nodeIndex < childNodeCount; nodeIndex++) {
            var childNode = childNodes.getNode(nodeIndex);
            childNode.set_checked(expandedNodeChecked);
        }
    }
}

function onClientNodePopulating(sender, eventArgs) {
    expandedNodeChecked = eventArgs.get_node().get_checked();
}





// CSMS

function getValueCSMS(Object, Default) {
    if (Object == null || typeof Object == 'undefined') {
        Object = Default;
    }
    return Object;
}

function CSMS_EnableOK(Enabled, SelectedObjectString, CSMS) {
    var btn = $get(CSMS.btn);

    if (btn != null) {
        if (Enabled) {
            var ObjectString = SelectedObjectString.split("|");
            var ObjectTypeID = 0;
            var ObjectSubType = -1;
            var MeterTypeID = -1;
            var MeterExtra = "";

            if (ObjectString.length > 0) {
                ObjectTypeID = getValueCSMS(ObjectString[0], 0);
                ObjectSubType = getValueCSMS(ObjectString[1], -1);
                MeterTypeID = getValueCSMS(ObjectString[2], -1);
                MeterExtra = getValueCSMS(ObjectString[3], "");
            }

            switch (parseInt(ObjectTypeID)) {
                case 1: //Company
                    var Allow = getValueCSMS($get(CSMS.AllowCompany).value, "FALSE").toUpperCase();
                    if (Allow == "TRUE")
                        btn.disabled = false;
                    break;
                case 2: //Site
                    var Allow = getValueCSMS($get(CSMS.AllowSite).value, "FALSE").toUpperCase();
                    if (Allow == "TRUE")
                        btn.disabled = false;
                    break
                case 3: //Meter
                    var Allow = getValueCSMS($get(CSMS.AllowMeter).value, "FALSE").toUpperCase();
                    //Are meters allowed to be selected?
                    if (Allow == "TRUE") {
                        var AllowMeterFuelType = getValueCSMS($get(CSMS.ShowMeterFuelType).value, -1);
                        var AllowMeterType = getValueCSMS($get(CSMS.ShowMeterType).value, -1);
                        var AllowAssetMeters = getValueCSMS($get(CSMS.ShowAssetMeters).value, "FALSE").toUpperCase();
                        var AllowHighFrequency = getValueCSMS($get(CSMS.ShowHighFrequency).value, "FALSE").toUpperCase();
                        var AllowLowFrquency = getValueCSMS($get(CSMS.ShowLowFrequency).value, "FALSE").toUpperCase();
                        var AllowProductionMeters = parseInt(getValueCSMS($get(CSMS.ShowProduction).value, "0"));
                        var AllowCostingMeters = getValueCSMS($get(CSMS.ShowProduction).value, "FALSE").toUpperCase();
                        var AllowBatchMeters = getValueCSMS($get(CSMS.ShowBatch).value, "FALSE").toUpperCase();
                        var ExcludeCalcMeters = getValueCSMS($get(CSMS.ExcludeCalc).value, "FALSE").toUpperCase();

                        var ReturnVal = false;

                        MeterExtra = MeterExtra.split(",");
                        var HighFrequency = getValueCSMS(MeterExtra[0], 0);
                        var BatchMeter = getValueCSMS(MeterExtra[1], 0);
                        var CostingMeter = getValueCSMS(MeterExtra[2], 0);

                        //Results stored seperately as filters can be combined
                        var MeterFuelTypeResult = null;
                        var MeterTypeResult = null;
                        var MeterAssetResult = null;
                        var MeterHighFreqResult = null;
                        var MeterLowFreqResult = null;
                        var MeterProductResult = null;
                        var MeterBatchResult = null;
                        var MeterCostingResult = null;
                        var MeterExcludeCalcResult = null;

                        //If the MeterType filtering has been set
                        //Check the object
                        if (parseInt(AllowMeterFuelType) > 0) {
                            if (parseInt(ObjectSubType) === parseInt(AllowMeterFuelType))
                                MeterFuelTypeResult = true;
                            else
                                MeterFuelTypeResult = false;
                        }
                        //Check the meter type
                        if (parseInt(AllowMeterType) > 0) {
                            if (parseInt(MeterTypeID) === parseInt(AllowMeterType))
                                MeterTypeResult = true;
                            else
                                MeterTypeResult = false;
                        }
                        //If Filtering by Asset Meters
                        if (AllowAssetMeters == "TRUE") {
                            switch (parseInt(MeterTypeID)) {
                                case 6: //MeteredAsset
                                    MeterAssetResult = true;
                                    break;
                                case 7: //AssetGroup
                                    MeterAssetResult = true;
                                    break;
                                default:
                                    MeterAssetResult = false;
                                    break;
                            }
                        }
                        //If Filtering by High Frequency Meters
                        if (AllowHighFrequency == "TRUE") {
                            if (parseInt(HighFrequency) == 1)
                                MeterHighFreqResult = true;
                            else
                                MeterHighFreqResult = false;
                        }
                        //If Filtering by Low Frequency Meters
                        if (AllowLowFrquency == "TRUE") {
                            if (parseInt(HighFrequency) == 0)
                                MeterLowFreqResult = true;
                            else
                                MeterLowFreqResult = false;
                        }
                        //If Filtering by Production Meters
                        if (AllowProductionMeters > 0) {
                            if (AllowProductionMeters == 1) {
                                if (parseInt(MeterTypeID) == 4)
                                    MeterProductResult = true;
                                else
                                    MeterProductResult = false;
                            }
                            else if (AllowProductionMeters == 2) {
                                if (parseInt(MeterTypeID) != 4)
                                    MeterProductResult = true;
                                else
                                    MeterProductResult = false;
                            }
                            else
                                MeterProductResult = false;
                        }
                        //If Filtering by Batch Meters
                        if (AllowBatchMeters == "TRUE") {
                            if (parseInt(BatchMeter) == 1)
                                MeterBatchResult = true;
                            else
                                MeterBatchResult = false;
                        }
                        //If Filtering by Costing Meters
                        if (AllowCostingMeters == "TRUE") {
                            if (parseInt(CostingMeter) == 1)
                                MeterCostingResult = true;
                            else
                                MeterCostingResult = false;
                        }
                        //If Excluding Calc Meters
                        if (ExcludeCalcMeters == "TRUE") {
                            if (parseInt(MeterTypeID) != 3)
                                MeterExcludeCalcResult = true;
                            else
                                MeterExcludeCalcResult = false;
                        }


                        //Using ElseIF instead of Select Case as
                        //there may be more then 1 filter on
                        if (MeterFuelTypeResult == false)
                            ReturnVal = false;
                        else if (MeterTypeResult == false)
                            ReturnVal = false;
                        else if (MeterAssetResult == false)
                            ReturnVal = false;
                        else if (MeterHighFreqResult == false)
                            ReturnVal = false;
                        else if (MeterLowFreqResult == false)
                            ReturnVal = false;
                        else if (MeterProductResult == false)
                            ReturnVal = false;
                        else if (MeterBatchResult == false)
                            ReturnVal = false;
                        else if (MeterCostingResult == false)
                            ReturnVal = false;
                        else if (MeterExcludeCalcResult == false)
                            ReturnVal = false;
                        else
                            ReturnVal = true;

                        if (ReturnVal != null)
                            btn.disabled = !ReturnVal;
                    }
                    break;
                case 4: //Templates
                    var Allow = getValueCSMS($get(CSMS.AllowTemplate).value, "FALSE").toUpperCase();
                    if (Allow == "TRUE")
                        btn.disabled = false;
                    break;
                case 5: //Groups
                    var Allow = getValueCSMS($get(CSMS.AllowGroup).value, "FALSE").toUpperCase();
                    var AllowHighLevel = getValueCSMS($get(CSMS.AllowHighLevelGroup).value, "FALSE").toUpperCase();
                    var AllowLowLevel = getValueCSMS($get(CSMS.AllowLowLevelGroup).value, "FALSE").toUpperCase();
                    var ReturnVal = null;

                    if (Allow == "TRUE")
                        ReturnVal = false;
                    else {
                        switch (parseInt(ObjectSubType)) {
                            case 0: //High level group
                                if (AllowHighLevel == "TRUE")
                                    ReturnVal = false;
                                break;
                            case 1: //Low level group
                                if (AllowLowLevel == "TRUE")
                                    ReturnVal = false;
                                break;
                        }
                    }

                    if (ReturnVal != null)
                        btn.disabled = ReturnVal;
                    break;
                default: //Error ignore
                    break;
            }
        }
        else {
            btn.disabled = true;
        }
    }
}