var googleMap = {

  //XML document location
  xmlLocation: "",

  //destination - what building the user selects
  destination: "",
   
  //array for marker objects
  markerObjectArray: new Array(),

  addEvent: function(elm, evType, fn, useCapture) 
  {
    // cross-browser event handling for IE5+, NS6 and Mozilla By Scott Andrew
    if (elm.addEventListener)
    {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    }
    else if (elm.attachEvent)
    { 
      var r = elm.attachEvent('on' + evType, fn);
      return r;
    }
    else
    {
      elm['on' + evType] = fn;
    }
  },
  
  init: function() 
  {
	if (GBrowserIsCompatible())
	{
		//googleMap.addEvent(document.getElementById('readmap'), 'click', googleMap.openRouteWindow, false);
		googleMap.xmlLocation = "http://www.freezoneauditors.org/index.php/home/auditors/";
		googleMap.loadXML();
	}
	else
	{
	 	alert("Sorry, the Google Maps API is not compatible with this browser");
	}  
  },
  
  /*
	This loads an xml file which contains the location information we need.
	It also creates DOM elements such as sidebar, list, and list links for each location.
  */
  loadXML: function() 
  {  	 
  	var request = null;
	var map = null;
  	
	// Read the data from addresses.xml
	request = GXmlHttp.create();
	request.open("GET", googleMap.xmlLocation, true);

	request.onreadystatechange = function()
	{
		if (request.readyState == 4)
		{			
			var xmlDoc = request.responseXML;

			// obtain the array of markers and loop through it
			var markers = xmlDoc.documentElement.getElementsByTagName("marker");

			for (var i = 0; i < markers.length; i++)
			{
				 // obtain the attribues of each marker
				 var lat = parseFloat(markers[i].getAttribute("lat"));
				 var lng = parseFloat(markers[i].getAttribute("lng"));
				 var point = new GLatLng(lat,lng);
				 var auditor_name = markers[i].getAttribute("auditor_name");
				 var address = markers[i].getAttribute("address");
				 var marker = new GMarker(point, googleMap.makeIcon("images/auditor.gif"));
				 var marker = new GMarker(point);

				 var mar = new Marker();
				 mar.setLat(lat);
				 mar.setLong(lng);
				 mar.setPoint(point);
				 mar.setAuditorName(auditor_name);
				 mar.setAddress(address);
				 mar.setMarker(marker);
				 googleMap.markerObjectArray[i] = mar;
			}
			
			//set the destination, on load set it to the first object otherwise set it to what the user selects
			googleMap.destination = googleMap.markerObjectArray[0].getLatLong();			
			
			var map = new GMap2(document.getElementById("map"));
		
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
			//set map centre
			//39.774769485295465, -40.4296875
			//map.setCenter(new GLatLng(parseFloat(googleMap.markerObjectArray[0].getLat()), parseFloat(googleMap.markerObjectArray[0].getLong())), 3);
			map.setCenter(new GLatLng(43.0, -49.5), 2);
			
			/*var sideBarDiv = document.createElement("div");
			sideBarDiv.setAttribute("id", "mapsidebar");
			var sideBarUl = document.createElement('ul');
			sideBarUl.setAttribute("id", "sidebarul");
			sideBarDiv.appendChild(sideBarUl);
			
			mapdiv = document.getElementById("map");
			mapdiv.parentNode.insertBefore(sideBarDiv,mapdiv.nextSibling);*/

			for(x = 0; x < googleMap.markerObjectArray.length; x++)
			{
				var markerOverlay = googleMap.createMarker(x);
				map.addOverlay(markerOverlay);
			}
		}
	}
	request.send(null);
  },

  /*
	This creates a marker on the map and sets up a link in the sidebar which calls "myclick"
  */
  createMarker: function(count)
  {  	
	var markerObj = googleMap.markerObjectArray[count];
	var marker = markerObj.getMarker();

	GEvent.addListener(markerObj.getMarker(), "click", function() {marker.openInfoWindowHtml(markerObj.getAddress());});

	/*var linklist = document.createElement('li');
	var maplink = document.createElement('a');
	var maplinkHREF = 'javascript:googleMap.myclick(' + count + ')';
	maplink.href = maplinkHREF;
	maplink.className = 'maplink';
	var linktitle = markerObj.getLabel();
	var linktitletextnode = document.createTextNode(linktitle);
	maplink.appendChild(linktitletextnode);
	linklist.appendChild(maplink);
	document.getElementById("mapsidebar").appendChild(linklist);
	*/

	return marker;
  },
  
  makeIcon: function (image)
  {
	  var icon = new GIcon();
	  icon.image = image;
	  //icon.shadow = "images/auditor.gif";
	  icon.iconSize = new GSize(17, 24);
	  icon.shadowSize = new GSize(24, 16);
	  icon.iconAnchor = new GPoint(8, 16);
	  icon.infoShadowAnchor = new GPoint(0, 0);
	  icon.infoWindowAnchor = new GPoint(8, 1);
	  return icon;
  },
  
  /*
	This is called when links in the sidebar are clicked. it displays marker info
  */
  myclick: function(i)
  {
	var address = googleMap.markerObjectArray[i].getAddress();
	var marker = googleMap.markerObjectArray[i].getMarker();
	marker.openInfoWindowHtml(address);
	googleMap.destination = googleMap.markerObjectArray[i].getLatLong();
	document.getElementById('maplegend').firstChild.nodeValue = "Find your way to " + googleMap.markerObjectArray[i].getAuditorName();
  },
  
  /*
	This opens a google window with address values and destination
  */
  openRouteWindow: function(target)
  {
	address = document.getElementById("googleformaddress");

	if(!address.value)
	{
		window.alert("please enter your address or postcode");
	}
	else
	{
		popupWin = window.open('http://maps.google.co.uk?daddr=' + googleMap.destination + '&saddr=' +  address.value,'Directions', 'status, scrollbars, resizable, width=800, height=600, left=20, top=20');
	}

	if(window.event && window.event.returnValue)
	{
		window.event.returnValue = false;
	}
	if(target && target.preventDefault())
	{target.preventDefault();}
  },
  
  /*
	Setter for the XML document location
  */
  setXmlLocation: function(e)
  {	
	if(window.event)
	{
		var target = window.event.srcElement;
	}
	else
	{
		if(e)
		{
			var target = e.target;
		}
		else
		{
			var target = null;
		}
	}
	
	googleMap.markerObjectArray.length = 0;
	googleMap.xmlLocation = target;
	
	try
	{

		if(window.event && window.event.returnValue)
		{
			window.event.returnValue = false;
		}

		if(e && e.preventDefault())
		{e.preventDefault();}
	
	}catch(e){}
	
	googleMap.loadXML();
	return false;
  }
  
}

/*
	Object used to store xml information.
*/
function Marker()
{
	var lat;
	var long;
	var point;
	var auditor_name;
	var address;
	var marker;

	this.setLat = function(lat)
	{
		this.lat = lat;
	}

	this.getLat = function()
	{
		return this.lat;
	}

	this.setLong = function(long)
	{
		this.long = long;
	}

	this.getLong = function()
	{
		return this.long;
	}

	this.getLatLong = function()
	{
		return this.lat + ", " + this.long;
	}

	this.setPoint = function(point)
	{
		this.point = point;
	}

	this.getPoint = function()
	{
		return this.point;
	}

	this.setAuditorName = function(auditor_name)
	{
		this.auditor_name = auditor_name;
	}

	this.getAuditorName = function()
	{
		return this.auditor_name;
	}

	this.setAddress = function(address)
	{
		this.address = address;
	}

	this.getAddress = function()
	{
		return this.getAuditorName() + this.address;
	}

	this.setMarker = function(marker)
	{
		this.marker = marker;
	}

	this.getMarker = function()
	{
		return this.marker;
	}
}
googleMap.addEvent(window, 'load', googleMap.init, false);