var current_region;
var current_county;
var overlay_lat;
var path = "/uploads/";
var icon;
var clickListener;

var regions = ["High-Plains", "North-West-Texas", "North-Central-Texas", "East-Texas", "Central-Texas", "Gulf-Coast", "South-Texas", "West-Texas"];

var region_ids = [12, 9, 8, 10, 7, 11, 13, 6];

// Red, Green, Blue, Yellow, Orange, Brown, Purple, Dark Blue
var colors = ["#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF6600", "#663300", "#660099", "#000066"]

function load() {
	if (GBrowserIsCompatible()) {
  	map = new GMap2(document.getElementById("region_search"));
		map.addControl(new GLargeMapControl());
  	map.addControl(new GMapTypeControl());
		map.addMapType(G_PHYSICAL_MAP);
  	map.setCenter(new GLatLng(31.40782,-99.228516), 6);
		//map.enableScrollWheelZoom();
		
		/*icon = new GIcon();
		icon.image = 'http://uwmike.com/maps/manhattan/img/red-marker.png';
		icon.iconSize = new GSize(32, 32);
		icon.iconAnchor = new GPoint(16, 16);
		icon.infoWindowAnchor = new GPoint(25, 7);*/
	
		clickListener = GEvent.bind(map, "click", this, function(overlay, latlng, overlaylatlng) {
			if(overlay && overlay.region != current_region && overlaylatlng.lat() != overlay_lat) {
				loadCountiesForRegion(overlay.region_id);
				current_region = overlay.region;
			}
		});
		
		for (var i=0; i< regions.length; i++) {
			loadRegionOverlay(regions[i], i);
		}
	
	}
}

function loadRegionOverlay(region, count) {
	region = region.replace(' ','-')
	
	var request = GXmlHttp.create();
	request.open("GET", path + "regions/" + region + ".xml", true);
	request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var bounds = new GLatLngBounds();
			var xmlDoc = request.responseXML;
			try {
					var polylines = xmlDoc.documentElement.getElementsByTagName("p") ;
				    var points = [] ;
				    for (var i = 0; i < polylines.length; i++) {
						   var latlng = new GLatLng(parseFloat(polylines[i].getAttribute("lat")),parseFloat(polylines[i].getAttribute("lng")));
				       points.push(latlng) ;
						   bounds.extend(latlng);
				    }
				
					var polygon = new GPolygon(points, colors[count], 1, 1, colors[count], 0.3);
					polygon.region = region;
					polygon.region_id = region_ids[count];
				
					map.addOverlay(polygon);
					
					/*	opts = {
							"icon": icon,
							//"clickable": false,
							//"draggable": false,
							"labelText": region,
							"labelOffset": new GSize(-16, -16)
						};

						var marker = new LabeledMarker(latlng, opts);
						map.addOverlay(marker);*/
					
			} catch (e) {
				alert("Error: " + e);
			}
		} 
	}
	request.send("");
}

function loadCountiesForRegion(id) {
	var request = GXmlHttp.create();
	request.open("GET", "/ajax/region-counties/" + id, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
	 		var xmlDoc = request.responseXML;
			var county_names = xmlDoc.documentElement.getElementsByTagName("name");
			var property_counts = xmlDoc.documentElement.getElementsByTagName("property-count");
			var counties = [];
			var counts = [];
			for (var i=0; i < county_names.length; i++) {
				counties.push(county_names[i].firstChild.nodeValue);
				counts.push(property_counts[i].firstChild.nodeValue);
			}
			
			if(counties.length == 0) {
				alert("There are currently no counties in this region. Check back soon as new properties are being added daily.");
				return;
			}
			
			var lat = xmlDoc.documentElement.getElementsByTagName("latitude")[0].firstChild.nodeValue;
			var lng = xmlDoc.documentElement.getElementsByTagName("longitude")[0].firstChild.nodeValue;
			
			map.clearOverlays();
			GEvent.removeListener(clickListener);
			
			displayCounties(counties, counts, new GLatLng(lat, lng));
		}
	}
	request.send("");
}

function displayCounties(counties, property_counts, point) {
	map.setCenter(point, 7);
	
	// Allow the user to go back to all regions
	document.getElementById("region_header").innerHTML = '<a href="javascript:reset();" class="big_brown_link">&laquo; back to all regions</a>';
	
	// Listen for a county click
	clickListener = GEvent.bind(map, "click", this, function(overlay, latlng, overlaylatlng) {
		if(overlay && overlay.name != current_county && overlay.name != undefined && overlaylatlng.lat() != overlay_lat) {
			map.openInfoWindowHtml(overlaylatlng, "<strong>" + current_region.replace(/-/g, ' ') + " Region</strong><br />" + overlay.name + " County (" + overlay.property_count + " properties) <br /><br /><a href='/property/county/" + overlay.name + "'>View properties</a>");
			current_county = overlay.name;
			overlay_lat = overlaylatlng.lat();
		}
	});
	
	// Display the region overlay too
	// Find the proper color in the array for the region
	var index;
	for (var i=0; i < regions.length; i++) {
		if(regions[i] == current_region) {
			index = i;
			break;
		}
	}
	loadRegionOverlay(current_region, index);
	
	for(var i=0; i < counties.length; i++) {
		loadCountyOverlay(counties[i], property_counts[i]);
	}
}

function loadCountyOverlay(county, property_count) {
	county = county.replace(' ','-')
	
	var request = GXmlHttp.create();
	request.open("GET", path + "counties_simplified/" + county + ".xml", true);
	request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var bounds = new GLatLngBounds();
			var xmlDoc = request.responseXML;
			try {
				var info = xmlDoc.documentElement.getElementsByTagName("info");
				
					var polylines = xmlDoc.documentElement.getElementsByTagName("p");
				    var points = [] ;
				    for (var i = 0; i < polylines.length; i++) {
						   var latlng = new GLatLng(parseFloat(polylines[i].getAttribute("lat")),parseFloat(polylines[i].getAttribute("lng")));
				       points.push(latlng) ;
						   bounds.extend(latlng);
				    }
				
					var polygon = new GPolygon(points,"#006600", 1, 1, '#00FF00', 0.3);
					polygon.name = county.replace(/-/g, ' ');
					polygon.property_count = property_count;
				
					map.addOverlay(polygon) ;
			} catch (e) {
				alert("Error: " + e);
			}
			
		} 
		
		
	}
	request.send("");
}

function reset() {
	map.clearOverlays();
	current_region = "";
	current_county = "";
	document.getElementById("region_header").innerHTML = "";
	load();
}
