﻿var selectTimeout = null;

var planoLayer = "";

function onMapMouseOver(event) {
    var layer = map.getLayersByName("selection")[0];

    layer.setVisibility(false);
}

function DoZoomLoc(x, y, draw, zoomLevel) {

    map.setCenter(new OpenLayers.LonLat(x, y), zoomLevel, false, false);

    return true;
}

function onFeatureHighlight(evt) {

    if (map.getControlsBy("id", "ctrlModifyPolygon")[0].active) return true;

    var feature = evt.feature;
    var l = feature.layer;

    if (feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
        style_mark_sel.fillOpacity = 1;
    } else {
        style_mark_sel.fillOpacity = 0;
    }
    
    feature.data

    l.drawFeature(feature, style_mark_sel)

    selectTimeout = setTimeout(function() { onFeatureSelect(feature); }, 500);
}
function onFeatureUnhighlight(evt) {
    if (selectTimeout != null) clearTimeout(selectTimeout);

    var feature = evt.feature;

    if (feature != null && feature.popup != null) {
        if (feature.popup.closeDiv == null) {
            map.removePopup(feature.popup);
        }            
    }
}

function onFeatureSelect(feature) {

    selectedFeature = feature;

    var l = feature.layer;

    var lang = "";

    if (document.getElementById("language") != null && document.getElementById("language").value != "") {
        lang = document.getElementById("language").value
    }     

    try {
        if (feature.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
            style_mark_sel.fillOpacity = 1;
        } else {
            style_mark_sel.fillOpacity = 0;
        }

        l.drawFeature(feature, style_mark_sel)

        var ll = map.getLonLatFromPixel(currentPixelPos);

        //    var popup = new OpenLayers.Popup.FramedCloud("popupPOI",
        //                         ll,
        //                         null,
        //                         feature.data["html"],
        //                         null,
        //                         false, function() { onPopupClose(feature); });

        //    popup.panMapIfOutOfView = false;
        //    popup.closeOnMove = true;

        if (feature.data["html"] == "") {
            $.get(feature.data.action, { gid: feature.data.gid, lang: lang },
                function(data) {

                    var popup = new OpenLayers.Popup.FramedCloud("popupPOI",
                             ll,
                             null,
                             data,
                             null,
                             true, function() { onPopupClose(feature); });

                    popup.autoSize = false;
                    popup.setSize(new OpenLayers.Size(260, 330));

                    popup.panMapIfOutOfView = false;
                    popup.closeOnMove = true;

                    feature.popup = popup;

                    map.addPopup(popup, true);
                });
        } else {

            var popup = new OpenLayers.Popup.FramedCloud("popupPOI",
                                 ll,
                                 null,
                                 feature.data["html"],
                                 null,
                                 true, function() { onPopupClose(feature); });

            popup.autoSize = false;
            popup.setSize(new OpenLayers.Size(200, 150));

            popup.panMapIfOutOfView = false;
            popup.closeOnMove = true;

            feature.popup = popup;

            map.addPopup(popup, true);
            
//            var popup = new OpenLayers.Popup.FramedCloud("popupPOI",
//                         ll,
//                         null,
//                         feature.data["html"],
//                         null,
//                         false, function() { onPopupClose(feature); });

//            popup.panMapIfOutOfView = false;
//            popup.closeOnMove = true;

//            feature.popup = popup;

//            map.addPopup(popup, true);
        }
    } catch (err)
    { }

}
function onFeatureUnselect(feature) {
}
function onPopupClose(feature) {
    map.removePopup(feature.popup);
}


function onBeforeFeatureModified(feature) {
    if ($("#sidebar").attr("panel") == "plantas") {
        DoPlantasGoBack();
    }
}

function setLayersVisibility(elem) {

    if (elem != null) {
        var olLyrType = elem.parents("div:eq(0)").attr("olLayerType");
        var olLyrName = elem.parents("div:eq(0)").attr("olLayerName");

        if (olLyrType == "mapserver") {

            //Alterado por ser incompatível com a versão 1.3.2 do jquery
            //var groups = $("#toc>div[@olLayerType=mapserver]").filter("[@olLayerName=" + olLyrName + "]");
            var groups = $("#toc>div[olLayerType=mapserver]").filter("[olLayerName=" + olLyrName + "]");

            var mslayersnames = "";
            var mslayer = "";

            $(groups).each(function() {
                var olname = $(this).attr("olLayerName");

                var vLayers = $(this).find("ul li").not(":has(ul)").filter(":has(label:first.checked)");

                mslayer = "";

                for (var i = 0; i < vLayers.length; i++) {
                    var l = $(vLayers[i]).parents("li");

                    mslayer = $("label:first", vLayers[i]).attr("olLayerName");

                    for (var j = 0; j < l.length; j++) {
                        var e = $(l[j]);

                        //Alterado por ser incompatível com a versão 1.3.2 do jquery
                        //if ($("label:first.checked", e).length == 0) {
                        if (!$("label:first", e).hasClass("checked")) {
                            mslayer = "";

                            break;
                        }
                    }

                    if (mslayer.length > 0) mslayersnames += " " + mslayer
                }
            });

            if (map.getLayer(olLyrName) != null) {
                map.getLayer(olLyrName).params["layers"] = mslayersnames;
                map.getLayer(olLyrName).redraw();
            }

        } else {
            if (!elem.is(":has(ul)")) {
                olLyrName = $("label:first", elem).attr("olLayerName");

                var p = elem.parents("ul:eq(0)");

                $("li", p).each(function() {

                    olLyrName = $("label:first", this).attr("olLayerName");
                    if (map.getLayer(olLyrName) != null) {
                        //Alterado por ser incompatível com a versão 1.3.2 do jquery
                        //map.getLayer(olLyrName).setVisibility($("label:first.checked", this).length && $("label:first.checked", elem.parents("li:eq(0)")).length);
                        map.getLayer(olLyrName).setVisibility($("label:first", this).hasClass("checked") && $("label:first", elem.parents("li:eq(0)")).hasClass("checked"));
                    }
                });
            } else {
                $("li", elem).each(function() {
                    olLyrName = $("label:first", this).attr("olLayerName");
                    if (map.getLayer(olLyrName) != null) {
                        //Alterado por ser incompatível com a versão 1.3.2 do jquery
                        //map.getLayer(olLyrName).setVisibility($("label:first.checked", this).length && $("label:first.checked", elem).length);
                        map.getLayer(olLyrName).setVisibility($("label:first", this).hasClass("checked") && $("label:first", elem).hasClass("checked"));
                    }
                });
            }
        }
    } else {
        var groups = $("#toc>div");

        $(groups).each(function() {

            var olLyrName = $(this).attr("olLayerName");

            if ($(this).attr("olLayerType") == "mapserver") {

                //Alterado por ser incompatível com a versão 1.3.2 do jquery
                //var g = $("#toc>div[@olLayerType=mapserver]").filter("[@olLayerName=" + olLyrName + "]");
                var g = $("#toc>div[olLayerType=mapserver]").filter("[olLayerName=" + olLyrName + "]");

                var mslayersnames = "";
                var mslayer = "";

                $(g).each(function() {
                    var olname = $(this).attr("olLayerName");

                    var vLayers = $(this).find("ul li").not(":has(ul)").filter(":has(label:first.checked)");

                    mslayer = "";

                    for (var i = 0; i < vLayers.length; i++) {
                        var l = $(vLayers[i]).parents("li");

                        //Zona de Debug
                        mslayer = $("label:first", vLayers[i]).attr("olLayerName");

                        for (var j = 0; j < l.length; j++) {
                            var e = $(l[j]);

                            //Alterado por ser incompatível com a versão 1.3.2 do jquery
                            //if ($("label:first.checked", e).length == 0) {
                            if (!$("label:first", e).hasClass("checked")) {
                                mslayer = "";

                                break;
                            }
                        }

                        if (mslayer.length > 0) mslayersnames += " " + mslayer
                    }
                });

                if ((map != null) && (map.getLayer(olLyrName) != null)) {
                    map.getLayer(olLyrName).params["layers"] = mslayersnames;
                    map.getLayer(olLyrName).redraw();
                }

            } else {

                $("li", this).not(":has(ul)").each(function() {

                    olLyrName = $("label:first", this).attr("olLayerName");
                    if (map.getLayer(olLyrName) != null) {
                        //Alterado por ser incompatível com a versão 1.3.2 do jquery
                        //map.getLayer(olLyrName).setVisibility($("label:first.checked", this).length && $("label:first.checked", $(this).parents("li:eq(0)")).length);
                        map.getLayer(olLyrName).setVisibility($("label:first", this).hasClass("checked") && $("label:first)", $(this).parents("li:eq(0)")).hasClass("checked"));
                    }
                });
            }
        });
    }
}

function setLayerVisible(layerKey) {

    var elem = $("li[olKey='" + layerKey + "']");

    if (elem != null) {

        if (elem.parent().length > 0 && elem.parent().is("ul") && elem.parent().attr("olLayerGroup")) {
            var p = elem.parent()[0];

            $(elem.parent().children("li")).each(function() {
                if (this != elem[0]) {
                    var ss = $(this);

                    ss.children("label:first").removeClass("checked");
                    ss.children("input:checkbox:first").attr("checked", "");
                }
            });
        }

        elem.find("label:first").prev().attr("checked", true);
        if (!elem.find("label:first").hasClass("checked")) elem.find("label:first").addClass("checked");

        elem.parents("li").each(function() {
            var lbl = $(this).find("label:first").prev().attr("checked", true).next();
            if (!lbl.hasClass("checked")) lbl.addClass("checked");
        });

        var olLyrType = elem.parents("div:eq(0)").attr("olLayerType");
        var olLyrName = elem.parents("div:eq(0)").attr("olLayerName");

        if (olLyrType == "mapserver") {
            //Alterado por ser incompatível com a versão 1.3.2 do jquery
            //var groups = $("#toc>div[@olLayerType=mapserver]").filter("[@olLayerName=" + olLyrName + "]");
            var groups = $("#toc>div[olLayerType=mapserver]").filter("[olLayerName=" + olLyrName + "]");

            var mslayersnames = "";
            var mslayer = "";

            $(groups).each(function() {
                var olname = $(this).attr("olLayerName");

                var vLayers = $(this).find("ul li").not(":has(ul)").filter(":has(label:first.checked)");

                mslayer = "";

                for (var i = 0; i < vLayers.length; i++) {
                    var l = $(vLayers[i]).parents("li");

                    mslayer = $("label:first", vLayers[i]).attr("olLayerName");

                    for (var j = 0; j < l.length; j++) {
                        var e = $(l[j]);

                        if ($("label:first.checked", e).length == 0) {
                            mslayer = "";

                            break;
                        }
                    }

                    if (mslayer.length > 0) mslayersnames += " " + mslayer
                }
            });

            if (map.getLayer(olLyrName) != null) {
                map.getLayer(olLyrName).params["layers"] = mslayersnames;
                map.getLayer(olLyrName).redraw();
            }

        } else {
            if (!elem.is(":has(ul)")) {
                olLyrName = $("label:first", elem).attr("olLayerName");

                var p = elem.parents("ul:eq(0)");

                $("li", p).each(function() {

                    olLyrName = $("label:first", this).attr("olLayerName");
                    if (map.getLayer(olLyrName) != null) {
                        //Alterado por ser incompatível com a versão 1.3.2 do jquery
                        //map.getLayer(olLyrName).setVisibility($("label:first.checked", this).length && $("label:first.checked", elem.parents("li:eq(0)")).length);
                        map.getLayer(olLyrName).setVisibility($("label:first", this).hasClass("checked") && $("label:first", elem.parents("li:eq(0)")).hasClass("checked"));
                    }
                });
            } else {
                $("li", elem).each(function() {
                    olLyrName = $("label:first", this).attr("olLayerName");
                    if (map.getLayer(olLyrName) != null) {
                        //Alterado por ser incompatível com a versão 1.3.2 do jquery
                        //map.getLayer(olLyrName).setVisibility($("label:first.checked", this).length && $("label:first.checked", elem).length);
                        map.getLayer(olLyrName).setVisibility($("label:first", this).hasClass("checked") && $("label:first", elem).hasClass("checked"));
                    }
                });
            }
        }
    }
}

function SetLayerExpanded(layerKey) {
    var elem = $("li[olKey='" + layerKey + "']");

    if (elem != null) {
        elem.parents("ul").each(function() {
            var SS = "";

            $(this).show();
            $(this).prevAll("img:first").attr("src", "images/page/node_closed.gif");
        });
    }
}

function getAllVisibleLayers() {

    var layer = "";
    var layersList = "";

    $("#toc").find("label[olLayerName]").each(function() {
        layer = "";

        if ($(this).hasClass("checked")) {
            layer = $(this).attr("ollayername");

            var elem = $(this)

            elem.parents("li:has(ul)").find("label:first").each(function() {
                if (!$(this).hasClass("checked")) {
                    layer = "";
                }
            });

            if (layer != "") {
                layersList += " " + layer;
            }
        }

    });

    return layersList;
}


function clearMap() {
    var layer = null;

    layer = map.getLayersByName("features")[0];
    if (layer != null) {
        for (var i = layer.features.length - 1; i >= 0; i--) {
            var f = layer.features[i];
            layer.destroyFeatures(f);
        }

    }

    try {
        var ctrl = this.map.getControlsBy("id", "ctrlModifyPolygon")[0];
        if (ctrl.active) ctrl.deactivate();
    } catch (err) { }
    layer = map.getLayersByName("edition")[0];
    if (layer != null) {
        if (layer.features.length > 0 && $("#sidebar").attr("panel") == "plantas") {
            DoPlantasGoBack();
        }

        for (var i = layer.features.length - 1; i >= 0; i--) {
            var f = layer.features[i];
            layer.destroyFeatures(f);
        }
    }

    if (MAPSERVER_SELECTION) {
        layer = map.getLayer("ol_layer_mapserver1");

        if (layer != null) {
            $j.each(selectionParams, function(index, val) {

                layer.params[index] = "-1";
            });

            layer.redraw();
        }
    }
}


function txtScale_onKeyPress(control, e) {
    var characterCode;

    if (e && e.which) { //if which property of event object is supported (NN4)
        e = e;
        characterCode = e.which;
    }
    else {
        e = event;
        characterCode = e.keyCode; //character code is contained in IE's keyCode property
    }

    //(if enter key)
    if (characterCode == 13) {
        DoZoomScale();

        return false;
    }

    return true;
}

function DoZoomScale() {
    map.zoomToScale(parseInt($("#txtScale").attr("value")));
}

function DoGetInfo(x, y) {

    var layer = map.getLayersByName("edition")[0];

    var point = new OpenLayers.Geometry.Point(x, y);
    var feature = new OpenLayers.Feature.Vector(point, { type: 0 });

    layer.destroyFeatures();
    layer.addFeatures([feature]);

    //AAE_DEV.Ajax.Requests.DoGetInfo(x, y, ADMIN_UNIT, DoGetInfo_CallBack);
    AAE_DEV.Ajax.Requests.DoGetInfo(x, y, "0805", DoGetInfo_CallBack);
}

function DoGetInfo_CallBack(response) {
    var ss = response.value;


    $("#dialogTest").html(ss).dialog("open");

    return false;

}

function drawInfoFeature(wkt) {

    //Selecção a partir do Vector
    var layer = map.getLayersByName("features")[0];
    layer.destroyFeatures();

    var feature = wkt_trans.read(wkt);

    if (feature != null && feature != undefined) {

        //        var extent = wkt_trans.read(response.value[2]);

        //        if (extent != null && extent != undefined) {
        //            map.zoomToExtent(extent.geometry.getBounds());
        //        }

        //        var popupHTML = "<div style='font-size:.8em'>" + response.value[4] + "<br />" + response.value[5] + "</div>";

        //        feature.data = { tipo: "planos",
        //            html: popupHTML
        //        };

        layer.addFeatures(feature);
    }

}

function DoGetFeaturesGeometry() {

    var geomWKT = null;

    var layer = map.getLayersByName('edition')[0];

    if (layer.features.length > 0) {
        geomWKT = wkt_trans.write(layer.features[0]);
    }

    return geomWKT;
}

function DoZoomGeometry(geomWKT) {

    var extent = wkt_trans.read(geomWKT);

    if (extent != null && extent != undefined) {
        var bnd = extent.geometry.getBounds().clone();

        bnd.left = bnd.left - 50;
        bnd.right = bnd.right + 50;
        bnd.top = bnd.top + 50;
        bnd.bottom = bnd.bottom - 50;

        map.zoomToExtent(bnd);
    }
    
}