function MapRenderer(){
	this.renderMap = function(latitude, longitude, mapElement){
		if (GBrowserIsCompatible())
		{
			var listing = new GLatLng(latitude, longitude);
			var map = new GMap2(mapElement);
			map.setCenter(listing, 15, G_HYBRID_MAP);
			map.addOverlay(new GMarker(listing));
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
		}
	}
}

function DetailViewMapModule(mapElementId, photoElementId, activateLinkElementId, activateLinkText, deactivateLinkText, longitude, latitude)
{
    this.mapElementId = mapElementId;
    this.photoElementId = photoElementId;
    this.activateLinkElementId = activateLinkElementId;
    this.deactivateLinkText = deactivateLinkText;
    this.activateLinkText = activateLinkText;
    this.longitude = longitude;
    this.latitude = latitude;
    
    this.mapActivated = false;
    this.visible = false;
    
    this.getMap = function()
    {
        return document.getElementById(this.mapElementId);
    }
    
    this.activateMap = function()
    {
        if (this.mapActivated)
        {
            return;
        }
        this.mapActivated = true;

		var renderer = new MapRenderer();
		renderer.renderMap(this.latitude, this.longitude, this.getMap());
    }
    
    this.toggleVisibility = function()
    {
        this.visible = !this.visible;
        //set map and photo element visibility
        this.getMap().style.display = (this.visible) ? "block" : "none";
        document.getElementById(this.photoElementId).style.display = (!this.visible) ? "block" : "none";
        
        //activate map (must be done after the map element is visible)
        if (this.visible)
        {
            this.activateMap();
        }
        
        //set link text
        document.getElementById(this.activateLinkElementId).innerHTML = (this.visible) ? this.deactivateLinkText : this.activateLinkText;
    }

    var oldLoadEvent = window.onload;
    var mapModule = this;
    window.onload = function()
    {
        if (oldLoadEvent)
        {
            oldLoadEvent();
        }
        
        if (GBrowserIsCompatible())
        {
            document.getElementById(activateLinkElementId).style.display = "inline";
            mapModule.activateLinkText = document.getElementById(activateLinkElementId).innerHTML;
            mapModule.getMap().style.display = "none";
        }
    };
}


function StaticDetailViewMapModule(mapElementId, longitude, latitude)
{
	var oldLoadEvent = window.onload;        
	
	window.onload = function()
	{	
		if (oldLoadEvent)
		{
			oldLoadEvent();
		}

		var renderer = new MapRenderer();
		renderer.renderMap(latitude, longitude, document.getElementById(mapElementId));
	}
}
