var Map = new Object();
Map.controlDiv = '';
Map.urlParameters = '';
Map.url = '/ajax/getMap.php';
Map.GM;
Map.markers = {};
Map.zoom = 10;
Map.gmarkers = [];
Map.gmarkerCount = 0;
Map.startLat = 33.5;
Map.startLon = -117.74;
Map.GMarkerManager;
Map.markerList = [];
Map.sideBarItems = [];

//Adds a sidebar item for rendering sidebar later.
Map.addSideBarItem = function(name, id, html) {
	var labelID = Number(id) + 1;
	Map.sideBarItems[id] = '<div id="link'+id+'">'+' <a href="javascript:Map.linkClicked(' + id + ')" onClick="">'
           + name + '</a><br>' + html + '</div>';
}

// A function to create the marker and set up the event window
Map.createMarker = function createMarker(point,html) {
	var marker = new GMarker(point);
	var linkid = "link"+Map.gmarkerCount;
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
		lastlinkid=linkid;
	});
	// save the info we need to use later for the side_bar
	Map.gmarkers[Map.gmarkerCount] = marker;
	Map.gmarkerCount++;
	return marker;
}

Map.initialize = function(startDiv, loc) {
	this.GM = new GMap2(document.getElementById(startDiv));
	this.GM.enableScrollWheelZoom();
	this.GM.addControl(new GSmallZoomControl());
	this.GM.addControl(new GMapTypeControl());
	this.GM.setCenter(new GLatLng( this.startLat,this.startLon), this.zoom);
	this.GMarkerManager = new GMarkerManager(this.GM);
        if (this.showSat)
        {
          this.GM.setMapType(G_HYBRID_MAP);
          //this.GM.setMapType(G_SATELLITE_MAP);
        }
}

Map.getGeocode = function(val) {
	var ajax  = new Ajax.Request(
		 this.url,
		 {
				method:     "post",
				parameters: Map.urlParameters,
				onSuccess:  Map.renderMap
		 }   
	);
}

Map.linkClicked = function(i) {
	GEvent.trigger(Map.markerList[i], "click");
}

Map.loadMarker = function(type, latLon, name, html, icon, sidebar_html) {
	if (!Map.markers[type]) {
		Map.markers[type] = new Array();
	}
	var dataArray = {};
	dataArray["lat"] = latLon[0];
	dataArray["lon"] = latLon[1];
	dataArray["html"] = html;
	dataArray["icon"] = icon;
	dataArray["name"] = name;
	dataArray["sidebar_html"] = sidebar_html;
	Map.markers[type].push(dataArray);
}

Map.renderAllMarkers = function(type) {
	if (Map.markers[type]) {
		var bounds = new GLatLngBounds();
		for(i in Map.markers[type]) {
			var lat = parseFloat(Map.markers[type][i]["lat"]);
			var lon = parseFloat(Map.markers[type][i]["lon"]);
			if (lat && lon) {
				var point = new GLatLng(lat,lon);
				marker = this.createMarker(point, Map.markers[type][i]["html"]);
				Map.markerList[i] = marker;
			//Assemble new marker for sidebar.
			Map.addSideBarItem(Map.markers[type][i]["name"], i, Map.markers[type][i]["sidebar_html"]);
			bounds.extend(marker.getPoint());
			}
		}
		this.GMarkerManager.addMarkers(Map.markerList, 5);
		this.GMarkerManager.refresh();
//alert(Map.markerList.length);
if (Map.markerList.length == 1) {
   Map.GM.setZoom(17);
 } else {
   Map.GM.setZoom(Map.GM.getBoundsZoomLevel(bounds));
 }

//		Map.GM.setZoom(Map.GM.getBoundsZoomLevel(bounds));
	}
}

Map.renderMap = function(result) {
	if (result.responseText.length) { 
		document.getElementById(Map.targetDiv).innerHTML = result.responseText;
	}
}

Map.renderSetCenter = function(result) {
	if (result.responseText.length) {
		var latLon = result.responseText.split(',');
		var lon = latLon[0];
		var lat = latLon[1];
		Map.GM.setCenter(new GLatLng(lat, lon), 13);
	}
}

Map.renderSetMarker = function(result) {
	var list = result.responseText.split('<bubble>');
	var latLon = list[0].split(',');
	var lon = latLon[0];
	var lat = latLon[1];
	var html = list[1];
	var marker = new GMarker(new GLatLng(lat,lon));
	Map.GM.setCenter(new GLatLng(lat,lon),15);
	Map.GM.addOverlay(marker);
	if (html) {
		GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});
		marker.openInfoWindowHtml(html);
	}
}

Map.renderSideBarItems = function(divID) {
	var html = '';
	for(i = 0; i < Map.sideBarItems.length; i++) {
		if (Map.sideBarItems[i]) {
			html += Map.sideBarItems[i];
		}
	}
	document.getElementById(divID).innerHTML = html;
}

Map.setCenter = function(val) {
	var urlParameters = "loc=" + encodeURI(val);
	var ajax  = new Ajax.Request(
		 this.url,
		 {
				method:     "post",
				parameters: urlParameters,
				onSuccess:  Map.renderSetCenter
		 } 
	);
}

Map.setMarker = function(val) {
	var urlParameters = "loc=" + encodeURI(val);
	var ajax  = new Ajax.Request(
		 this.url,
		 {
				method:     "post",
				parameters: urlParameters,
				onSuccess:  Map.renderSetMarker
		 } 
	);
}

Map.setMarkerList = function(area, type) {
	if (!type) {
		type = "RLS";
	}
	var urlParameters = "mode=list&loc=" + encodeURI(area) + "&propType=" + type;
	var ajax  = new Ajax.Request(
		 this.url,
		 {
				method:     "post",
				parameters: urlParameters,
				onSuccess:  Map.renderSetMarkerList
		 } 
	);
}

Map.setTargetDiv = function (div) {
	this.targetDiv = div;
}
