var markers;

// New Pins

var redpin = new GIcon();
redpin.shadow = "/maps/images/special/pins/red/shadow.png";
redpin.iconSize = new GSize(20, 34);
redpin.shadowSize = new GSize(37, 34);
redpin.iconAnchor = new GPoint(9, 34);
redpin.infoWindowAnchor = new GPoint(9, 34);
redpin.infoShadowAnchor = new GPoint(18, 25);

var rlogo = new GIcon();
rlogo.shadow = "/maps/images/special/pins/R/shadow.png";
rlogo.iconSize = new GSize(24, 24);
rlogo.shadowSize = new GSize(48, 24);
rlogo.iconAnchor = new GPoint(12, 24);
rlogo.infoWindowAnchor = new GPoint(12, 24);
rlogo.infoShadowAnchor = new GPoint(0, 24);

// Broward County Line Polyline Coords
var countyline = new GPolyline([
		new GLatLng(25.973941,-80.116705),
		new GLatLng(25.970939,-80.294985),
		new GLatLng(25.956897,-80.294534),
		new GLatLng(25.956897,-80.642395),
		new GLatLng(25.978696,-80.642395),
		new GLatLng(25.978696,-80.873086),
		new GLatLng(26.331720,-80.881251),
		new GLatLng(26.334163,-80.297345),
		new GLatLng(26.334422,-80.228262),
		new GLatLng(26.327730,-80.100374),
		new GLatLng(26.326730,-80.098486),
		new GLatLng(26.325884,-80.098314),
		new GLatLng(26.323345,-80.099001),
		new GLatLng(26.322499,-80.096340),
		new GLatLng(26.326499,-80.091877),
		new GLatLng(26.324422,-80.088959),
		new GLatLng(26.322037,-80.088701),
		new GLatLng(26.320883,-80.087757),
		new GLatLng(26.320941,-80.074743)],
		"#999999", 5);


function loadmap() {
	return redrawMap();
}


function redrawMap() {
	var map = new GMap2(document.getElementById("map"));

	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());

	map.setCenter(new GLatLng(26.160024404525757,-80.12315154075623), 10);

	var panel = document.getElementById( 'panel' );

	_loadXmlLocationsFileFromURL("/calendar/locationsxml.php", map, panel);

	map.addOverlay(countyline);
}


// Creates a marker whose info window displays the given number
function createMarker(point, style, index) {
	// Create a lettered icon for this point using our icon class from above
	var icon = new GIcon(style);
	if ( style == redpin )
	{
		icon.image = "/maps/images/special/pins/red/" + index + ".png";
	}
	if ( style == rlogo )
	{
		icon.image = "/maps/images/special/pins/R/R.png";
	}
	var marker = new GMarker(point, icon);

	// Show this marker's index in the info window when it is clicked
	var html = "Marker <b>" + index + "</b>";
	GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(html);
			});


	return marker;
}

function popup( i )
{
	markers[i].openInfoWindowHtml( markers[i].infoHtml );
}

// functions that open the directions forms
function tohere(i) {
	markers[i].openInfoWindowHtml( markers[i].toHtml );
}
function fromhere(i) {
	markers[i].openInfoWindowHtml( markers[i].fromHtml );
}




// This returns a function closure that calls popup() with the specified arg.
// These shenanigans are necessary because the API left out client-data.
function makePopupCaller( i )
{
	return function() { popup( i ); };
}




// Concatenate the values in an element list.
function concatValues( elements )
{
	var values = '';
	for ( var i = 0; i < elements.length; ++i )
	{
		if ( values != '' )
			values += ' ';
		values += elements[i].firstChild.nodeValue;
	}
	return values;
}




function _loadXmlLocationsFileFromURL( url, map, panel ) {
	// Fetch and parse the marker data.
	var request = GXmlHttp.create();
	request.open( 'GET', url, true );
	request.onreadystatechange = function()
	{
		if ( request.readyState == 4 )
		{
			var xmlDoc = request.responseXML;
			var markerElements = xmlDoc.documentElement.getElementsByTagName( 'marker' );
			markers = new Array( 2+markerElements.length );


			// Hardcode RAGFL Office
			markers["RAGFL"] = createMarker( new GLatLng( 26.159939, -80.122873 ), rlogo,  "RAGFL" );
			markers["RAGFL"].infoHtml = '<strong>RAGFL</strong><br/><address>1765 NE 26 St <br/>Fort Lauderdale, Florida 33305</address><img src="http://r-world.net/images/RAGFLBuildingSM.jpg" alt="RAGFL Wilton Manors Office" title="RAGFL Wilton Manors Office">'+ '<br>Directions: <a href="javascript:tohere(\'RAGFL\')">To here</a> - <a href="javascript:fromhere(\'RAGFL\')">From here</a>';
			// The info window version with the "to here" form open
			markers["RAGFL"].toHtml = '<br>Directions: <b>To here</b> - <a href="javascript:fromhere(\'RAGFL\')">From here</a>' +
				'<br>Start address:<form action="http://maps.google.com/maps" method="get" target="_blank">' +
				'<input type="text" SIZE=40 MAXLENGTH=50 name="saddr" id="saddr" value="" /><br>' +
				'<INPUT value="Get Directions" TYPE="SUBMIT">' +
				'<input type="hidden" name="daddr" value="26.159939 -80.122873 (RAGFL Office)"/>';
			// The info window version with the "to here" form open
			markers["RAGFL"].fromHtml = '<br>Directions: <a href="javascript:tohere(\'RAGFL\')">To here</a> - <b>From here</b>' +
				'<br>End address:<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
				'<input type="text" SIZE=40 MAXLENGTH=50 name="daddr" id="daddr" value="" /><br>' +
				'<INPUT value="Get Directions" TYPE="SUBMIT">' +
				'<input type="hidden" name="saddr" value="26.159939 -80.122873 (RAGFL Office)"/>';
			GEvent.addListener( markers["RAGFL"], 'click', makePopupCaller( "RAGFL" ) );
			map.addOverlay( markers["RAGFL"] );




			// Hardcode RAGFL New Office
			markers["RAGFLWEST"] = createMarker( new GLatLng( 26.196352, -80.287678 ), rlogo,  "RAGFLWEST" );
			markers["RAGFLWEST"].infoHtml = '<strong>RAGFL West Office</strong><br/><address>5850 Hiatus Road, Suite A<br/>Tamarac, Florida 33321</address><br/><p><ul><li>4,200 square foot multi-purpose facility</li><li>Full membership services</li><li>Realtor<sup>&reg;</sup> store</li><li>Supra lockbox and keypad services</li><li>Education programs.</li></ul></p>' + '<br>Directions: <a href="javascript:tohere(\'RAGFLWEST\')">To here</a> - <a href="javascript:fromhere(\'RAGFLWEST\')">From here</a>';
			// The info window version with the "to here" form open
			markers["RAGFLWEST"].toHtml = '<br>Directions: <b>To here</b> - <a href="javascript:fromhere(\'RAGFLWEST\')">From here</a>' +
				'<br>Start address:<form action="http://maps.google.com/maps" method="get" target="_blank">' +
				'<input type="text" SIZE=40 MAXLENGTH=50 name="saddr" id="saddr" value="" /><br>' +
				'<INPUT value="Get Directions" TYPE="SUBMIT">' +
				'<input type="hidden" name="daddr" value="26.196352 -80.287678 (RAGFL West)"/>';
			// The info window version with the "to here" form open
			markers["RAGFLWEST"].fromHtml = '<br>Directions: <a href="javascript:tohere(\'RAGFLWEST\')">To here</a> - <b>From here</b>' +
				'<br>End address:<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
				'<input type="text" SIZE=40 MAXLENGTH=50 name="daddr" id="daddr" value="" /><br>' +
				'<INPUT value="Get Directions" TYPE="SUBMIT">' +
				'<input type="hidden" name="saddr" value="26.196352 -80.287678 (RAGFL West)"/>';

			GEvent.addListener( markers["RAGFLWEST"], 'click', makePopupCaller( "RAGFLWEST" ) );
			//GEvent.addListener( markers["RAGFLWEST"], 'click', tohere( "RAGFLWEST" ) );
			map.addOverlay( markers["RAGFLWEST"] );

			// Lets go through the XML doc and create the rest of the points
			for ( var i = 0; i < markerElements.length; ++i )
			{
				var j = i+1;
				var lat = markerElements[i].getAttribute( 'lat' );
				var lon = markerElements[i].getAttribute( 'lon' );
				var name = concatValues( markerElements[i].getElementsByTagName( 'name' ) );
				var address = concatValues( markerElements[i].getElementsByTagName( 'address' ) );
				var city = concatValues( markerElements[i].getElementsByTagName( 'city' ) );
				var state = concatValues( markerElements[i].getElementsByTagName( 'state' ) );
				var zip = concatValues( markerElements[i].getElementsByTagName( 'zip' ) );
				var comment = concatValues( markerElements[i].getElementsByTagName( 'comment' ) );
				var description = concatValues( markerElements[i].getElementsByTagName( 'description' ) );
				var offeredclasses = concatValues( markerElements[i].getElementsByTagName( 'offeredclasses' ) );

				markers[j] = createMarker( new GLatLng( parseFloat( lat ), parseFloat( lon ) ), redpin,  j );
				markers[j].infoHtml = '<strong>' + name + '</strong><br/><address>' + address + '<br/>'+ city + ', '+ state + ' ' + zip + '</address><br/>' + comment + 'Classes at this location:<br/>' + offeredclasses  + '<br>Directions: <a href="javascript:tohere(' + j + ')">To here</a> - <a href="javascript:fromhere(' + j + ')">From here</a>';
				// The info window version with the "to here" form open
				markers[j].toHtml = '<br>Directions: <b>To here</b> - <a href="javascript:fromhere(' + j + ')">From here</a>' +
					'<br>Start address:<form action="http://maps.google.com/maps" method="get" target="_blank">' +
					'<input type="text" SIZE=40 MAXLENGTH=50 name="saddr" id="saddr" value="" /><br>' +
					'<INPUT value="Get Directions" TYPE="SUBMIT">' +
					'<input type="hidden" name="daddr" value="' + lat + lon + ' (' + name + ')"/>';
				// The info window version with the "to here" form open
				markers[j].fromHtml = '<br>Directions: <a href="javascript:tohere(' + j + ')">To here</a> - <b>From here</b>' +
					'<br>End address:<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
					'<input type="text" SIZE=40 MAXLENGTH=50 name="daddr" id="daddr" value="" /><br>' +
					'<INPUT value="Get Directions" TYPE="SUBMIT">' +
					'<input type="hidden" name="saddr" value="' + lat + lon + ' (' + name + ')"/>';
				GEvent.addListener( markers[j], 'click', makePopupCaller( j ) );
				map.addOverlay( markers[j] );

				var link = '<a href="javascript:popup( ' + j + ' )">';
				var html = link + j + ' ' + name + '</a><br><br>';
				panel.innerHTML += html;
			}
		}
	};
	request.send( null );

}


