function MapRenderer(){
	this.renderMap = function(latitude, longitude, mapElement){
		var listing = new google.maps.LatLng(latitude, longitude);
		var map = new google.maps.Map(mapElement,
		{
			center: listing,
			zoom: 15,
			mapTypeId: google.maps.MapTypeId.HYBRID
		});
		var marker = new google.maps.Marker({position: listing, map: map});
	}
}

function DetailViewMapModule(mapElementId, photoElementId, activateLinkElementId, activateLinkText, deactivateLinkText, longitude, latitude, callbackUrl)
{
    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.viewStatRecorded = 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;
        this.trackMapView();
    }
	
	this.trackMapView = function() {
	    if(!this.viewStatRecorded) {
	        $.get(callbackUrl);
	        this.viewStatRecorded = true;
	    }
	}
    var oldLoadEvent = window.onload;
    var mapModule = this;
    window.onload = function()
    {
        if (oldLoadEvent)
        {
            oldLoadEvent();
        }
		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));
	}
}

