/**
 * @name MapController
 * @version 1.0
 * @copyright (c) 2009 21bucks.com
 *
 * All rights reserved. Unauthorized use is prohibited.
*/

function MapController() {
    
    var map;
    var markers;
    var markermanager;
    var me;
    var icon;
}

MapController.prototype.constructor = function MapController(gmap, markermanager) {
    this.map = gmap;
    this.markermanager = markermanager;
    this.me =this;
}

MapController.prototype.init = function (zoom,lat,lng) {
    
    var me = this;
    
    if (GBrowserIsCompatible()) {

        
        // display the loading message
        //var om = new OverlayMessage(document.getElementById('map'));      
        //om.Set('<b>Loading...</b>');
		
        var map = new GMap2(document.getElementById("map"));
        this.map = map;
        map.addControl(new GLargeMapControl());
        var menucontrol = new GMenuMapTypeControl();
        map.addMapType(G_PHYSICAL_MAP);
        map.addControl(menucontrol);
        
		map.getDragObject().setDraggableCursor("crosshair");
		
		if (zoom >0) {
			map.setCenter(new GLatLng(lat,lng), zoom, G_PHYSICAL_MAP );
		}

        else map.setCenter(new GLatLng(52.088,5.1155), 7, G_PHYSICAL_MAP );
        
        
        var mm = new MarkerManager(map, {
            borderPadding:1
        });
        var mapcontroller = new MapController(map,mm);
        
        this.initIcons();
        this.markers = this.addMarkers(map,mm);


        // == Listen for map click and add an input marker
        GEvent.addListener(map,"click",function(map,point){
            //only add markers if add_button is checked
            //alert(document.getElementById("add_button").checked);
            if (document.getElementById("add_button").checked == "true") {
                createInputMarker(me.map, point);
            }
        });

        //directions:
        

        
    }
    
    // display a warning if the browser was not compatible
    else {
        alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}
MapController.prototype.setCursor = function(cursor) {
        //var map = new GMap2(document.getElementById("map"));
    map.getDragObject().setDraggableCursor("crosshair");
}
MapController.prototype.initIcons = function() {
    this.icon = new GIcon();
    this.icon.image = "images/mapicon.gif";
    this.icon.iconSize = new GSize(39, 39);
    this.icon.iconAnchor = new GPoint(19, 19);
    this.icon.infoWindowAnchor = new GPoint(11, 1);      
 
}

MapController.prototype.addMarkers = function (map,mm) {
	//initicons
	icon0 = new GIcon();
    icon0.image = "/images/circle0.png";
    icon0.iconSize = new GSize(12, 12);
    icon0.iconAnchor = new GPoint(6, 6);
    icon0.infoWindowAnchor = new GPoint(11, 1);

    icon1 = new GIcon(icon0,"/images/circle1.png");
    icon2 = new GIcon(icon0,"/images/circle2.png");




    var n=0;
    
    //get the coordinates
    var bounds = map.getBounds();
    sw = bounds.getSouthWest();
    ne = bounds.getNorthEast();
    
    // read the markers from the XML
    var gmarkers = [];  
    var me =this;
    GDownloadUrl("map/connect.php", function (doc) {
        
        
        var xmlDoc = GXml.parse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("location");
        
        for (var i = 0; i < markers.length; i++) {
            // obtain the attribues of each marker
            var marker = markers[i];//.getElementsByTagName("geo")[0];
            var lat = marker.getElementsByTagName("lat")[0].childNodes[0].nodeValue;
            var lng = marker.getElementsByTagName("lng")[0].childNodes[0].nodeValue;
            var point = new GLatLng(lat,lng);
            //var id = markers[i].getElementsByTagName("id")[0].childNodes[0].nodeValue;

            var id = marker.getElementsByTagName("location_id")[0].childNodes[0].nodeValue;
			var weeksago = marker.getElementsByTagName("weeksago")[0].childNodes[0].nodeValue;
            var type="roadworks";

			//alert("weeks ago: "+weeksago);
            //set icons:
			var icon;
            if (weeksago == 0) icon = icon0;
			else if (weeksago == 1) icon = icon1;
			else icon = icon2;
			
            var marker2 = me.createMarker(point,type,id,icon,map);
            gmarkers.push(marker2);
                
        }
        
        
        mm.addMarkers(gmarkers,0,17);
        me.setMarkers(gmarkers);
        mm.refresh();
    });
    
}

MapController.prototype.removeMarkers =  function (map) {
    map.clearOverlays();
}

MapController.prototype.setMarkers =  function (markers) {
    this.markers = markers;
//alert("markers: "+markers.length);
}

MapController.prototype.createMarker = function (point,name,id,icon, map) {
    var marker = new GMarker(point, {
        icon:icon
    });
	
    marker.type = name;
    marker.name ="vanilla";
    //alert(marker.type+" = "+marker.name);
    GEvent.addListener(marker, "click", function(overlay,latlng) {
        //get details from URL
        //alert(latlng);
        if (overlay && id >=0) {
            GDownloadUrl("map/popup.php?id="+id, function (doc) {
                //alert("map click");
                marker.openInfoWindowHtml(doc,{maxWidth:350});
            });
            //marker.openInfoWindowHtml(doc);
        }
    });
    return marker;
    
}


//-------------------------------------------------------
//add a new marker to the map
function createInputMarker(map, point) {
    if (!point) return;

    var marker = new GMarker(point,{
        draggable:true,
        icon:G_START_ICON
    });
	
	
	//restore default cursor
	document.body.style.cursor = 'default';
	
    var form = "map/adddetails.php?lat="+point.lat()+"&lng="+point.lng()+"&zoom="+map.getZoom();
    GEvent.addListener(marker, "click", function() {
        GDownloadUrl(form, function (doc) {
            marker.openInfoWindowHtml(doc);
        });


    });

    map.addOverlay(marker);
    GDownloadUrl(form, function (doc) {
        marker.openInfoWindowHtml(doc);
    });
    return marker;
}






