var iconBlue = new GIcon(); 
iconBlue.image = '/images/google_maps/markers/mm_20_blue.png';
iconBlue.shadow = '/images/google_maps/markers/mm_20_shadow.png';
iconBlue.iconSize = new GSize(12, 20);
iconBlue.shadowSize = new GSize(22, 20);
iconBlue.iconAnchor = new GPoint(6, 20);
iconBlue.infoWindowAnchor = new GPoint(5, 1);

var iconRed = new GIcon(); 
iconRed.image = '/images/google_maps/markers/mm_20_red.png';
iconRed.shadow = '/images/google_maps/markers/mm_20_shadow.png';
iconRed.iconSize = new GSize(12, 20);
iconRed.shadowSize = new GSize(22, 20);
iconRed.iconAnchor = new GPoint(6, 20);
iconRed.infoWindowAnchor = new GPoint(5, 1);

var iconCrimson = new GIcon();
iconCrimson.image = '/images/google_maps/markers/mm_20_crimson.png';
iconCrimson.shadow = '/images/google_maps/markers/mm_20_shadow.png';
iconCrimson.iconSize = new GSize(12, 20);
iconCrimson.shadowSize = new GSize(22, 20);
iconCrimson.iconAnchor = new GPoint(6, 20);
iconCrimson.infoWindowAnchor = new GPoint(5, 1);

var customIcons = [];
customIcons["blue"] = iconBlue;
customIcons["red"] = iconRed;
customIcons["crimson"] = iconCrimson;

function createPublicDraggableMarker(point, listing_id)
{
	var marker = new GMarker(point, {draggable: true, icon: customIcons['red']});
	
	GEvent.addListener(marker, 'dragstart', function() {
	marker.closeInfoWindow();
	});
	
	GEvent.addListener(marker, 'dragend', function() {
	suggestMarker(marker, listing_id);
	});

return marker;
}

function suggestMarker(marker, listing_id)
{
var newpoint = marker.getLatLng();
GDownloadUrl("/en/actions/map/suggest/?listing_id=" + listing_id +
'&lat=' + newpoint.lat() +
'&lon=' + newpoint.lng(), function(){});
}

function createMarker(point, name, address, link, type)
{
	var marker = new GMarker(point, customIcons[type]);
	var html = '<a href="' + link + '"><b>' + name + '</b><br />' + address + '</a>';
    
	GEvent.addListener(marker, 'click', function() {
	marker.openInfoWindowHtml(html);
	});
 return marker;
}

function createMarkerNoPopUp(point, type)
{
	var marker = new GMarker(point, customIcons[type]);
	return marker;
}

function loadCountryMap(dest_element)
{
	if (GBrowserIsCompatible())
	{
    var map = new GMap2(document.getElementById(dest_element));
	map.addControl(new GSmallMapControl());
    
    GDownloadUrl("/en/scripts/google_maps/country/zoom_level.php", function(data) {
	
	var xml = GXml.parse(data);
	var zoom_level = xml.documentElement;
    map.setZoom(parseInt(zoom_level.getAttribute("level")));
    });
    
	GDownloadUrl("/en/scripts/google_maps/country/xml.php", function(data) {
	
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
    
    // calculate map centre
    var lat_sum = 0;
    var lon_sum = 0;
    
        for (var i = 0; i < markers.length; i++)
        {
        lat_sum += parseFloat(markers[i].getAttribute("lat"));
		lon_sum += parseFloat(markers[i].getAttribute("lon"));
        }
        
    var av_lat = lat_sum / markers.length;
    var av_lon = lon_sum / markers.length;
    map.setCenter(new GLatLng(av_lat, av_lon));
    
        for (var i = 0; i < markers.length; i++) {
        var name = markers[i].getAttribute("name");
        var address = '';
        var link = markers[i].getAttribute("link");
        var type = 'crimson';
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lon")));
        var marker = createMarker(point, name, address, link, type);
        map.addOverlay(marker);
        }
	});
	}
}

function loadCityMap(dest_element, city_id, city_lat, city_lon)
{
	if (GBrowserIsCompatible())
	{
	GDownloadUrl("/en/scripts/google_maps/city/xml.php?city_id=" + city_id, function(data) {
	
	var map = new GMap2(document.getElementById(dest_element));
	map.addControl(new GSmallMapControl());
	map.setCenter(new GLatLng(city_lat, city_lon), 13);
	
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
    
        for (var i = 0; i < markers.length; i++) {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var link = markers[i].getAttribute("link");
        var type = 'crimson';
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lon")));
        var marker = createMarker(point, name, address, link, type);
        map.addOverlay(marker);
        }
    });
	}
}

function loadItemMap(dest_element, listing_id)
{
	if (GBrowserIsCompatible())
	{
	GDownloadUrl("/en/scripts/google_maps/item/xml.php?listing_id=" + listing_id, function(data) {
	
	var map = new GMap2(document.getElementById(dest_element));
	map.addControl(new GSmallMapControl());
	//map.addControl(new GMapTypeControl());
	
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
    
        for (var i = 0; i < markers.length; i++) {
        //var name = markers[i].getAttribute("name");
        //var address = markers[i].getAttribute("address");
        //var link = markers[i].getAttribute("link");
        var type = 'red';
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lon")));
        map.setCenter(point, 16);
        var marker = createMarkerNoPopUp(point, type);
        map.addOverlay(marker);
        }
    });
	}
}

function loadItemMapLarge(dest_element, listing_id)
{
	if (GBrowserIsCompatible())
	{
   	var map = new GMap2(document.getElementById(dest_element));
    map.addControl(new GSmallMapControl());
       
    // get the url with the proximity points
  	GDownloadUrl("/en/scripts/google_maps/proximity/xml.php?listing_id=" + listing_id, function(data) {
    
    var	xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
    	
        for (var i = 0; i < markers.length; i++)
        {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var link = markers[i].getAttribute("link");
        var type = 'crimson';
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lon")));
        var marker = createMarker(point, name, address, link, type);
        map.addOverlay(marker);
        }
    });
    
    // get the url with the core point
	GDownloadUrl("/en/scripts/google_maps/item/xml.php?listing_id=" + listing_id, function(data) {
	
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
    
        for (var i = 0; i < markers.length; i++)
        {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var link = markers[i].getAttribute("link");
        var type = 'red';
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lon")));
        map.setCenter(point, 16);
        var marker = createMarker(point, name, address, link, type);
        map.addOverlay(marker);
        } 
    });
    
	}
}

function loadItemMapLargePicker(dest_element, listing_id)
{
	if (GBrowserIsCompatible())
	{
   	var map = new GMap2(document.getElementById(dest_element));
    
    // get the url with the existing point
	GDownloadUrl("/en/scripts/google_maps/item/xml.php?listing_id=" + listing_id, function(data) {
	
	map.addControl(new GSmallMapControl());
	
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
    
        for (var i = 0; i < markers.length; i++)
        {
        var name = markers[i].getAttribute("name");
        var address = markers[i].getAttribute("address");
        var link = markers[i].getAttribute("link");
        //var type = 'red';
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                parseFloat(markers[i].getAttribute("lon")));
        map.setCenter(point, 16);
        var marker = createPublicDraggableMarker(point, listing_id);
        map.addOverlay(marker);
        }
    });
	}
}