var map = null;

var overviewControlExists = false;

var zoomControlExists = false;

var currentlyDraggable = false;

var menuSelection = false;

var markers = [];



var zoomControl = null;

var overviewControl = null;





function initializeApplication() {

	initializeData();

	createMap();

}



function getCenter() {

	var p = map.getCenter();

	var z = map.getZoom();

	alert(p.lat() + ":" + p.lng() + ":" + z);

}



function createMap() {

	if (GBrowserIsCompatible()) {		

		map = new google.maps.Map2(document.getElementById("mapContainer"));

		map.enableContinuousZoom();

		zoomControl = new GSmallZoomControl();

		map.addControl(zoomControl);		

		GEvent.addListener(map, "zoomend", onZoomOut);		

		renderCurrentSpace();

	}

}



function renderCurrentSpace() {	

	map.clearOverlays();

	var latLng = new GLatLng(currentSpace.latitude, currentSpace.longitude);

	map.setCenter(latLng, currentSpace.zoom);

	drawMarkers();

	if(currentSpace.draggable) {

		enableDragging();

	} else {

		disableDragging();		

	}

}



function clearMarkers() {

	if(markers.length > 0) {

		for(var i=0; i<markers.length; i++){

			map.removeOverlay(markers[i]);

		}

		markers = [];

	}

}



function disableDragging() {

	map.disableDragging();				

	map.removeControl(overviewControl);	

	overviewControl = null;

	overviewControlExists = false;

}



function enableDragging() {

	map.enableDragging();

	if(!overviewControlExists) {

		overviewControl = new GOverviewMapControl();		

		map.addControl(overviewControl);		

		overviewControlExists = true;

	}

}





function onZoomOut(oldLevel, newLevel) {	

	if(newLevel < parseInt(hyderabad.zoom)) {

		disableDragging();

	} else {

		enableDragging();

	}	

}



function drawMarkers() {

	clearMarkers();

	if((currentSpace.type === "CITY" || currentSpace.type === "PROJECT") && currentSpace.renderProjectMarkers === true) {

		var peerArray = [];

		currentSpace.getCity().getAllProjects(peerArray);

		for(var i=0; i<peerArray.length; i++){

			var project = peerArray[i];

			var projectLocationPoint = new GLatLng(project.latitude, project.longitude);

			var projectMarker = new GMarker(projectLocationPoint, aparnaIcon);

			projectMarker.loc = project;

			GEvent.addListener(projectMarker, "click", function() {

				if(project.children != null && project.children.length != 0) {

					navigate(this.loc);

				} else {				

					showProjectInfo(this, this.loc);

				}			

			});

			

			map.addOverlay(projectMarker);

			markers.push(projectMarker);

			

			if(menuSelection === true && currentSpace.name === project.name) {

				showProjectInfo(projectMarker, project);

				menuSelection = false;

			}			

		}		

	} else {

		if(currentSpace.children != null && currentSpace.children.length > 0) {

			for(var i=0; i<currentSpace.children.length; i++){

				var child = currentSpace.children[i];

				var childLocationPoint = new GLatLng(child.latitude, child.longitude);

				var childMarker = new GMarker(childLocationPoint, aparnaIcon);

				childMarker.loc = child;

				GEvent.addListener(childMarker, "click", function() {				

					if(child.children != null && child.children.length != 0) {

						navigate(this.loc);

					} else {				

						showProjectInfo(this, this.loc);

					}			

				});

				

				map.addOverlay(childMarker);

				markers.push(childMarker);

			}

		}

	}		

}



function renderMarkers() {	

	var spaces = [];

	asia.getAllProjects(spaces);

	for(var i=0; i<spaces.length; i++){

		var space = spaces[i];

		var point = new GLatLng(space.latitude, space.longitude);

		var marker = new GMarker(point, aparnaIcon);

		marker.loc = space;

		GEvent.addListener(marker, "click", function() {

			if(space.type === "PROJECT") {

				showProjectInfo(this, this.loc);

			} else {

				navigate(this.loc);

			}

		});

		map.addOverlay(marker);

	}

}

