﻿//**************************************************************
//TOC FUNCTIONS
var visible = [];
var tocHTML = "";
var _visibleLayers = [];
function addToTOC(layer, listLayers, visibleIDs){
    //For now, there is only one set of Visible IDs.  TODO...make this dynamic.
    _visibleLayers = visibleIDs;
    if (listLayers) {
        if (layer.loaded) {
            buildLayerList(layer);
        }
        else {
            dojo.connect(layer, "onLoad", buildLayerList);
        }
    }
    else {
        if (layer.loaded) {
            buildLayerListRoot(layer);
        }
        else {
            dojo.connect(layer, "onLoad", buildLayerListRoot);
        }
    }
}

function buildLayerListRoot(layer){
    //addToTransparencyList(layer);
    var currentLayer = layer;
    tocHTML = "<img src='images/blank.bmp'><input type='checkbox' dojotype='dijit.form.CheckBox' class='TOC_Root' " + (currentLayer.visible ? " CHECKED " : "") + " id='" + currentLayer.id + "' onclick=\"toggleService('" + currentLayer.id + "');\" /><label for='" + currentLayer.id + "'>" + currentLayer.id + "</label><br>" + tocHTML;
    //tocHTML = "<input id='" + currentLayer.id + "' dojotype='dijit.form.CheckBox' class='TOC_Root' name='developer' " + (currentLayer.visible ? " CHECKED " : "") + " value='on' type='checkbox' onclick=\"toggleService('" + currentLayer.id + "');\" /><label for='" + currentLayer.id + "'>" + currentLayer.id + "</label>"  + tocHTML; 
    dojo.byId("TOC").innerHTML = tocHTML;
}

function toggleLayer(id){
    var layerDiv = dojo.byId(id + 'Layers');
    var icon = dojo.byId(id + 'Icon');
    if (layerDiv.style.display == 'block') {
        icon.src = "images/expand.bmp";
        layerDiv.style.display = 'none';
    }
    else {
        icon.src = "images/close.bmp";
        layerDiv.style.display = 'block';
    }
    
}

function zoomToLayer(id){
    var layer = map.getLayer(id);
    if (layer !== null) {
        map.setExtent(layer.fullExtent);
    }
}

function buildLayerList(layer){

    //addToTransparencyList(layer);
    var currentLayer = layer;
    var currentHTML = "";
    currentHTML += "<img src='images/close.bmp' id='" + currentLayer.id + "Icon' onclick=\"toggleLayer('" + currentLayer.id + "')\" ><input type='checkbox' dojotype='dijit.form.CheckBox' class='TOC_Root' " + (currentLayer.visible ? " CHECKED " : "") + " id='" + currentLayer.id + "' onclick=\"toggleService('" + currentLayer.id + "');\" /><label for='" + currentLayer.id + "'>" + currentLayer.id + "</label><br>";
    
    var subLayers = currentLayer.layerInfos;
    
    currentHTML += "<div id='" + currentLayer.id + "Layers' style='display:block;'>";
    
    for (var i = 0; i < subLayers.length; i++) {
        var currentSubLayer = subLayers[i];
        
        if (_visibleLayers) {
            if (dojo.indexOf(_visibleLayers, currentSubLayer.id) > -1) {
                if (currentSubLayer.defaultVisibility) {
                    visible.push(currentSubLayer.id);
                }
                currentHTML += "<div class='tocIndent'></div><input type='checkbox' title='" + currentSubLayer.name + "' class='" + currentLayer.id + "TOC' " + (currentSubLayer.defaultVisibility ? " CHECKED " : "") + " id='" + currentSubLayer.id + "' onclick=\"updateLayerVisibility('" + currentLayer.id + "','" + currentSubLayer.id + "');\" /><label for='" + currentSubLayer.id + "'>" + currentSubLayer.name + "</label><br>";
            }
        }
        else {
            if (currentSubLayer.defaultVisibility) {
                visible.push(currentSubLayer.id);
            }
            currentHTML += "<div class='tocIndent'></div><input type='checkbox' title='" + currentSubLayer.name + "' class='" + currentLayer.id + "TOC' " + (currentSubLayer.defaultVisibility ? " CHECKED " : "") + " id='" + currentSubLayer.id + "' onclick=\"updateLayerVisibility('" + currentLayer.id + "','" + currentSubLayer.id + "');\" /><label for='" + currentSubLayer.id + "'>" + currentSubLayer.name + "</label><br>";
        }
    }
    currentHTML += "</table></div>";
    
    tocHTML = currentHTML + tocHTML;
    
    dojo.byId("TOC").innerHTML = tocHTML;
}

function updateLayerVisibility(serviceID, layerid){
    var inputs = dojo.query("." + serviceID + "TOC"), input;
    visible = [];
    for (var i = 0, il = inputs.length; i < il; i++) {
        if (inputs[i].checked) {
            visible.push(inputs[i].id);
        }
        if (visible.length === 0) {
            visible.push(-1);
        }
    }
    
    var layer = map.getLayer(serviceID);
    layer.setVisibleLayers(visible);
    legend.refresh();
}

function toggleService(layerID){
    var layer = map.getLayer(layerID);
    if (layer.visible) {
        layer.hide();
    }
    else {
        layer.show();
    }
}

//END TOC FUNCTIONS
//**************************************************************


//RW - added this to allow turning on layers from a different location outside of TOC
function forceOnLayer(layerID){

    if (dojo.query('#LayersLayers #' + layerID)[0].checked === true) {
        dojo.query('#LayersLayers #' + layerID)[0].checked = false; //find the checkbox in the TOC and check it
    }
    else {
        dojo.query('#LayersLayers #' + layerID)[0].checked = 'checked'; //find the checkbox in the TOC and check it
    }
    dojo.query('.tableTitle.' + layerID).toggleClass("layerOn");
    updateLayerVisibility('Layers', layerID); //Then turn on 
}
