/* Requires from parent page:

route_id = integer
route_bounds = new GLatLngBounds(minLat, minLng, maxLat, maxLng);
start_point = new GLatLng(lat,lng);
end_point = new GLatLng(lat,lng);
*/

if (GBrowserIsCompatible()) {

    var mapDiv = document.getElementById("googlemap");
    var map = new GMap2(mapDiv);
    new GKeyboardHandler(map);
    map.enableDoubleClickZoom();
    map.enableScrollWheelZoom();

    //----- Stop page scrolling ----
    function wheelevent(e)
    {
        if (!e) e = window.event;
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
    }
    GEvent.addDomListener(mapDiv, 'DOMMouseScroll', wheelevent);
    mapDiv.onmousewheel = wheelevent;

    var maximised = false;
    var map_width = mapDiv.offsetWidth;
    var map_height = mapDiv.offsetHeight;

    var wpt_icon = new GIcon();
    wpt_icon.image = 'http://www.ctc-maps.org.uk/images/gm_point.png';
    wpt_icon.iconSize = new GSize(8, 8);
    wpt_icon.iconAnchor = new GPoint(4, 4);
    var poi_icon = new GIcon(wpt_icon);
    poi_icon.image = 'http://www.ctc-maps.org.uk/images/gm_point_green.png';

    /* Set map background colour */
    mapDiv.style.backgroundColor="#ffffff";

    /* Fade map */
    var NormalLayer = G_NORMAL_MAP.getTileLayers()[0];
    NormalLayer.getOpacity = function () {return 0.5};

    map.addMapType(G_PHYSICAL_MAP);
    map.addMapType(G_SATELLITE_3D_MAP);

    var polyline = new Array();
    var rtepoints = new Array();
    var offpoints = new Array();
    var zoom_level;

    if (typeof(zoom_limit)=='undefined') zoom_limit = 0;

    var bw = route_bounds.toSpan().lng();
    var bh = route_bounds.toSpan().lat();
    //var initial_view_bounds = route_bounds;
    var initial_view_bounds = new GLatLngBounds(
    new GLatLng(route_bounds.getSouthWest().lat()-(bh*0.01),route_bounds.getSouthWest().lng()-(bw*0.02)),
    new GLatLng(route_bounds.getNorthEast().lat()+(bh*0.15),route_bounds.getNorthEast().lng()+(bw*0.02))
    );
    var view_bounds = initial_view_bounds;
    var average_view_lat = (initial_view_bounds.getSouthWest().lat() + initial_view_bounds.getNorthEast().lat())/2;
    var average_view_lng = (initial_view_bounds.getSouthWest().lng() + initial_view_bounds.getNorthEast().lng())/2;
    var view_center = new GLatLng(average_view_lat,average_view_lng);

    initial_zoom_level = map.getBoundsZoomLevel(initial_view_bounds);
    if (initial_zoom_level > 12) initial_zoom_level = 12;
    map.setCenter(view_center, initial_zoom_level);
    zoom_level = initial_zoom_level;

    if (typeof(map_opacity)!='undefined')
    {
        var tilelayer = new GTileLayer(new GCopyrightCollection(), 0, 17);
        tilelayer.getTileUrl = function(tile, zoom) {
            // A more interesting tile server would do something with the numbers
            // tile.x, tile.y and zoom.
            return "http://kml.lover.googlepages.com/white_map_tile.gif";
        };
        tilelayer.getOpacity = function() {return map_opacity;}
        //map.addOverlay(new GTileLayerOverlay(tilelayer));
    }

    var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(100,10));
    var m = document.createElement('div');
    pos.apply(m);
    m.style.color = 'red';
    m.style.background = '#ffffdd';
    m.style.fontWeight = 'bold';
    map.getContainer().appendChild(m);

    function message(message)
    {
        if (m.hasChildNodes()) m.removeChild(m.childNodes[0]);
        if (message!='')
        {
            mp = document.createElement('p');
            mp.style.margin = '0';
            mp.style.padding = '0.25em 0.75em';
            mp.style.border = '1px solid #666666';
            mess = document.createTextNode(message);
            mp.appendChild(mess);
            m.appendChild(mp);
        }
    }

    function loginmessage()
    {
        var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(100,10));
        var m = document.createElement('div');
        pos.apply(m);
        m.style.color = 'red';
        m.style.opacity = '50%';
        m.style.background = '#ffffdd';
        m.style.fontWeight = 'bold';
        mpp = document.createElement('p');
        mpp.style.margin = '0';
        mpp.style.padding = '0.25em 0.75em';
        mpp.style.border = '1px solid #666666';
        mpp.appendChild(document.createTextNode('Please '));
        var link = document.createElement('a');
        link.setAttribute('href', '/login?redir='+escape(window.location.pathname));
        link.appendChild(document.createTextNode('log in'));
        mpp.appendChild(link);
        mpp.appendChild(document.createTextNode(' to see route detail'));
        m.appendChild(mpp);
        map.getContainer().appendChild(m);
    }

    var baseIcon = new GIcon();
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);

    if (typeof(end_point)!='undefined')
    {
        var end_icon = new GIcon(baseIcon);
        end_icon.image = 'http://www.google.com/mapfiles/dd-end.png';
        var end_marker = new GMarker(end_point, end_icon);
        map.addOverlay(end_marker);
    }
    if (typeof(start_point)!='undefined')
    {
        var start_icon = new GIcon(baseIcon);
        start_icon.image = 'http://www.google.com/mapfiles/dd-start.png';
        var start_marker = new GMarker(start_point, start_icon);
        map.addOverlay(start_marker);
    }

    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl());

    if (typeof(lines)!='undefined' && lines.length>0)
    {
        var numlines = lines.length;
        for (var i=0; i<numlines; i++)
        {
            var line = lines[i];
            var polyline = new GPolyline.fromEncoded({
            color: "#990099",
            weight: 2,
            opacity: 0.6,
            points: line.points,
            levels: line.levels,
            zoomFactor: 2,
            numLevels: 18
            });
            map.addOverlay(polyline);
        }
    }
    else
    {
        var polyline = new GPolyline([start_point,end_point],"#990099",2,0.6);
        map.addOverlay(polyline);
        loginmessage();
    }
    
    //GEvent.addListener(map,'zoomend',function(o,n){GLog.write('Zoomed from '+o+' to '+n);});
    
    function zoom(level)
    {
        if (level==-1) map.setCenter(view_center,initial_zoom_level) /// *************
        else map.zoomTo(level);
    }

    if (window.attachEvent) // Internet Explorer
    {
        window.attachEvent("onresize", function(){ map.checkResize();} );
        window.attachEvent("onunload", GUnload );
    }
    else // Firefox and others.
    {
        window.addEventListener("resize", function(){ map.checkResize();}, false);
        window.addEventListener("unload", GUnload, false);
    }

    makeMaximiseButton();
}
