// initialise some variables

var centerLatitude = 40.50;
var centerLongitude = 12.50;
var startZoom = 1;
var map;
var officemarkers = [];
var addressText = [];
var numoffices = 0;
var point = 0;
 var i = 0;
 
 		var cgsIcon = new GIcon();
		cgsIcon.image = "common/images/building.png";
		cgsIcon.shadow = "common/images/shadow.png";
		cgsIcon.iconSize = new GSize(21, 31);
		cgsIcon.shadowSize = new GSize(37, 34);
		cgsIcon.iconAnchor = new GPoint(1, 34);
		cgsIcon.infoWindowAnchor = new GPoint(1, 2);
		cgsIcon.infoShadowAnchor = new GPoint(1, 25);
	  
function init() {
	if (GBrowserIsCompatible()) {
			
      map = new GMap2(document.getElementById("map"));
      map.addControl(new GSmallMapControl());
      map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);
	  retrieveMarkers();
	
} else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}
window.onload = init;  // run init function
window.onunload = GUnload; //unload

function retrieveMarkers() {
	var request = GXmlHttp.create();  
	request.open("GET", "common/xml/cgsoffices.xml", true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			var xmlDoc = GXml.parse(request.responseText);
			var markers = xmlDoc.getElementsByTagName("office");
			for (var i = 0; i < markers.length; i++) {
				var lng = markers[i].getElementsByTagName("lng")[0].firstChild.nodeValue;
				var lat = markers[i].getElementsByTagName("lat")[0].firstChild.nodeValue;	
				var zoomfactor = markers[i].getElementsByTagName("mapzoomfactor")[0].firstChild.nodeValue;
						if(lng && lat) {
							
				var latlng = new GLatLng(parseFloat(lat),parseFloat(lng));
				
				var postaddress = markers[i].getElementsByTagName("address")[0].childNodes[0].nodeValue;
				var officetitle = markers[i].getElementsByTagName("mapinfo")[0].childNodes[0].nodeValue;
				var snailmail = '';
				
				var chiname = getNodeValue(markers[i],'chiaddress','');
				
				var postaddressarray = postaddress.split(",");
				for(p = 0; p < postaddressarray.length; p++){
					snailmail = snailmail + postaddressarray[p] +' <br>';
				}		
					
				var telnum = markers[i].getElementsByTagName("telephone")[0].childNodes[0].nodeValue;
				var faxnum = markers[i].getElementsByTagName("fax")[0].childNodes[0].nodeValue;
				
				var address = 	'<table border="0" cellspacing="0" cellpadding="0"><th colspan="2">' + officetitle + '</th><tr><td>' + snailmail + '</td><td>Tel: ' + telnum + '<br>Fax: ' + faxnum + '</td></tr><tr><td colspan="2">' + chiname + '</td></tr></table>';
							
				var cityname = markers[i].getElementsByTagName("city")[0].childNodes[0].nodeValue;
				
				point = new GMarker(latlng, { icon: cgsIcon });
				var marker = createMarker(latlng, cityname, point, address, zoomfactor);	
 	            map.addOverlay(marker);
			   
						}

			}
		
		} // end readystate
	
	} //  onreadystate
	
	request.send(null);
}

function myclick(i) {
	  for (var j = 0; j < numoffices; j++) {
	  officemarkers[j].setImage("common/images/building.png");
	  }
	  
	  var tmp = i.split("_");
	  i = parseInt(tmp[0]);
	  officezoomfactor = parseInt(tmp[1]);

	map.setCenter(officemarkers[i].getLatLng(), officezoomfactor);
	officemarkers[i].setImage("common/images/buildinghilite.png");
	document.getElementById("officeaddress").innerHTML = addressText[i];
}

function createMarker(latlng, cityname, point, address, zoomfactor) {

	GEvent.addListener(point, 'click', function() {
	
	for (var j = 0; j < numoffices; j++) {
	  officemarkers[j].setImage("common/images/building.png");
	  }
		map.panTo(point.getLatLng());	
		zoomfactor = parseInt(zoomfactor);
		map.setCenter(point.getLatLng(), zoomfactor);
		point.setImage("common/images/buildinghilite.png");
		document.getElementById("officeaddress").innerHTML = address;	
	});
	
	officemarkers[i] = point;
	addressText[i] = address;
    numoffices = i;
	i++;
return point;
}	

function getNodeValue(node, tagname, default_val) {
var elems = node.getElementsByTagName(tagname);

//test to see if tags aren't blank and have some value
if (elems && elems[0] && elems[0].firstChild &&
elems[0].firstChild.nodeValue) {
return elems[0].firstChild.nodeValue;
}
return default_val;
}