﻿var Expo58Map = {
    create: function(id, Expo58Kml) {
        if (GBrowserIsCompatible()) {
            var map = new GMap2(document.getElementById(id));
            map.disableScrollWheelZoom();

            var currentProjection = G_NORMAL_MAP.getProjection();
            // ground overlay
            var mapBounds = new GLatLngBounds(new GLatLng(50.882870, 4.324125), new GLatLng(50.906164, 4.364307));
            map.setCenter(mapBounds.getCenter(), 15);

            var tilelayer = new GTileLayer();
            tilelayer.getTileUrl = function(point, zoom) {
                var tile = { x: Math.floor(point.x / 256), y: Math.floor(point.y / 256) };
                var latlng1 = currentProjection.fromPixelToLatLng(new GPoint(point.x * 256, (point.y + 1) * 256), zoom);
                var latlng2 = currentProjection.fromPixelToLatLng(new GPoint((point.x + 1) * 256, point.y * 256), zoom);
                var tileBoundary = new GLatLngBounds(latlng1, latlng2);
                var scaleLatPx = 256 / (latlng2.lat() - latlng1.lat());
                var scaleLngPx = 256 / (latlng2.lng() - latlng1.lng());
                var pictureWidth = Math.round((mapBounds.getNorthEast().lng() - mapBounds.getSouthWest().lng()) * scaleLngPx);
                var pictureHeight = Math.round((mapBounds.getNorthEast().lat() - mapBounds.getSouthWest().lat()) * scaleLatPx);
                var pictureOffsetWidth = Math.round((-mapBounds.getSouthWest().lng() + tileBoundary.getSouthWest().lng()) * scaleLngPx);
                var pictureOffsetHeight = Math.round((mapBounds.getNorthEast().lat() - tileBoundary.getNorthEast().lat()) * scaleLatPx);
                var img = "/gmap/tiles/tile_"
                        + pictureWidth + "_" + pictureHeight
                        + "_" + pictureOffsetWidth + "_" + pictureOffsetHeight + ".png";
                return img;
            };
            tilelayer.isPng = function() { return true; };
            tilelayer.getOpacity = function() { return 1.0; }

            var myTileLayer = new GTileLayerOverlay(tilelayer, { zPriority: 0 });
            map.addOverlay(myTileLayer);

            var gkml = new GGeoXml("http://" + document.location.host + Expo58Kml);
            map.addOverlay(gkml);

            var customUI = new GMapUIOptions();
            customUI.maptypes = {};
            customUI.zoom = {};
            customUI.controls = {};
            customUI.maptypes.normal = true;
            customUI.maptypes.hybrid = true;
            customUI.zoom.doubleclick = true;
            customUI.zoom.scrollwheel = true;
            customUI.controls.smallzoomcontrol3d = true;
            customUI.controls.menumaptypecontrol = true;
            map.setUI(customUI);

            return map;
        }
    }
};