var map;
var resultsTable;

//<![CDATA[

function load() {
	if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("map"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(-33.82916667, 151.1125), 13);
	}
}

//]]>


/***************************************************
* getPage utilises AJAX to query the database then
* deal with the results that are returned back in
* an XML format
***************************************************/
function getPage(frm){
	var request = GXmlHttp.create();
	var suburb = frm.txtSuburb.value;
	var parkName = frm.txtParkName.value;
	var file = 'scripts/search_db.php?suburb=' + suburb + '&parkName=' + parkName;
	var lat, lng;
	var facilities;
	var text;
	
	resultsTable = '<table width="100%">';
		
	var request = GXmlHttp.create();
	request.open("GET", file, true);
	request.onreadystatechange = function() {

	if (request.readyState == 4) {
		//var content = request.responseText;
		//alert(content);
		
		var xmlDoc = request.responseXML.documentElement;
		traverse(xmlDoc, 0);
		var park = xmlDoc.getElementsByTagName("PARK");
		//alert(park.length);
		if(park.length == 0){
			alert('this park does not exit or has not been mapped yet');
		}
		else{
			
			parkMarkers = new Array();
			for(var i=0; i < park.length; i++)
			{
				text = '<b>Facilities available:</b><ul>';
				//parkName = GXml.value(park[i].getElementsByTagName("NAME")[0]);
				lat = park[i].getAttribute('lat');
				lng = park[i].getAttribute('lng');
				//point = new GLatLng(lat, lng);
				
				//var temp = park[i].getElementsByTagName("FACILITIES");
				facility = park[i].childNodes.item(1).getElementsByTagName("FACILITY");
				//alert(facility.length);
				
				for(var innerIndex = 0; innerIndex < facility.length; innerIndex++){
						text = text + '<li>' + facility[innerIndex].getAttribute('type') + '</li>';
				}
				
				text = text + '</ul>';
				
				parkMarkers[i] = createMarker(new GLatLng(lat, lng), text);
			}
			
		
			//alert('park exists');
			//lat = park[0].getAttribute("lat");
			//lng = park[0].getAttribute("lng");
			//alert(lng + ' ' + lat);
			//var map = new GMap2(document.getElementById("map"));
			//map.setCenter(new GLatLng(-33.8752, 151.2100), 13);*/
			
			map.clearOverlays();
			for(var i=0; i < parkMarkers.length; i++){
				map.addOverlay(parkMarkers[i]);
				
			}
			
			map.setZoom(15);
			//moveLoc(lat, lng);

		}
			//alert(content);
			resultsTable = resultsTable + '</table>';
		  	document.getElementById('searchResults').innerHTML=resultsTable;
  	}
}
request.send(null);
}


/***************************************
* Recursive function to traverse the DOM
* tree and generate table output
* Author: D. Neo
* Date: 18/07/06
****************************************/
//function traverse(tree, lat, lng){
	function traverse(tree, id){
	if(tree.hasChildNodes()){
		for(var i=0; i<tree.childNodes.length; i++){
			//alert(tree.nodeName);
			if(tree.nodeName == 'PARK'){
				//alert(tree.getAttribute('lat'));
				traverse(tree.childNodes.item(i), id + i);
			}
			else if(tree.nodeName == 'FACILITIES'){
				//alert('in FCAILTIES');
				return;		//don't want to do anything for the FACILITIES elements
			}
			else{
				//traverse(tree.childNodes(i), lat, lng);			//does not work for mozilla
				traverse(tree.childNodes.item(i), id + i);	
			}

		}
	}
	else{
			//resultsTable = resultsTable + '<tr><td><a href="javascript:moveLoc(' + lat + ', ' + lng + ')">' + GXml.value(tree) + '</a></td></tr>';
			resultsTable = resultsTable + '<tr><td><a href="javascript:moveLoc(' + id + ')">' + GXml.value(tree) + '</a></td></tr>';
			return;
	}
}


/***************************************
* Creates a marker for the given point
* and returns it
* Author: D. Neo
* Date: 18/07/06
****************************************/
function createMarker(point, text){
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {		//added 23/7
	marker.openInfoWindowHtml(text); });		//added 23/7
	return marker;
}


/******************************************************
* moveLoc function will move the maps centre/focus to
* the specified position and zoom closer in. We don't
* clear the existing markers of the map
* Author: D. Neo
* Date: 18/07/06
******************************************************/
function moveLoc(id){
	//point = new GLatLng(lat, lng);
	//have to call this first otherwise when it zooms, center will not be on correct marker/point
	map.setZoom(15);
	
	map.panTo(parkMarkers[id].getPoint());
	
	GEvent.trigger(parkMarkers[id],"click");	//added 23/7
	
	//map.setCenter(point);

	//map.clearOverlays();	// clear the existing overlays
	//map.addOverlay(new GMarker(point));	//add marker for park location
}



/***************************************************
* showFacilties function will show the facilities
* of the currect selected park. Uses the park's lat
* and lng to query database
****************************************************/
function showFacilities(lat, lng){
	
}
