var markersArray = {}
if(lat == null) {
var lat = 41.5;
var lng = -101.6;
zoomLevel = 3;
}
var myLatlng = new google.maps.LatLng(lat, lng);
var myOptions = {
	zoom: zoomLevel,
	center: myLatlng,
	mapTypeControl: true,
    mapTypeControlOptions: {
    	mapTypeIds: [google.maps.MapTypeId.TERRAIN, google.maps.MapTypeId.ROADMAP,google.maps.MapTypeId.SATELLITE,google.maps.MapTypeId.HYBRID,'osma']
    },
	mapTypeId: google.maps.MapTypeId.TERRAIN
}
var firstTileLoad = true;
var openIcon = new google.maps.MarkerImage('http://www.skimap.org/img/icons/gmapopen.png',new google.maps.Size(16, 16),new google.maps.Point(0,0),new google.maps.Point(8, 8));
var closedIcon = new google.maps.MarkerImage('http://www.skimap.org/img/icons/gmapclosed.png',new google.maps.Size(16, 16),new google.maps.Point(0,0),new google.maps.Point(8, 8));
var futureIcon = new google.maps.MarkerImage('http://www.skimap.org/img/icons/gmapfuture.png',new google.maps.Size(16, 16),new google.maps.Point(0,0),new google.maps.Point(8, 8));
var unknownIcon = new google.maps.MarkerImage('http://www.skimap.org/img/icons/gmapunknown.png',new google.maps.Size(16, 16),new google.maps.Point(0,0),new google.maps.Point(8, 8));

var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var osmarender = new google.maps.ImageMapType({
	getTileUrl: function(ll, z) {
		var X = ll.x % (1 << z);
		return "http://tah.openstreetmap.org/Tiles/tile/" + z + "/" + X + "/" + ll.y + ".png";
	},
	tileSize: new google.maps.Size(256, 256),
	isPng: true,
	maxZoom: 18,
	name: "Osmarender",
	alt: "Open Streetmap Osmarender"
});
map.mapTypes.set('osma', osmarender);

google.maps.event.addListener(map, 'bounds_changed', refindBounds);
google.maps.event.addListener(map, 'tilesloaded', function () {
	if(firstTileLoad) {
		firstTileLoad = null;
   		refindBounds();
	}
});

function refindBounds() {

	// clear markers that don't fall within bounds
	// figure out boundaries of a map and pass to ajax function
	maxLat = map.getBounds().getNorthEast().lat();
	maxLng = map.getBounds().getNorthEast().lng();
	minLat = map.getBounds().getSouthWest().lat();
	minLng = map.getBounds().getSouthWest().lng();
	centerLat = map.getCenter().lat();
	centerLng = map.getCenter().lng();
	responseCode = 1;
	urlStr = "/SkiAreas/gmap_lookup/"+maxLat+"/"+minLat+"/"+minLng+"/"+maxLng+"/"+centerLat+"/"+centerLng+"/"+regionID;
	new Ajax.Request(urlStr, {
		method:'get',
		onSuccess: function(transport){
			var json = transport.responseText.evalJSON();
			
			readJSON(json);
			
		}
	});
}

function readJSON(json) {
	//deleteOverlays();
	
	for(var i=0; i < json.length;i++) {
		skiArea = json[i];
		point = new google.maps.LatLng(parseFloat(skiArea["lat"]),parseFloat(skiArea["lng"]));
		html = skiArea["html"];
		id=skiArea["id"];
		if(!markersArray[id]) {
			status = parseInt(skiArea["operating_status"]);
			createMarker(point,html,status,id);
		}
	}
}

function createMarker(point, html,status,id) {
	var markerOptions = {};
	if(status == 1) {
		var markerIcon = openIcon;
	}
	if(status == 2) {
		var markerIcon = closedIcon;
	}
	if(status == 3) {
		var markerIcon = futureIcon;
	}
	if(status == 0) {
		var markerIcon = unknownIcon;
	}

  	var marker = new google.maps.Marker({
		position: point,
		map: map,
		icon: markerIcon
  	});
  	markersArray[id] = marker;
  	var infowindow = new google.maps.InfoWindow({
		content: html
	});
	google.maps.event.addListener(marker, 'click', function() {
		infowindow.open(map,marker);
	});
}
function deleteOverlays() {
	if (markersArray) {
		for (i in markersArray) {
			markersArray[i].setMap(null);
		}
		markersArray.length = 0;
	}
}
