/**************************************************/
/* GMap FUNCTIONS								  */
/**************************************************/

function setActiveMarker(new_marker) {
	active_marker = new_marker;
}


function showDefaultMap() {
	
	map.getInfoWindow().hide();
	
	map.clearOverlays();
	
	plotNeighborhoodCoords(map, null);
	
	map.centerAndZoom(new GPoint(-90.02952575683594, 29.954934549656144), 6);
}

function createMarkerHTML(html) {
	return "<div class=\"infoWindow\" style=\"white-space:nowrap;\">" + html + "</div>";
}

function createNeighborhoodMarker(point, icon, name, id, children) {
	
	var marker = new GMarker(point, icon);
	
	marker.html = "";
	
	marker.html += "<h1>" + name + "</h1>";
	
	if (children > 0) {
		
		GEvent.addListener(marker, 'click', function() {
				
				hideWelcome();
				initDetails();
			
				showNeighborhoodDiv();	
			
				setActiveParentNeighborhood(id, name); 
				
				map.centerAndZoom(point, 4);
				
				plotNeighborhoodCoords(map, id);
		});
	
		GEvent.addListener(marker, 'mouseover', function() {
			
			map.getInfoWindow().hide();
			
			var register_html = "";
			
			if (!active_id) {
				register_html = "<p><a href='/Login/'>Login</a> to add your home.</p>";
			}
			
			marker.openInfoWindowHtml(createMarkerHTML(marker.html + register_html));
			
			setActiveMarker(marker);
		});
		
	} else {
		
		GEvent.addListener(marker, 'click', function() {
		
				hideWelcome();
				initDetails();
			
				showNeighborhoodDiv();
			
				setActiveNeighborhood(id, name);
				
				showNeighborhoodControls();
				
				map.centerAndZoom(point, 3);
								
				marker.openInfoWindowHtml(createMarkerHTML(marker.html + register_html));
		});
		
		GEvent.addListener(marker, 'mouseover', function() {
		
			map.getInfoWindow().hide();
			
			var register_html = "";
			
			if (!active_id) {
				register_html = "<p><a href='/Login/'>Login</a> to add your home.</p>";
			}
			
			marker.openInfoWindowHtml(createMarkerHTML(marker.html + register_html));
			
			setActiveMarker(marker);
		});
		
	}
	
	/*GEvent.addListener(marker, 'mouseout', function() {
				
		map.getInfoWindow().hide();
		
		setActiveMarker();
	});*/
	
	return marker;	
}

function createHomeMarker(point, icon, id, address) {
	
	var marker = new GMarker(point, icon);
	marker.html = "";
	
	marker.html += "<h1>" + address + "</h1>";
	
	GEvent.addListener(marker, 'click', function() {
		
		hideWelcome();
		initDetails();
		
		if (isActiveAdd()) {
			if (confirmAddClose()) {
				//marker.openInfoWindowHtml(createMarkerHTML(marker.html));
			}
		} else {
			//marker.openInfoWindowHtml(createMarkerHTML(marker.html));
		}

		if(id != null) {
			setAddressWithId(id);
		}
	});
	
	return marker;
}

function plotNeighborhoodCoords(map, parent){
		
		if (parent) {
			var urlstr="getNeighborhoodCoords.php?parent="+parent;
		} else {
			var urlstr="getNeighborhoodCoords.php";
		}
		
	    var request = GXmlHttp.create();
	    var neighborhood_points = [];
	    request.open('GET', urlstr , true);	// request XML from PHP with AJAX call
	    request.onreadystatechange = function () {
			if (request.readyState == 4) {
				
				var xmlDoc = request.responseXML;
				neighborhoods = xmlDoc.documentElement.getElementsByTagName("neighborhood");
				markers = [];

				if (neighborhoods.length){

					map.clearOverlays();

					for (var i = 0; i < neighborhoods.length; i++) { // cycle thru locations
						
						// BUILD BOUNDRY LINE POLYLINE
						var points = getGPointsFromCoords(neighborhoods[i].getAttribute("coordinates"));

						var pline = new GPolyline(points);
						
						map.addOverlay(pline);
						/**/
						// BUILD AND DISPLAY CENTER ICON
						
						var center_coords = neighborhoods[i].getAttribute("center");
						
						center_coords = center_coords.replace("(", "").replace(")", "").replace(" ", "");
						
						xy_center = center_coords.split(',');
						
						var point = new GPoint(xy_center[0], xy_center[1]);
						
						var marker = createNeighborhoodMarker(point, neighborhoodIcon, neighborhoods[i].getAttribute("name"), neighborhoods[i].getAttribute("id"), neighborhoods[i].getAttribute("children"));
						
						map.addOverlay(marker);
					}
					
				}
				
				deallocIndicator();
			}
		}
		
		allocIndicator();
		request.send(null);
}

function getGPointsFromCoords(coords_str) {
	
	rExpLeftP = /\(/g;
	rExpRightP = /\)/g;
	
	coords_str = coords_str.replace(rExpLeftP, "").replace(rExpRightP, "").replace(/ /g, "");
	
	var points = [];
	var coords = [];
	
	coords = coords_str.split(';');

	for (i in coords) {
		
		var x, y;
		var xy_coords = new Array();

		xy_coords = coords[i].split(',');

		if (xy_coords[0].substring(0,0) == "-") {
			x = 0 - parseFloat(xy_coords[0].replace("-", ""));
		} else {
			x = parseFloat(xy_coords[0]);					
		}
		
		if (xy_coords[1].substring(0,0) == "-") {
			y = 0 - parseFloat(xy_coords[1].replace("-", ""));
		} else {
			y = parseFloat(xy_coords[1]);					
		}
		
		points.push(new GPoint(x, y));
	}
	
	return points;
}

function replotPoints() {
	
	clearVisibleMarkers();
	
	// DETERMINE BOUNDARIES + 1/2 OF MAPS
	var map_bounds = map.getBoundsLatLng();
	
	//alert(map_bounds);
	
	lng_w = map_bounds.maxX - map_bounds.minX;
	lat_w = map_bounds.maxY - map_bounds.minY;
	
	//alert(lng_w + ", " + lat_w);
	
	lng_max = map_bounds.maxX + lng_w;
	
	lng_min = map_bounds.minX - lng_w;
	
	lat_max = map_bounds.maxY + lat_w;
	
	lat_min = map_bounds.minY - lat_w;
	
	//alert("(" + lng_max + ", " + lat_max + "), (" + lng_min + ", " + lat_min + ")");
	
	// GET ALL COORDS FOR THE BOUNDARY
	
	var urlstr="getPoints.php?lng_max=" + lng_max + "&lat_max=" + lat_max + "&lng_min=" + lng_min + "&lat_min=" + lat_min;
	//alert(urlstr);
		
	var request = GXmlHttp.create();
    
	//alert(urlstr);
    
    request.open('GET', urlstr , true);	// request XML from PHP with AJAX call

    request.onreadystatechange = function () {
		if (request.readyState == 4) {
			// PLOT POINTS IN BOUNDARY
			var xmlDoc = request.responseXML;

			var points = xmlDoc.documentElement.getElementsByTagName("point");

			if (points.length){
				// add point to screen
				for (var i = 0; i < points.length; i++) { // cycle thru locations
						
					var gpoint = new GPoint(points[i].getAttribute("lng"), points[i].getAttribute("lat"));
					
					var returning = points[i].getAttribute("survey_returning");
						
					var houseIcon;
									
					if (returning == "1") {
						houseIcon = greenHouseIcon;
					} else if (returning == "2") {
						houseIcon = redHouseIcon;
					} else {
						houseIcon = orangeHouseIcon;
					}
					
					var marker = createHomeMarker(gpoint, houseIcon, points[i].getAttribute("id"), points[i].getAttribute("name"));
					
					visible_markers[visible_markers.length] = marker;
					
					map.addOverlay(marker);
					
					//if (active_point = points[i].getAttribute("id")) {
					//	marker.openInfoWindowHtml(createMarkerHTML(marker.html));
					//}
					
				}
			}
			
			deallocIndicator();
		}
    }
    
	allocIndicator();
	
	request.send(null);
	
	
}

function clearVisibleMarkers() {
	for(var i = 0; i < visible_markers.length; i++) {
		map.removeOverlay(visible_markers[i]);
	}
	
	visible_markers = Array();
}

function setHalfScreen() {
	/*var map_bounds = map.getBoundsLatLng();
		
	lng_w = map_bounds.maxX - map_bounds.minX;
	lat_w = map_bounds.maxY - map_bounds.minY;
	
	half_screen_lng = lng_w / 2;
	half_screen_lat = lat_w / 2;*/
}

function movedHalfScreen(new_center) {
	
	if (Math.abs(new_center.x - move_start.x) > half_screen_lng) {
		// left-right more than a half screen
		return true;
	}
	
	if (Math.abs(new_center.y - move_start.y) > half_screen_lat) {
		// up-down more than a half screen
		return true;
	}
}

function setMoveStart() {
	var center = map.getCenterLatLng();
	
	move_start = center;
	
}
