
// CONSTANTS //
var PENOBSCOT_BAY_CENTER = new GLatLng(44.314, -68.89) ;
var WIDE_ZOOM_LEVEL = 11 ;
var CLOSE_ZOOM_LEVEL = 16 ;

// GLOBALS //
var marker = new Array() ; // An array of GMarker objects

function isInt(x) { // determine whether x is an integer
   var y=parseInt(x);
   if (isNaN(y)) return false;
   return x==y && x.toString()==y.toString();
}

function initialize() { // initialize the map
	if (GBrowserIsCompatible()) {
		var map = new GMap2(document.getElementById("map_canvas")) ;
		map.addControl(new GSmallMapControl()) ;
		map.setMapType(G_HYBRID_MAP) ;
	}
}

function plot(trap) { // position the map and plot traps on it
	if (trap != 'all' && trap != 'available') {
		 trap *= 1 ; // we are showing the location of just one trap
	}						// make sure it is an integer
	var traps = new Array() ;
						// an array of data about the traps
	traps[1] = {"lat":"44.3154","lon":"-68.9329","desc":"Flat Island","caught":0,"owner":null} ;	traps[2] = {"lat":"44.3165","lon":"-68.9344","desc":"Flat Island","caught":0,"owner":null} ;	traps[3] = {"lat":"44.3157","lon":"-68.9318","desc":"Flat Island","caught":0,"owner":null} ;	traps[4] = {"lat":"44.3163","lon":"-68.9312","desc":"Flat Island","caught":0,"owner":null} ;	traps[5] = {"lat":"44.3145","lon":"-68.9314","desc":"Flat Island","caught":0,"owner":null} ;	traps[6] = {"lat":"44.3157","lon":"-68.9305","desc":"Flat Island","caught":0,"owner":null} ;	traps[7] = {"lat":"44.3189","lon":"-68.9326","desc":"Flat Island","caught":0,"owner":null} ;	traps[8] = {"lat":"44.3168","lon":"-68.9343","desc":"Flat Island","caught":0,"owner":null} ;	traps[9] = {"lat":"44.3178","lon":"-68.9308","desc":"Flat Island","caught":0,"owner":null} ;	traps[10] = {"lat":"44.3189","lon":"-68.9331","desc":"Flat Island","caught":0,"owner":null} ;	traps[11] = {"lat":"44.3259","lon":"-68.9286","desc":"Seal Island","caught":0,"owner":null} ;	traps[12] = {"lat":"44.3249","lon":"-68.9284","desc":"Seal Island","caught":0,"owner":null} ;	traps[13] = {"lat":"44.3246","lon":"-68.9277","desc":"Seal Island","caught":0,"owner":null} ;	traps[14] = {"lat":"44.3251","lon":"-68.9266","desc":"Seal Island","caught":0,"owner":null} ;	traps[15] = {"lat":"44.3257","lon":"-68.9261","desc":"Seal Island","caught":0,"owner":null} ;	traps[16] = {"lat":"44.3296","lon":"-68.9251","desc":"Seal Island","caught":0,"owner":null} ;	traps[17] = {"lat":"44.3306","lon":"-68.9251","desc":"Seal Island","caught":0,"owner":null} ;	traps[18] = {"lat":"44.3317","lon":"-68.9244","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[19] = {"lat":"44.333","lon":"-68.9238","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[20] = {"lat":"44.3334","lon":"-68.9244","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[21] = {"lat":"44.3332","lon":"-68.9245","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[22] = {"lat":"44.333","lon":"-68.9243","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[23] = {"lat":"44.3324","lon":"-68.9247","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[24] = {"lat":"44.3319","lon":"-68.9256","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[25] = {"lat":"44.3307","lon":"-68.9261","desc":"Seal Ledge","caught":0,"owner":null} ;	traps[26] = {"lat":"44.3303","lon":"-68.9264","desc":"Seal Island","caught":0,"owner":null} ;	traps[27] = {"lat":"44.3298","lon":"-68.9272","desc":"Seal Island","caught":0,"owner":null} ;	traps[28] = {"lat":"44.3294","lon":"-68.9279","desc":"Seal Island","caught":0,"owner":null} ;	traps[29] = {"lat":"44.3293","lon":"-68.9282","desc":"Seal Island","caught":0,"owner":null} ;	traps[30] = {"lat":"44.3281","lon":"-68.9288","desc":"Seal Island","caught":0,"owner":null} ;	traps[31] = {"lat":"44.3337","lon":"-68.9235","desc":"Ram Island","caught":0,"owner":null} ;	traps[32] = {"lat":"44.3345","lon":"-68.9232","desc":"Ram Island","caught":0,"owner":null} ;	traps[33] = {"lat":"44.3358","lon":"-68.9229","desc":"Ram Island","caught":0,"owner":null} ;	traps[34] = {"lat":"44.3367","lon":"-68.923","desc":"Ram Island","caught":0,"owner":null} ;	traps[35] = {"lat":"44.3371","lon":"-68.9231","desc":"Ram Island","caught":0,"owner":null} ;	traps[36] = {"lat":"44.3374","lon":"-68.9235","desc":"Ram Island Ledge","caught":0,"owner":null} ;	traps[37] = {"lat":"44.337","lon":"-68.9241","desc":"Ram Island Ledge","caught":0,"owner":null} ;	traps[38] = {"lat":"44.3364","lon":"-68.9246","desc":"Ram Island","caught":0,"owner":null} ;	traps[39] = {"lat":"44.3359","lon":"-68.9245","desc":"Ram Island","caught":0,"owner":null} ;	traps[40] = {"lat":"44.3351","lon":"-68.9245","desc":"Ram Island","caught":0,"owner":null} ;	traps[41] = {"lat":"44.3341","lon":"-68.9244","desc":"Ram Island","caught":0,"owner":null} ;	traps[42] = {"lat":"44.3448","lon":"-68.9212","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[43] = {"lat":"44.345","lon":"-68.9203","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[44] = {"lat":"44.3455","lon":"-68.9197","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[45] = {"lat":"44.3467","lon":"-68.9201","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[46] = {"lat":"44.3462","lon":"-68.921","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[47] = {"lat":"44.3456","lon":"-68.9211","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[48] = {"lat":"44.3455","lon":"-68.9211","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[49] = {"lat":"44.3455","lon":"-68.9213","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[50] = {"lat":"44.3445","lon":"-68.9209","desc":"Sprage Ledge","caught":0,"owner":null} ;	traps[51] = {"lat":"44.3488","lon":"-68.9168","desc":"Barley Ledge","caught":0,"owner":null} ;	traps[52] = {"lat":"44.3501","lon":"-68.9161","desc":"Barley Ledge","caught":0,"owner":null} ;	traps[53] = {"lat":"44.3513","lon":"-68.9163","desc":"Barley Ledge","caught":0,"owner":null} ;	traps[54] = {"lat":"44.3506","lon":"-68.9178","desc":"Barley Ledge","caught":0,"owner":null} ;	traps[55] = {"lat":"44.3498","lon":"-68.9173","desc":"barley Ledge","caught":0,"owner":null} ;	traps[56] = {"lat":"44.3489","lon":"-68.9178","desc":"Barley Ledge","caught":0,"owner":null} ;	traps[57] = {"lat":"44.3308","lon":"-68.9196","desc":"North Islesboro","caught":0,"owner":null} ;	traps[58] = {"lat":"44.3311","lon":"-68.9196","desc":"North Islesboro","caught":0,"owner":null} ;	traps[59] = {"lat":"44.3357","lon":"-68.9196","desc":"North Islesboro","caught":0,"owner":null} ;	traps[60] = {"lat":"44.3358","lon":"-68.9194","desc":"North Islesbor","caught":0,"owner":null} ;	traps[61] = {"lat":"44.3369","lon":"-68.9187","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[62] = {"lat":"44.3382","lon":"-68.9182","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[63] = {"lat":"44.3391","lon":"-68.9159","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[64] = {"lat":"44.3398","lon":"-68.9143","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[65] = {"lat":"44.3402","lon":"-68.9117","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[66] = {"lat":"44.3432","lon":"-68.911","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[67] = {"lat":"44.344","lon":"-68.9108","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[68] = {"lat":"44.346","lon":"-68.9089","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[69] = {"lat":"44.351","lon":"-68.9103","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[70] = {"lat":"44.3522","lon":"-68.9109","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[71] = {"lat":"44.3529","lon":"-68.9114","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[72] = {"lat":"44.3544","lon":"-68.9126","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[73] = {"lat":"44.3565","lon":"-68.9119","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[74] = {"lat":"44.3569","lon":"-68.9112","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[75] = {"lat":"44.3572","lon":"-68.9126","desc":"Sprage Cove","caught":0,"owner":null} ;	traps[76] = {"lat":"44.3252","lon":"-68.9529","desc":"Little Habor","caught":0,"owner":null} ;	traps[77] = {"lat":"44.3223","lon":"-68.955","desc":"Little Habor","caught":0,"owner":null} ;	traps[78] = {"lat":"44.3181","lon":"-68.9571","desc":"Little Habor","caught":0,"owner":null} ;	traps[79] = {"lat":"44.3177","lon":"-68.9576","desc":"Little Habor","caught":0,"owner":null} ;	traps[80] = {"lat":"44.3172","lon":"-68.9586","desc":"Little Habor","caught":0,"owner":null} ;	traps[81] = {"lat":"44.3159","lon":"-68.9592","desc":"Little Habor","caught":0,"owner":null} ;	traps[82] = {"lat":"44.3157","lon":"-68.9589","desc":"Little Habor","caught":0,"owner":null} ;	traps[83] = {"lat":"44.3154","lon":"-68.9584","desc":"Little Habor","caught":0,"owner":null} ;	traps[84] = {"lat":"44.3143","lon":"-68.9582","desc":"Little Habor","caught":0,"owner":null} ;	traps[85] = {"lat":"44.3138","lon":"-68.9589","desc":"Little Habor","caught":0,"owner":null} ;	traps[86] = {"lat":"44.3129","lon":"-68.96","desc":"Wrights Cove","caught":0,"owner":null} ;	traps[87] = {"lat":"44.313","lon":"-68.9599","desc":"Wrights Cove","caught":0,"owner":null} ;	traps[88] = {"lat":"44.3125","lon":"-68.9612","desc":"Wrights Cove","caught":0,"owner":null} ;	traps[89] = {"lat":"44.3104","lon":"-68.9617","desc":"Wrights Cove","caught":0,"owner":null} ;	traps[90] = {"lat":"44.3054","lon":"-68.9681","desc":"Wrights Cove","caught":0,"owner":null} ;	traps[91] = {"lat":"44.3031","lon":"-68.9699","desc":"Fire Island","caught":0,"owner":null} ;	traps[92] = {"lat":"44.3021","lon":"-68.9708","desc":"Fire Island","caught":0,"owner":null} ;	traps[93] = {"lat":"44.3259","lon":"-68.929","desc":"Seal Island","caught":0,"owner":null} ;	traps[94] = {"lat":"44.3018","lon":"-68.9726","desc":"Fire Island","caught":0,"owner":null} ;	traps[95] = {"lat":"44.2983","lon":"-68.976","desc":"Spruce Head","caught":0,"owner":null} ;	traps[96] = {"lat":"44.297","lon":"-68.9774","desc":"Spruce Head","caught":0,"owner":null} ;	traps[97] = {"lat":"44.295","lon":"-68.9784","desc":"Spruce Head","caught":0,"owner":null} ;	traps[98] = {"lat":"44.2948","lon":"-68.9795","desc":"Spruce Head","caught":0,"owner":null} ;	traps[99] = {"lat":"44.2947","lon":"-68.9806","desc":"Spruce Head","caught":0,"owner":null} ;	traps[100] = {"lat":"44.295","lon":"-68.9806","desc":"Spruce Head","caught":0,"owner":null} ;	traps[101] = {"lat":"44.2942","lon":"-68.9827","desc":"Spruce Head","caught":0,"owner":null} ;	
	if (trap == 'all') { // all traps are to be displayed
		var map = new GMap2(document.getElementById("map_canvas")) ;
		map.setCenter(PENOBSCOT_BAY_CENTER, WIDE_ZOOM_LEVEL) ;
		map.addControl(new GSmallMapControl()) ;		// set map location
		map.setMapType(G_HYBRID_MAP) ; // hybrid satelite and road map
		for (data in traps) { // iterate through trap data	
			make_bouy(map, data, traps[data]) ; // plot the trap
		}
	} else if (trap == 'available') { // only display traps designated available
		var map = new GMap2(document.getElementById("map_canvas")) ;
		map.setCenter(PENOBSCOT_BAY_CENTER, WIDE_ZOOM_LEVEL) ;
		map.addControl(new GSmallMapControl()) ;		// set map location
		map.setMapType(G_HYBRID_MAP) ; // hybrid satelite and road map	
		for (data in traps) { // iterate through trap data	
			if (traps[data].owner == null) { // plot the trap
				make_bouy(map, data, traps[data]) ; // if it has no owner
			}
		}
	} else if (traps[trap]) { // an existing trap id was specified
		lat = traps[trap].lat
		lon = traps[trap].lon
		var map = new GMap2(document.getElementById("map_canvas")) ;
		var center = new GLatLng(lat, lon) ;
		map.setCenter(center, CLOSE_ZOOM_LEVEL) ;
		map.addControl(new GSmallMapControl()) ;
		map.setMapType(G_HYBRID_MAP) ;
		make_bouy(map, trap, traps[trap]) ;
		openWindow(trap, traps[trap]) ;		
	} else { // an non-existent trap id was specified
		alert('No trap with that number exists') ;
	}
}

function make_bouy(map, id, trap) { // plot a bouy on the map as a GMarker
	lon = trap.lon
	lat = trap.lat
	var licon = new GIcon() ; // generate a GIcon object with the bouy image
	licon.image = "http://www.cratetoplate.com/images/bouy_icon.png" ;
	licon.iconSize = new GSize(20, 33) ;
	licon.iconAnchor = new GPoint(10, 33) ;
	licon.infoWindowAnchor = new GPoint(15, 1) ;
	var markerOptions = { icon:licon } ;
	position = new GLatLng(lat, lon) ; // create a GMarker object and put it in
	marker[id] = new GMarker(position, markerOptions) ; // the marker array
	map.addOverlay(marker[id]) ; // at it to the map
	GEvent.addListener(marker[id], "click", function() {
			openWindow(id, trap) ; // setup an info window to apear when the
		}								// bouy is clicked
	) ;
}

function openWindow(id, trap) { // popup an info window above the bouy
	windowText = '<p>'+trap.desc+'<br />' ;
	windowText += 'Lat: '+trap.lat+' Lon: '+trap.lon+'<br />' ;
	if (!trap.owner) {
		windowText += 'Catch: '+trap.caught ;
	}
	windowText += '</p>' ;
	if (trap.owner) {
		windowText += '<p>' ;
		windowText += 	trap.owner.name+'<br />' ;
		windowText += 	trap.owner.program+'<br />' ;
		windowText += '</p>' ;
		windowText += '<table cellspacing=\"0\" class=\"info-table\">' ;
		windowText +=	'<tr>' ;
		windowText +=		'<td>CAUGHT</td>' ;
		windowText +=		'<td>SHIPPED</td>' ;
		windowText +=		'<td>OWED</td>' ;
		windowText +=	'</tr>' ;
		windowText +=	'<tr>' ;
		windowText +=		'<td>'+trap.owner.caught+'</td>' ;
		windowText +=		'<td>'+trap.owner.shipped+'</td>' ;
		windowText +=		'<td>'+trap.owner.owed+'</td>' ;
		windowText +=	'</tr>' ;
		windowText += '</table>' ;
	}
	marker[id].openInfoWindowHtml(windowText) ;
}

/*

string(9) "2/22/2012"

*/
