var mapCentre;
var mapZoom;

function GMapAgencyListings ( gMapDiv, agency, coordsArray ){
	var url = '/xml/getListings.php?agency='+agency+'&time='+(new Date().getTime());
	var listMap = initGMapListings( gMapDiv, coordsArray );

	if ( listMap != false ){
		var xmlHttp = GetXmlHttpObject();
		// var xmlHttp = getXMLHTTPObject();
		//if ( xmlHttp != false ){
			xmlHttp.open("GET", url, true);
			xmlHttp.send(null);

			xmlHttp.onreadystatechange = function (){
				if ( xmlHttp.readyState == 4 ){
					var xmlDoc = xmlHttp.responseXML.documentElement;
					var xmlListing = xmlDoc.getElementsByTagName('LISTING');
					var listing = new Array();

					for ( var i = 0; i < xmlListing.length; i++ ){
						listing[i] = new Array();
						for ( var e = 0; e < xmlListing[i].childNodes.length; e++ ){
							var elm = xmlListing[i].childNodes[e];
							
							if (elm.childNodes.length > 0 ){
								listing[i][elm.nodeName] = elm.childNodes[0].nodeValue;
							}
							else {
								listing[i][elm.nodeName] = '';
							}
						}

						if ( ! isBlank(listing[i]['COORDS']) ){
							listing[i]['LIST_TYPE'] = xmlListing[i].getAttribute('type');
							mapCentre = listMap.getCenter();
							mapZoom = listMap.getZoom();
							listMap.addOverlay(getListingMarker(listing[i]));
							GEvent.addListener(listMap, "infowindowclose", function(){
								listMap.setCenter(mapCentre, mapZoom);
							});
						} // if
					}
				}
			}
		//}
	}
}

function GMapQxlAgencies ( gMapDiv ){
	var url = '/xml/getAgencies.php?&time='+(new Date().getTime());
	var agencyMap = initGMapAusSmall( gMapDiv );
	
	if ( agencyMap != false ){
		var xmlHttp = GetXmlHttpObject();
		//var xmlHttp = getXMLHTTPObject();
		//if ( xmlHttp != false ){
			xmlHttp.open("GET", url, true);
			xmlHttp.send(null);
			xmlHttp.onreadystatechange = function (){
				if ( xmlHttp.readyState == 4 ){
					var xmlDoc = xmlHttp.responseXML.documentElement;
					var xmlAgency = xmlDoc.getElementsByTagName('AGENCY');
					var agency = new Array();
					for ( var i = 0; i < xmlAgency.length; i++ ){
						agency[i] = new Array();
						for ( var e = 0; e < xmlAgency[i].childNodes.length; e++ ){
							var elm = xmlAgency[i].childNodes[e];
							
							if ( elm.childNodes.length > 0 ){
								agency[i][elm.nodeName] = elm.childNodes[0].nodeValue;
							}
							else {
								agency[i][elm.nodeName] = '';
							}
						}

						if ( ! isBlank(agency[i]['COORDS']) ){
							mapCentre = agencyMap.getCenter();
							mapZoom = agencyMap.getZoom();
							agencyMap.addOverlay(getAgencyMarker(agency[i]));
							GEvent.addListener(agencyMap, "infowindowclose", function(){
								agencyMap.setCenter(mapCentre, mapZoom);
							});
						} // if
					} // for loop
				} // if xmlHttp ready
			} // xmlHttp ready function
		//} // if xmlHttp
	} // if agency map
} // function

function initGMapListings ( gMapDiv, coordsArray ){
	if (GBrowserIsCompatible()) {
		var startCoords = new GLatLng(coordsArray[1], coordsArray[0]);
		var map = new GMap2(document.getElementById(gMapDiv));
		map.setCenter(startCoords,10);
//		map.addControl(new GSmallMapControl());
		map.addControl(new GLargeMapControl());
		return map;
	}
	return false;	
}

function initGMapAusSmall(gMapDiv) {
	if (GBrowserIsCompatible()) {
		var maxZoom = 3;
		var minZoom = 3;
		var startCoords = new GLatLng(-28.883159609323485, 134.208984375);
		
		// Restrict map zoom levels
		// from http://blog.kylemulka.com/?p=423
		var mapTypes = G_DEFAULT_MAP_TYPES;
		
		for(var i = 0; i < mapTypes.length; i++){
			mapTypes[i].getMaximumResolution = function(latlng){ return maxZoom;};
			mapTypes[i].getMinimumResolution = function(latlng){ return minZoom;};
		}
		
		var map = new GMap2(document.getElementById(gMapDiv), {mapTypes: mapTypes});
		map.setCenter(startCoords,minZoom);
		mapCentre = map.getCenter();
		mapZoom = map.getZoom;
		return map;
	}
	return false;
}

function getQxlIcon ( colour ){
	var tinyIcon = new GIcon(G_DEFAULT_ICON);
	tinyIcon.image = "/img/mkr-"+colour+".png";
	tinyIcon.shadow = "/img/mkr-shadow.png";
	tinyIcon.iconSize = new GSize(12, 20);
	tinyIcon.shadowSize = new GSize(22, 20);
	tinyIcon.iconAnchor = new GPoint(6, 20);
	tinyIcon.infoWindowAnchor = new GPoint(6, 10);

	return tinyIcon;
}

function getListingMarker ( listingDetails ){
	var colour = "red";
	
	if ( listingDetails['LIST_TYPE'].toUpperCase() == "RENT" ){
		colour = "green";
	}
	
	var qxlIcon = getQxlIcon(colour);
	var coords = listingDetails['COORDS'].split(',');
	var point = new GLatLng(coords[1],coords[0]);
	var mkrOpts = { icon: qxlIcon, clickable: true, title: listingDetails['TITLE'] };
	var mkr = new GMarker(point, mkrOpts);
	
	var winHtml = '<div id="gMapListingInfoWin">'
		+'<a href="'+listingDetails['URL']+'"><h1>'+listingDetails['TITLE']+'</h1></a>'
		+'<div><a href="'+listingDetails['URL']+'"><img src="'+listingDetails['IMAGE']+'"></a>'
		+listingDetails['TYPE']+' for '+listingDetails['LIST_TYPE'].toLowerCase()
		+'<p><b>Price:</b> '+listingDetails['PRICE']+'</p></div>'
		+'<div class="moreInfo"><a href="'+listingDetails['URL']+'" class="goto">More Information...</a></div></div>';
	
	GEvent.addListener(mkr, "click", function() {
		mkr.openInfoWindowHtml(winHtml);
	});
	
	return mkr;
}

function getAgencyMarker ( agDetails ){
	var qxlIcon = getQxlIcon("gold");
	var coords = agDetails['COORDS'].split(',');
	var point = new GLatLng(coords[1],coords[0]);
	var mkrOpts = { icon: qxlIcon, clickable: true, title: agDetails['NAME'] };
	var mkr = new GMarker(point, mkrOpts);
	
	var winHtml = '<div id="agInfoWin">'
		+'<a href="/'+agDetails['CODE']+'"><h1>'+agDetails['NAME']+'</h1></a>'
		+agDetails['ADDRESS']+'<br/>'+agDetails['SUBURB']+'<br/>'+agDetails['CITY']+'<br/>'+agDetails['STATE']
		+'<a href="/'+agDetails['CODE']+'" class="goto">Go To Agency...</a></div>';
	
	GEvent.addListener(mkr, "click", function() {
		mkr.openInfoWindowHtml(winHtml);
	});
	
	return mkr;
}
