﻿
var chosen = [];
var layers = [
        { name: "ATV", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Aatv%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Hiking", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Ahiking%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Biking", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Abiking%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Equestrian", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Aequestrian%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Water Trails", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Awater_trails%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Rail Trails", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Arail_trail_only%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Interpretive", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Ainterpretive%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Cross Country Ski", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Axcountry_ski%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Snowmobile", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Asnowmobile%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "Off Road Motorcycle", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Aoffroadmotorcycle%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) },
        { name: "All Trails", obj: new GTileLayerOverlay(new GTileLayer(null, null, null, { tileUrlTemplate: 'http://www.gis.dcnr.state.pa.us/geoserver/rest/proxy?url=http%3A%2F%2Fnrgisims01%3A8080%2Fgeoserver%2Fgwc%2Fservice%2Fgmaps%3Flayers%3Dtrails%3Aall_trails%26zoom%3D{Z}%26x%3D{X}%26y%3D{Y}', isPng: true, opacity: 1.0 })) }

        ];
                

function hideAll() {
    var boxes = document.getElementsByName("mark");
    for (var i = 0; i < boxes.length; i++) {
        if (boxes[i].checked) {

            boxes[i].checked = false;
            switchLayer(false, layers[i].obj, i);
            chosen.push(i);
        }
    }
}


function checkChecked() {
    /* Returns true if a checkbox is still checked
    *  otherwise false
    */
    var boxes = document.getElementsByName("mark");
    for (var i = 0; i < boxes.length; i++) {
        if (boxes[i].checked) return true;
    }
    return false;
}

function switchLayer(checked, layer, id) {
    /* Function was originally borrowed from Esa:
    *  http://esa.ilmari.googlepages.com/dropdownmenu.htm
    */
    //alert(id);
    var layerbox = document.getElementById("box");
    var boxlink = document.getElementById("boxlink");
    var button = document.getElementById("more_inner");

    if (checked) {
        if (layer) {
            //var layer = new GTileLayerOverlay(layer);
            var zoomLevel = map.getZoom();
            map.addOverlay(layer);

            if (zoomLevel < trailsvisibleatZoom) {
                layer.hide();
                // Reset chosen array
                chosen.length = 0;
                /* Highlight the link and
                *  make the button font bold.
                */
                boxlink.className = "highlight";
                layerbox.className = "highlight";
                button.className = "highlight";
            }
        }
        else {
            //turning on parking/point icons
            
            if (id == 11){ mgr.show(); }
            if (id == 12) { pointmgr.show(); }
        }
    }
    else {
        if (layer) {
            map.removeOverlay(layer);
            /*  Reset the link and the button
            * if all checkboxes were unchecked.
            */
            if (!checkChecked()) {
                boxlink.blur();
                boxlink.className = "";
                layerbox.className = "";
                button.className = "";
            }
        }
        else {
            //turn off parking/point icons
            if (id == 11) {mgr.hide();}
            if (id == 12) {pointmgr.hide();}
            }
    }
}

function showLayerbox() {
    var layerbox = document.getElementById("box");
    // Left size of more control
    var offsetX = 290;
    // Top size of more control plus more button height
    var offsetY = 7 + 18;


    var lpos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offsetX, offsetY));
    lpos.apply(layerbox);
    if (window.timer) clearTimeout(timer);
    layerbox.style.visibility = "";
    layerbox.style.display = "block";
}


function setClose(e) {

    if (!e) e = window.event;
    var layerbox = document.getElementById("box");

    if (checkMouseLeave(layerbox, e))
        timer = window.setTimeout(function() {
            layerbox.style.display = "none";
        }, 400);
}


function checkMouseLeave(element, evt) {

    /* Avoid firing a mouseout event
    *  when the mouse moves over a child element.
    *  Borrowed from:
    *  http://www.faqts.com/knowledge_base/view.phtml/aid/1606/fid/145
    */
    if (element.contains && evt.toElement) {
        return !element.contains(evt.toElement);
    }
    else if (evt.relatedTarget) {
        return !containsDOM(element, evt.relatedTarget);
    }
}


function containsDOM(container, containee) {

    var isParent = false;
    do {
        if ((isParent = container == containee))
            break;
        containee = containee.parentNode;
    }
    while (containee != null);
    return isParent;
}


function toggleLayers() {

    if (chosen.length > 0) {
        /* Make an independent copy of chosen array since switchLayer()
        *  resets the chosen array, which may not be useful here.
        */
        var copy = chosen.slice();
        for (var i = 0; i < copy.length; i++) {
            var index = parseInt(copy[i]);
            switchLayer(true, layers[index].obj, i);
            document.getElementsByName("mark")[index].checked = true;
        }
    }
    else {
        hideAll();
    }
}


function MoreControl() { };
MoreControl.prototype = new GControl();
MoreControl.prototype.initialize = function(map) {

    var more = document.createElement("div");
    more.style.fontFamily = "Arial";
    more.style.fontSize = "12";
    more.style.border = "1px solid black";
    more.style.background = "#FFFFFF";
    more.style.paddingTop = "1px";
    more.style.paddingBottom = "1px";
    more.style.paddingLeft = "7px";
    more.style.paddingRight = "7px";
    more.style.textAlign = "center";
    more.style.width = "65px";
    more.title = "Show/Hide Layers";

    var inner = document.createElement("div");
    inner.id = "more_inner";
    inner.appendChild(document.createTextNode("Trails"));
    more.appendChild(inner);
    more.onmouseover = showLayerbox;
    more.onmouseout = setClose;
    more.onclick = toggleLayers;
    map.getContainer().appendChild(more);
    return more;
}

MoreControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(290, 7));
}
