﻿var MapConstants = {
    rt90: null,
    wgs84: null,
    mercator: null
};

function RenderMaps(j, isManyMarkers) {
    Proj4js.defs["EPSG:3021"] = "+proj=tmerc +lat_0=0.000000000 +lon_0=15.8062845294444 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=WGS84 +units=m +no_defs ";
    MapConstants.rt90 = new OpenLayers.Projection("EPSG:3021");
    MapConstants.wgs84 = new OpenLayers.Projection("EPSG:4326");
    MapConstants.mercator = new OpenLayers.Projection("EPSG:900913");

    var k = getMapData();
    var g = "/img/EniroMap";
    var c = {
        zoomBar: isManyMarkers,
        activeLayers: [Eniro.Map.LAYER_MAP, Eniro.Map.LAYER_AERIAL, Eniro.Map.LAYER_HYBRID],
        keyboardControl: false
    };
    var b = new Eniro.API.Map(j, g, c);
    var h = b.getControlsByClass("OpenLayers.Control.Navigation");

    for (var e = 0; e < h.length; e++) {
        h[e].disableZoomWheel();
    }

    if (k.objects.length > 0) {
        var a = new OpenLayers.Bounds();
        var d = new Array();

        for (var e = 0; e < k.objects.length; e++) {
            d[e] = mapMarker(b, k.objects[e]);
            a.extend(d[e].geometry);
        }

        a.toBBOX();
        b.zoomToExtent(a);
    }

    if (!isManyMarkers) {
        b.zoomTo(15);
    }
}

var getMapData = function() {
    var d = {
        geoX: 0,
        geoY: 0,
        objects: []
    };
    var a = 0;
    var e = 0;

    if ($("#hits-detailed tr").length > 0) {
        $("#hits-detailed tr").each(function(g) {
            var j = $('input[class="location"]', $(this));
            var k = $('input[class="venueurl"]', $(this));
            if (j.attr("value") != undefined) {
                var coord = j.attr("value").split("|");
                var point = new OpenLayers.LonLat(coord[0], coord[1]).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:3021"));

                a = point.lon;
                e = point.lat;

                if (d.geoX == 0) {
                    d.geoX = a;
                    d.geoY = e;
                }

                d.objects.push({
                    name: $(".name a", $(this)).html(),
                    link: k.val(),
                    x: a,
                    y: e,
                    element: $(this)
                });
            }
        });
    }

    return d;
}

var mapLocationFromRT90 = function(b, c) {
    var a = new OpenLayers.LonLat(b, c);
    
    a.transform(MapConstants.rt90, MapConstants.mercator);
    
    return a;
}

var mapMarker = function(d, e) {
    var c = mapLocationFromRT90(e.x, e.y);
    var a = new Eniro.Feature.PopupFeature(c, null);
    
    a.events.register("mouseover", a, function(f) {
        mapItemHoverIn(a, b, e, true);
        OpenLayers.Event.stop(f);
    });
    
    if (e.element) {
        e.element.hover(function() {
            mapItemHoverIn(a, b, e, false);
        }, function() {
            mapItemHoverOut(a, b, e, false);
        });
    }
    
    var b = new Eniro.Feature.PopupFeature(c, null);
    
    b.events.register("mouseout", b, function(f) {
        mapItemHoverOut(a, b, e, true);
        OpenLayers.Event.stop(f);
    });
    
    if (e.link) {
        b.events.register("click", b, function(f) {
            location.href = e.link;
            OpenLayers.Event.stop(f);
        });
    }
    
    d.addFeature(a);
    d.addFeature(b);
    a.show();
    b.hide();
    
    return a;
}

var mapItemHoverIn = function(a, b, d, c) {
    b.show();
    a.hide();
    
    if (d.venueid && c) {
        $("#hits-detailed tr.venue-" + d.venueid).css("backgroundColor", "#f9f0f9");
    } else {
        if (d.element) {
            d.element.css("backgroundColor", "#f9f0f9");
        }
    }
}

var mapItemHoverOut = function(a, b, d, c) {
    a.show();
    b.hide();
    
    if (d.venueid && c) {
        $("#hits-detailed tr.venue-" + d.venueid).css("backgroundColor", "transparent");
    } else {
        if (d.element) {
            d.element.css("backgroundColor", "transparent");
        }
    }
}
