﻿var tocHTML = ""; //used to update the toc
var transparencyLayerID = "";

function showCrimeCodeLegend() {
    try {
        dojo.byId("divCrimeCodes").className = "myshow";
        bringToFront("divCrimeCodes");
        var node = dojo.byId("crimelegend");
        node.blur();
    }
    catch (err) {
        errorWin(err.description, "showCrimeCodeLegend");
    }
}

function hideCrimeCodeLegend() {
    try {
        dojo.byId("divCrimeCodes").className = "myhide";
    }
    catch (err) {
        errorWin(err.description, "hideCrimeCodeLegend");
    }
}

function showLayerlist() {
    try {
        document.getElementById("divLayerList").className = "myshow";
        bringToFront("divLayerList");
        var node = dojo.byId("layerlist");
        node.blur();
    }
    catch (err) {
        errorWin(err.description, "showLayerlist");
    }
}

function hideLayerlist() {
    try {
        document.getElementById("divLayerList").className = "myhide";
    }
    catch (err) {
        errorWin(err.description, "hideLayerlist");
    }
}

function addToTOC(layer, listLayers) {
    try {
        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);
            }
        }
    }
    catch (err) {
        errorWin(err.description, "addToTOC");
    }
}

function buildLayerListRoot(layer) {
    try {
        addToTransparencyList(layer);
        var currentLayer = layer;
        tocHTML = "<img src='images/blank.png'><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;
        dojo.byId("divLayers").innerHTML = tocHTML;
    }
    catch (err) {
        errorWin(err.description, "buildLayerListRoot");
    }
}

function toggleLayer(id) {
    try {
        var layerDiv = dojo.byId(id + 'Layers');
        var icon = dojo.byId(id + 'Icon');
        if (layerDiv.style.display == 'block') {
            icon.src = "images/expand.png";
            layerDiv.style.display = 'none';
        }
        else {
            icon.src = "images/close.png";
            layerDiv.style.display = 'block';
        }
    }
    catch (err) {
        errorWin(err.description, "toggleLayer");
    }
}

function buildLayerList(layer) {
    addToTransparencyList(layer);
    var currentLayer = layer;
    var currentHTML = "";
    currentHTML += "<img src='images/expand.png' 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:none;'>";
    for (var i = 0; i < subLayers.length; i++) {
        var currentSubLayer = subLayers[i];
        if (currentSubLayer.defaultVisibility) {
            visible.push(currentSubLayer.id);
        }

        if (currentSubLayer.parentLayerId == -1) {
            if (currentSubLayer.subLayerIds == null) {
                // this is a non-group layer
                currentHTML += "<img src='images/blank.png'><img src='images/blank.png'><input type='checkbox' 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 {
                // this is a group layer heading
                currentHTML += "<img src='images/blank.png'><input type='checkbox' class='" + currentLayer.id + "TOC' " + (false ? " CHECKED " : "") + " id='" + currentSubLayer.id + "' onclick=\"updateLayerVisibility('" + currentLayer.id + "','" + currentSubLayer.id + "');\" style='visibility: hidden' /><img src='images/expand.png' id='" + currentSubLayer.id + "Icon' onclick=\"toggleLayer('" + currentSubLayer.id + "')\" ><label for='" + currentSubLayer.id + "'>  " + currentSubLayer.name + "</label><br>";
                currentHTML += "<div id='" + currentSubLayer.id + "Layers' style='display:none;'>";
                var parentId = currentSubLayer.id;
                var layerIds = currentSubLayer.subLayerIds;
                i += 1;
                for (var j = 0; j < layerIds.length; j++) {
                    var currentSubLayer = subLayers[i];
                    if (currentSubLayer.parentLayerId == parentId) {
                        currentHTML += "<img src='images/blank.png'><img src='images/blank.png'><img src='images/blank.png'><img src='images/blank.png'><input type='checkbox' class='" + currentLayer.id + "TOC' " + (currentSubLayer.defaultVisibility ? " CHECKED " : "") + " id='" + currentSubLayer.id + "' onclick=\"updateLayerVisibility('" + currentLayer.id + "','" + currentSubLayer.id + "');\" /><label for='" + currentSubLayer.id + "'>" + currentSubLayer.name + "</label><br>";
                        i += 1;
                    }
                }
                i -= 1;
                currentHTML += "</div>";
            }
        }
        else {
            // this is a layer under a group layer
            currentHTML += "<img src='images/blank.png'><img src='images/blank.png'><img src='images/blank.bmp'><img src='images/blank.bmp'><input type='checkbox' 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 += "</div>";

    tocHTML = currentHTML + tocHTML;

    dojo.byId("divLayers").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);
        }
    }

    var layer = map.getLayer(serviceID);
    layer.setVisibleLayers(visible);
}

function toggleService(layerID) {
    var layer = map.getLayer(layerID);
    if (layer.visible) {
        layer.hide();
    }
    else {
        layer.show();
    }
}

function zoomToLayer(id) {
    var layer = map.getLayer(id);
    if (layer != null) {
        map.setExtent(layer.fullExtent);
    }
}

//**************************************************************
//Transparency FUNCTIONS

function addToTransparencyList(layer) {
    var selectObject = dojo.byId("transparencyList");
    var optionObject = new Option(layer.id, layer.id);
    selectObject.options[selectObject.options.length] = optionObject;

    var list = new Array();
    for (var i = 0; i < selectObject.options.length; i++) {
        list.push(selectObject.options[i].value);
    }

    selectObject.options.length = 0;
    list.sort();
    for (var j = 0; j < list.length; j++) {
        var optionObject = new Option(list[j], list[j]);
        selectObject.options[selectObject.options.length] = optionObject;
    }
}

function updateTransparencyLayer(layerId) {
    transparencyLayerID = layerId;
    var layer = map.getLayer(transparencyLayerID);
    if (layer != null) {
        dijit.byId('trans_slider').setValue(layer.opacity * 100);
    }
}

function changeTransparency(value) {
    if (transparencyLayerID != "") {
        var layer = map.getLayer(transparencyLayerID);
        if (layer != null) {
            layer.setOpacity(value);
        }
    }
}
//END Transparency FUNCTIONS
//**************************************************************


