var stateCodes = {
		'AL' : 'Alabama',
		'AZ' : 'Arizona',
		'AR' : 'Arkansas',
		'CA' : 'California',
		'CO' : 'Colorado',
		'CT' : 'Connecticut',
		'DE' : 'Delaware',
		'FL' : 'Florida',
		'GA' : 'Georgia',
		'ID' : 'Idaho',
		'IL' : 'Illinois',
		'IN' : 'Indiana',
		'IA' : 'Iowa',
		'KS' : 'Kansas',
		'KY' : 'Kentucky',
		'LA' : 'Louisiana',
		'ME' : 'Maine',
		'MD' : 'Maryland',
		'MA' : 'Massachusetts',
		'MI' : 'Michigan',
		'MN' : 'Minnesota',
		'MS' : 'Mississippi',
		'MO' : 'Missouri',
		'MT' : 'Montana',
		'NE' : 'Nebraska',
		'NV' : 'Nevada',
		'NH' : 'New Hampshire',
		'NJ' : 'New Jersey',
		'NM' : 'New Mexico',
		'NY' : 'New York',
		'NC' : 'North Carolina',
		'ND' : 'North Dakota',
		'OH' : 'Ohio',
		'OK' : 'Oklahoma',
		'OR' : 'Oregon',
		'PA' : 'Pennsylvania',
		'RI' : 'Rhode Island',
		'SC' : 'South Carolina',
		'SD' : 'South Dakota',
		'TN' : 'Tennessee',
		'TX' : 'Texas',
		'UT' : 'Utah',
		'VT' : 'Vermont',
		'VA' : 'Virginia',
		'WA' : 'Washington',
		'WV' : 'West Virginia',
		'WI' : 'Wisconsin',
		'WY' : 'Wyoming'
		};

function dState(state,year){
   		mode  = 'state';
   		curyear = year;
   		dateState(state);
   		drawMap(state,year);
}

function createState(location, year, points, levels, opacity, count)
{
	var color = '#ff0000';
	if(opacity == 0)
	{
	    opacity = 0.25;
		color = '#ffffff';
	}
	else if (opacity < 0.25)
	{
		opacity = 0.25;
	}

	var polyline = [{ color: "#000000", weight: 1, opacity: 0.75, points: points, levels: levels, zoomFactor: 2, numLevels: 18}];
	var polygon = new GPolygon.fromEncoded({ polylines: polyline, fill: true, color: color, opacity: opacity, outline: true });

	if(count > 0)
	{
		if (!document.getElementById("dl_"+location.replace(' ', '_')))
		{
			$("#directory_canvas").append("<div class='dlarea' id='dl_"+location.replace(' ', '_')+"'><a href='#' onclick=\"dState('" + location + "','"+ year +"')\")'>" + location + "</a></div>");
		}
		GEvent.addListener(polygon, "click", function(latlng) {
			 state = location;
			 mode  = 'state';
			 curyear = year;
			 dateState(state);
			 drawMap(state,year);
		});
	}
	return polygon;
}

function drawNational(year){
	dateActivateAll();
	map.clearOverlays();
	map.setCenter(new GLatLng(40, -99), 4);
    var dataurl = "/location/xml_directory_national/" + year + "/";
    $("#directory_canvas").html("");
    var request = google.maps.XmlHttp.create();
    request.open("GET", dataurl, true);
    request.onreadystatechange = function() {
	    if (request.readyState == 4) {
	        var xmlDoc = google.maps.Xml.parse(request.responseText);
			var lines = xmlDoc.documentElement.getElementsByTagName("line");
			for (var a = 0; a < lines.length; a++)
			{
				var polygon = createState(lines[a].getAttribute("location"), year, lines[a].getAttribute("points"), lines[a].getAttribute("levels"), lines[a].getAttribute("opacity"), lines[a].getAttribute("count"));
				map.addOverlay(polygon);
			}
        }
    }
    request.send(null);
    $("#directory_canvas").append('<div style="clear:both;"></div>');
    mode = 'national';
}

function importanceOrder (marker,b) { return google.maps.Overlay.getZIndex(marker.getPoint().lat()) + marker.importance*1000000; }
function createLinkMarker(point,link,markerIcon,label,pid,importance) {
    var marker = new google.maps.Marker(point,{zIndexProcess:importanceOrder,icon:markerIcon});
    marker.importance = importance;
    marker.pid = pid;
    marker.tooltip = '<div id="gmap-tooltip-map">'+
                        '<div id="gmap-tt-float">'+
                          '<div class="gmap-tt-left"></div>'+
                        '</div>'+
                        '<div id="gmap-tt-float">'+
                          '<div class="gmap-tt-middle">'+
                            '<div class="gmap-tt-pointer"></div>'+
                            '<div class="gmap-tt-text"><nobr>'+label+'</nobr></div>'+
                          '</div>'+
                        '</div>'+
                        '<div id="gmap-tt-float">'+
                          '<div class="gmap-tt-right"></div>'+
                        '</div>'+
                        '<div class="gmap-clear-left"></div>'+
                     '</div>';
    map.addOverlay(marker);
    google.maps.Event.addListener(marker, "click", function() { location.href = link; });
    google.maps.Event.addListener(marker,"mouseover", function() { showTooltip(marker); });
	google.maps.Event.addListener(marker,"mouseout", function() { tooltip.style.visibility="hidden"; });
    return marker;
  }

function showTooltip(marker) {
    tooltip.innerHTML = marker.tooltip;
    var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.fromDivPixelToLatLng(new GPoint(0,0),true),map.getZoom());
    var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
    var anchor=marker.getIcon().iconAnchor;
    var width=marker.getIcon().iconSize.width;
    var height=tooltip.clientHeight;
    var pos = new google.maps.ControlPosition(G_ANCHOR_TOP_LEFT, new GSize(offset.x - point.x - 21, offset.y - point.y + 15));
    pos.apply(tooltip);
    tooltip.style.visibility="visible";
}

function dateSelect(year){
	curyear = year;
	if(initmap == '1'){ loadMap_map_canvas(); initmap = '0';}
	$('#dateselect li').css('background-color', '#F0F6F9');
	$('#ds'+year).css('background-color', '#000000');
	if(mode == 'national'){drawNational(year);}
	if(mode == 'state'){drawMap(state,year);}
}

function drawMap(state_local,year){
	  state = state_local; // assign passed value to global variable
	  curyear = year;
	  map.clearOverlays();
      map.getPane(G_MAP_FLOAT_PANE).appendChild(tooltip);
      tooltip.style.visibility="hidden";
      var hoodIcon = new google.maps.Icon();
      hoodIcon.image = "http://static.csimg.com/img/gmap/pin-neighborhood.png";
      hoodIcon.iconSize = new google.maps.Size(33, 30)
      hoodIcon.iconAnchor = new google.maps.Point(10, 27);
      hoodIcon.infoWindowAnchor = new google.maps.Point(10, 1);
      hoodIcon.imageMap = [10,1,20,10,10,27,1,10];
	  var dataurl = "/location/xml_map_county/" + state + "/" + year + "/";
      var request = google.maps.XmlHttp.create();
      request.open("GET", dataurl, true);
      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          var xmlDoc = google.maps.Xml.parse(request.responseText);
          map.setCenter(new GLatLng(37.50, -77.33), 9, G_PHYSICAL_MAP);
		  var bounds = new GLatLngBounds();
          var markers = xmlDoc.documentElement.getElementsByTagName("marker");
          counties  = [];
          fips 		= [];
          countiesd = [];
          for (var i = 0; i < markers.length; i++) {
	          var lat = parseFloat(markers[i].getAttribute("lat"));
	          var lng = parseFloat(markers[i].getAttribute("lng"));
	          var point = new google.maps.LatLng(lat,lng);
	          var count = markers[i].getAttribute("count");
	          if(count > 0){
				  var link = "/search/advanced/fips/?f=" + markers[i].getAttribute("link");
				  var label = markers[i].getAttribute("label");
				  if(countiesd[label] != 1){
				  	counties.push(label);
				  	countiesd[label] = 1;
				  }
				  fips[label] = link;
				  var marker = createLinkMarker(point,link,hoodIcon,label,1,1);
	          }
	          bounds.extend(point);
	      }
	      map.setZoom(map.getBoundsZoomLevel(bounds));
          map.setCenter(bounds.getCenter());
          updateDirectory(counties,fips);
          var lines = xmlDoc.documentElement.getElementsByTagName("line");
          for (var a = 0; a < lines.length; a++)
		  {
			var opacity = lines[a].getAttribute("opacity");
			var color = '#ff0000';
			if(opacity == 0)
			{
				opacity = 0.25;
				color = '#ffffff';
			}
			else if (opacity < 0.25)
			{
				opacity = 0.25;
			}

			var polyline = [{ color: "#000000", weight: 1, opacity: 0.75, points: lines[a].getAttribute("points"), levels: lines[a].getAttribute("levels"), zoomFactor: 2, numLevels: 18}];
			var polygon = new GPolygon.fromEncoded({ polylines: polyline, fill: true, color: color, opacity: opacity, outline: true });
			map.addOverlay(polygon);
          }
        }
      }
      request.send(null);
}

function updateDirectory(areas,fips){
	areas.sort();
	$("#directory_canvas").html("");
	for (var a = 0; a < areas.length; a++) {
		$("#directory_canvas").append("<div class='dlarea'><a href='" + fips[areas[a]]+ "'>" + areas[a] + "</a></div>");
	}
	 $("#directory_canvas").append('<div style="clear:both;"></div>');


}

function loadMap_map_canvas() {
    $('#map_canvas').css('background', '#000000');
    $('#directory').css('visibility', 'visible');
    if (google.maps.BrowserIsCompatible()) {
        map = new google.maps.Map2(document.getElementById("map_canvas"));
      	map.setCenter(new GLatLng(37.50, -77.33), 5, G_PHYSICAL_MAP);
    	map.addControl(new GSmallMapControl());
    } else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}

function toggleDirectory(){
      if ($("#directory_canvas").is(":hidden")) {
        $("#directory_canvas").slideDown("slow");
      } else {
        $("#directory_canvas").slideUp("slow");
      }
}

function dateActivateAll(){
    $('#dateselect li a').each(function(el) {
		var decade = jQuery(this).text();
		$('#dl'+decade).attr('onClick', "dateSelect('" + decade + "')");
		$('#dl'+decade).css('color', '#D28E5B');
    });
}

function dateState(state){
	$('#dateselect li a').css('color', '#B4B4B4');
	$('#dateselect li a').removeAttr('onClick');
	var dataurl = "/location/xml_datelist/" + state + "/";
    var request = google.maps.XmlHttp.create();
    request.open("GET", dataurl, true);
    request.onreadystatechange = function() {
    	if (request.readyState == 4) {
			var xmlDoc = google.maps.Xml.parse(request.responseText);
			var dates = xmlDoc.documentElement.getElementsByTagName("year");
			for (var i = 0; i < dates.length; i++) {
				var decade = GXml.value(dates[i]);
				$('#dl'+decade).attr('onClick', "dateSelect('" + decade + "')");
				$('#dl'+decade).css('color', '#D28E5B');
			}
		}
	}
	request.send(null);
}