// Create a base icon for all of our markers that specifies the shadow, icon
// dimensions, etc.

function isNumeric(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++) { 
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}

var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

//<![CDATA[

var map = new GMap(document.getElementById("map"));
map.addControl(new GSmallZoomControl());
if(ip_lat && ip_lon) {
	map.centerAndZoom(new GPoint(ip_lon,ip_lat), 10);
} else {
	map.centerAndZoom(new GPoint(-96,40), 15);
}

//]]>

// Creates a marker whose info window displays the letter corresponding to
// the given index
function createMarker(point, index) {
	// Create a lettered icon for this point using our icon class from above
	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	var icon = new GIcon(baseIcon);
	icon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
	var marker = new GMarker(point, icon);
	
	// Show this markers index in the info window when it is clicked
	var html = "House";
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});
	
	return marker;
}
//var marker= createMarker(new GPoint(-93,42), 1);
//map.addOverlay(marker);

//GET MARKERS ********************************

// Create custom icons for listing clusters
createBaseIcon = function( ) {
  var icon = new GIcon( );
  //icon.shadow = "images/shadow50.png";
  icon.iconSize = new GSize( 12, 20 );
 // icon.shadowSize = new GSize( 22, 20 );
  icon.iconAnchor = new GPoint( 6, 20 );
  icon.infoWindowAnchor = new GPoint( 5, 1 );
  return icon;
};

var base_icon = createBaseIcon();
//var base_icon = new GIcon(G_DEFAULT_ICON);

var marker_one = new GIcon(base_icon);
marker_one.image = "images/marker_one.png";
	
var marker_few = new GIcon(base_icon); 
marker_few.image = "images/marker_one.png";
  marker_few.iconSize = new GSize( 16, 27 );
 // marker_few.shadowSize = new GSize( 30, 27 );
  marker_few.iconAnchor = new GPoint( 8, 27 );

var marker_many = new GIcon(base_icon);
marker_many.image = "images/marker_one.png";
  marker_many.iconSize = new GSize( 20, 34 );
 // marker_many.shadowSize = new GSize( 37, 34 );
  marker_many.iconAnchor = new GPoint( 10, 34 );	

function getMarkersZoom() {
	getMarkers();
}

function getMarkersMove() {
	getMarkers(true);
}

function createMarker(point, icon, id) {
	var marker = new GMarker(point, icon);
	//var html = getMarkerInfoHtml(id);
	marker.id = id;
	if (isNumeric(id)) {
		GEvent.addListener(marker, 'click', function() {
			var getMarkerInfoQueryString = "id="+marker.id;
			//alert(getMarkerInfoQueryString);
			var request = GXmlHttp.create();
			request.open("GET", "getmarkerinfo.php?"+getMarkerInfoQueryString, true);
			request.onreadystatechange = function() {
			  if (request.readyState == 4) {
				//alert(request.responseText);
				var xmlDoc = request.responseXML;
				//<user ... />
				var listings = xmlDoc.documentElement.getElementsByTagName("listing");
				var listing = listings[0];
				var listingID = listing.getAttribute("id");
				//var listingSID = listing.getAttribute("sid");
				var listingPrice = listing.getAttribute("price");
				var listingTitle = listing.getAttribute("title");
				var listingAddress = listing.getAttribute("address");
				var listingCity = listing.getAttribute("city");
				var listingState = listing.getAttribute("state");
				var listingZip = listing.getAttribute("zip");
				if (listing.getAttribute("photo") == "") {
					var listingPhoto = ""
				} else {
					var listingPhoto = "<img align=left vspace=4 src='" + listing.getAttribute("photo") + "'>";
				}
				infoHtml = "<div style='height: 60px; width: 200px; font-size: 75%'>" + listingPhoto + "<b>" + listingTitle + "</b><br>" + listingAddress + "<br>" + listingCity + ", " + listingState + " " + listingZip + "<br><b>" + listingPrice + " <a href='viewlisting.php?listing_id=" + listingID + "'>View listing</a></div>";
				//return(infoHtml);
				marker.openInfoWindowHtml(infoHtml);
			  }
			}
			request.send(null);
		});
	} else {
		GEvent.addListener(marker, 'click', function() {
			infoHtml = "<div style='height: 60px; width: 200px; font-size: 75%'>(multiple listings)</div>";
			marker.openInfoWindowHtml(infoHtml);
		});
	}
	return marker;
}

function getMarkers(difference) {
	//set up variables for getmarkers request
	var mapBounds = map.getBoundsLatLng();
	var min_lat = mapBounds.minY;
	var max_lat = mapBounds.maxY;
	var min_lng = mapBounds.minX;
	var max_lng = mapBounds.maxX;
	var map_pix_w = document.getElementById("map").offsetWidth;
	var map_pix_h = document.getElementById("map").offsetHeight;
	var max_markers = 50;
	var min_marker_sep = 10;
	//if(map.getzoom()<11){var min_marker_sep = "0";}
	
	if(difference) {
		//clear offscreen overlays
		for(var i = map.overlays.length; i >= 0; i--) {
			if(map.overlays[i] instanceof GMarker) {
				//alert(i);
				//alert(map.overlays[i].point.x);
				if ((map.overlays[i].point.x > max_lng) || (map.overlays[i].point.x < min_lng) || (map.overlays[i].point.y > max_lat) || (map.overlays[i].point.y < min_lat)) {
					//alert("removed overlay " + i);
					map.removeOverlay(map.overlays[i]);
				}
			}
		}
	} else {
		map.clearOverlays();
	}
	
	var getMarkersQueryString = "min_lat="+min_lat+"&max_lat="+max_lat+"&min_lng="+min_lng+"&max_lng="+max_lng+"&map_pix_w="+map_pix_w+"&map_pix_h="+map_pix_h+"&max_markers="+max_markers+"&min_marker_sep="+min_marker_sep+"&pan="+difference;
	//alert(getMarkersQueryString);
	var request = GXmlHttp.create();
	request.open("GET", "getmarkers.php?"+getMarkersQueryString, true);
	request.onreadystatechange = function() {
	  if (request.readyState == 4) {
		var xmlDoc = request.responseXML;
		//markers
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) {
			lng = parseFloat(markers[i].getAttribute("lng"));
			lat = parseFloat(markers[i].getAttribute("lat"));
			if(lat == 0 || lng == 0 || lat == 1 || lng == 1) continue;
			var point = new GPoint(lng,lat);
			var weight = markers[i].getAttribute("weight");
			if (weight>7) {
				icon = marker_many;
			} else if (weight>1) {
				icon = marker_few;
			} else {
				icon = marker_one;
			}
			var id = markers[i].getAttribute("id");
			var marker = createMarker(point, icon, id);
			map.addOverlay(marker);
		}
		//marker summary and additional information
		/*
		var population = xmlDoc.documentElement.getAttribute("population");
		var statistics = xmlDoc.documentElement.getElementsByTagName("statistics");
		var markertime = statistics[0].getAttribute("time");
		var markercount = statistics[0].getAttribute("count");
		document.getElementById("population").innerHTML = "Displaying " + population + " users (" + markercount + " new markers) retrieved in " + markertime + " seconds.";
		*/
		
	  }
	}
	request.send(null);
}

getMarkersZoom();

GEvent.addListener(map, "zoom", getMarkersZoom);
GEvent.addListener(map, "moveend", getMarkersMove);