var map, mgr;
var icons = {};
var markerxml = null; // variable holds the XML returned from query
var catFilter = {};
var blnShowAll = false;

// set up variables for map initialisation
var strXMLpath;
var strRegion = "Global";
var strCategoryFilter = "all";

function findCentre()
{
 alert(map.getCenter());
}

// retrieve the icon object info for given Division; create the object if not already made
function getIcon(Division) {
 var icon = null;
 if (Division) {
  if (icons[Division])
  {icon = icons[Division];}
  else {
   icon = new GIcon(baseIcon);
   //icon.image = "images/core/Maps/marker_" + Division + ".png";
   icon.image = "images/core/Maps/marker_Group.png";
   icons[Division] = icon;
  }
 }
 return icon;
}
	
// create each individual marker & add a listener event & info window to each
function createMarker(posn, division, name, officetype, address, telephone, fax, email, pageref, icon) {
 var marker = new GMarker(posn,{title:name, icon:icon});
 var html = "<div class=\"MarkerOverlay\"><a style='font-weight:bold' target='_blank' href=\"" + pageref + "\">" + name + "</a> <br/>" + officetype + " <br/><br/>" + address + " <br/><strong>T:</strong> " + telephone + " &nbsp; <strong>F:</strong> " + fax + "<br /><a href=\"mailto:" + email + "\">" + email + "</a><br /><a target='_blank' style='display:block; text-align:right' href=\"" + pageref + "\">More details &raquo</a></div>";
 marker.adcontent = html;
 GEvent.addListener(marker, 'click', function() {
  marker.openInfoWindowHtml(html);
 });
 return marker;
}

// create marker objects from all markers in xml file
function getMarkers(isReload)
{
 var blnReload = isReload;
 var tmpVal;
 mgr.clearMarkers();
 var markers = [];
 var blnShow, officetype, point, division, name, address, telephone, fax, email, pageref, icon, marker;
 for (var i = 0; i < markerxml.length; i++)
 {
  blnShow = false;
  division = markerxml[i].getAttribute("division");
  if(!blnShowAll)
  {
   if(catFilter[division]){blnShow = catFilter[division].Show;}
  }
  if(blnShow || blnShowAll)
  {
   point = new GLatLng(parseFloat(markerxml[i].getAttribute("lat")),
                       parseFloat(markerxml[i].getAttribute("lng")));
   officetype = GXml.value(markerxml[i].getElementsByTagName("officetype")[0]);
   name = GXml.value(markerxml[i].getElementsByTagName("officename")[0]);
   address = GXml.value(markerxml[i].getElementsByTagName("officeaddress")[0]);
   telephone = GXml.value(markerxml[i].getElementsByTagName("telephone")[0]);
   fax = GXml.value(markerxml[i].getElementsByTagName("fax")[0]);
   email = GXml.value(markerxml[i].getElementsByTagName("email")[0]);
   pageref = markerxml[i].getAttribute("fullurl");
   icon = getIcon(division);
   marker = createMarker(point, division, name, officetype, address, telephone, fax, email, pageref, icon);
   markers.push(marker);
  }
 }
 mgr.addMarkers(markers,0);
 mgr.refresh();
 // if there's only one marker then center on it and zoom in
 if(markers.length==1 && !blnReload)
 {
  map.setCenter(markers[0].getLatLng());
  map.setZoom(15);
 }
}
 
// load XML containing the marker info
function getDetails(strXMLpath)
{
 GDownloadUrl(strXMLpath, function(data) {
  var xml = GXml.parse(data);
  markerxml = xml.documentElement.getElementsByTagName("marker");
  getMarkers(false);
 });
}

// accepts tmpFilter as comma delimted list of office types
// if is 'all' then no filter is applied
// if is empty, undefined or null then total filter will be applied and no markers will show
function setFilter(tmpFilter)
{
 catFilter = {};
 blnShowAll=false;
 if(tmpFilter!=undefined && tmpFilter!="" && tmpFilter!=null)
 {
  if(tmpFilter=="all"){blnShowAll=true}
  else
  {
   var tmpArray = tmpFilter.split(',');
   if (tmpArray.length > 0)
   {
    for (var j = 0; j < tmpArray.length; j++)
    {
	 catFilter[tmpArray[j].trim()] = new FilterObject(true);
	}
   }
  }
 }
}

// accepts tmpFilter as comma delimted list of office types
function resetFilter(tmpFilter)
{
 setFilter(tmpFilter);
 getMarkers();
}

// set base properties of icons - all division / group items share
function setBaseIcon()
{
 baseIcon = new GIcon();
 baseIcon.shadow = "images/core/Maps/shadow50.png";
 baseIcon.iconSize = new GSize(34, 34);
 baseIcon.shadowSize = new GSize(37, 34);
 baseIcon.iconAnchor = new GPoint(10, 34);
 baseIcon.infoWindowAnchor = new GPoint(9, 14);
 baseIcon.infoShadowAnchor = new GPoint(9, 14);
}

function initMap()
{
 if (GBrowserIsCompatible())
 {
  map = new GMap2(document.getElementById("map_canvas"));
  map.addControl(new GLargeMapControl());
  map.enableDoubleClickZoom();
  map.enableScrollWheelZoom();
  initRegions();
  setMapCenter();
  mgr = new MarkerManager(map,{borderPadding:40});
  setBaseIcon();
  setFilter(strCategoryFilter);
  getDetails(strXMLpath);
 }
}

$(document).ready( function(){
 initMap();
 $("div[rel='Service centre']").css("display","none");
 $("div.OfficeList ul:last-child li:last-child").addClass("noborder");
});
$(window).unload( function (){
 GUnload();
});

