﻿var mapArr; 
var rstArr;
var mtrArr;
var layerArr;
    
function getItemsInfo() 
{
    mapArr = new Array(); 
    rstArr = new Array();
    mtrArr = new Array();
    layerArr = new Array();

    var itemContainer = document.getElementById(mcContainerId);
    var outputString = '';
    findCheckBoxes(itemContainer, null, null, getCheckBoxData);
    outputString += mapKey;
    for(var i=0; i<mapArr.length; i++)
    {
        outputString += mapArr[i] + MapsSeparator;
    }
    outputString += ItemsSeparator + rstKey;
    for(var i=0; i<rstArr.length; i++)
    {
        outputString += rstArr[i] + MapsSeparator;
    }
    outputString += ItemsSeparator + mtrKey;
    for(var i=0; i<mtrArr.length; i++)
    {
        outputString += mtrArr[i] + MapsSeparator;
    }
    outputString += ItemsSeparator + layerKey;
    for(var i=0; i<layerArr.length; i++)
    {
        outputString += layerArr[i] + MapsSeparator;
    }
    return outputString;
}

function getCheckBoxData(sender, checkBox)
{
    if (checkBox.id.indexOf(mapIdPrefix) > -1)
    {
        mapArr[mapArr.length] = checkBox.value + EnabledSeparator + getEnabledString(checkBox);
    }
    else if (checkBox.id.indexOf(rstIdPrefix) > -1)
    {
        rstArr[rstArr.length] = checkBox.value + EnabledSeparator + getEnabledString(checkBox);
    }
    else if (checkBox.id.indexOf(mtrIdPrefix) > -1)
    {
        mtrArr[mtrArr.length] = checkBox.value + EnabledSeparator + getEnabledString(checkBox);
    }
    else if (checkBox.id.indexOf(layerIdPrefix) > -1)
    {
        layerArr[layerArr.length] = checkBox.value + EnabledSeparator + getEnabledString(checkBox);
    }
}

function resetOrCheckItems(sender)
{
        var itemContainer = sender;
        while (itemContainer.tagName && itemContainer.tagName.toUpperCase() != 'TABLE')
        {
            itemContainer = itemContainer.parentNode;
        }      
    if (sender.id.indexOf(layerBtnIdPrefix) > -1) 
    {
        var re = new RegExp(layerIdPrefix, "i");
        if (sender.innerHTML == checkAllLayersText)
        {
            findCheckBoxes(itemContainer, new Array(re), sender, checkLayers);  
            sender.innerHTML = resetAllLayersText;            
        }
        else
        {
            findCheckBoxes(itemContainer, new Array(re), sender, resetLayers);  
            sender.innerHTML = checkAllLayersText;                    
        }
    }
    else if ((sender.id.indexOf(sysBtnIdPrefix) > -1) || (sender.id.indexOf(thematicBtnIdPrefix) > -1))
    {    
        var re = new RegExp(mapIdPrefix + "|" + rstIdPrefix + "|" + mtrIdPrefix, "i");
        if (sender.innerHTML == checkAllMapsText)
        {
            findCheckBoxes(itemContainer, new Array(re), sender, checkMaps);  
            sender.innerHTML = resetAllMapsText;
        }
        else
        {
            findCheckBoxes(itemContainer, new Array(re), sender, resetMaps);  
            sender.innerHTML = checkAllMapsText;                    
        }        
    }
}

function checkLayers(sender, checkBox)
{
    // первый элемент в массиве - карта, которой принадлежит слой        
    var cbMap = checkBox.value.split(',')[0];
    var btnMap = sender.id.match(new RegExp(layerBtnIdPrefix + "\\d+", "g"))[0].match(new RegExp("\\d+", "g"))[0];
    if (cbMap == btnMap)
    {
        checkBox.checked = true;
    }
}

function resetLayers(sender, checkBox)
{
    // первый элемент в массиве - карта, которой принадлежит слой        
    var cbMap = checkBox.value.split(',')[0];
    var btnMap = sender.id.match(new RegExp(layerBtnIdPrefix + "\\d+", "g"))[0].match(new RegExp("\\d+", "g"))[0];
    if (cbMap == btnMap)
    {
        checkBox.checked = false;
    }
}

function checkMaps(sender, checkBox)
{
    checkBox.checked = true;
}

function resetMaps(sender, checkBox)
{
    checkBox.checked = false;
}

function findCheckBoxes(element, idFilter, sender, callbackFunction)
{
    if (!element) return;
    var childNodes = element.childNodes;
    for(var i=0; i<childNodes.length; i++)
    {
        if (childNodes[i].tagName && childNodes[i].tagName.toUpperCase() == 'INPUT')
        {
            var attr = childNodes[i].getAttributeNode('type');
            if (attr) 
            {   
                if (attr.nodeValue == 'checkbox')
                {
                    if (idFilter == null)
                        callbackFunction(sender, childNodes[i]);
                    else
                    {
                        for(var j=0; j<idFilter.length; j++)
                        {
                            if (idFilter[j].test(childNodes[i].id))
                            {                                
                                callbackFunction(sender, childNodes[i]);
                            }
                        }                       
                    }
                    return;
                }
            }
        }
                       
        findCheckBoxes(childNodes[i], idFilter, sender, callbackFunction);
    }
    return;
}

function getEnabledString(cbElement)
{
    return (cbElement.checked) ? 'true' : 'false';
}

