objGlobalMarkers = {
  pubs: [],
  supermarkets: [],
  takeaways: [],
  shopping: [],
  transport: [],
  bnbs: []
};

mapAroundTheArea = null;

$(function () {
  mapAroundTheArea = initialiseAroundTheAreaMap();

  objPlacesOfInterest = {
    pubs: {
      icon: 'pub.png',
      places: [
        {title: 'The Black Bull', lat: 51.895716, long: -1.120178, info: '<p>OX26 5DG</p>'},
        {title: 'The Red Lion', lat: 51.929828, long: -1.116645, info: '<p>OX27 9AG</p>'},
        {title: 'The Butchers Arms', lat: 51.953087, long: -1.122365, info: '<p>OX27 8EB</p>'},
        {title: 'The Greyhound Inn (Thai)', lat: 51.900351, long: -1.066014, info: '<p>OX27 0HA</p>'},
        {title: 'The Trigger Pond', lat: 51.923634, long: -1.187460, info: '<p>OX27 7NE</p>'}
      ]},
    supermarkets: {
      icon: 'supermarket.png',
      places: [
        {title: 'Tesco (with Petrol Station)', lat: 51.893296, long: -1.158606, info: '<p>OX26 6WA</p>'},
        {title: 'Tesco Metro', lat: 51.898486, long: -1.151969, info: '<p>OX26 6JW</p>'},
        {title: 'Tesco Express', lat: 51.912483, long: -1.150550, info: '<p>OX26 3YQ</p>'},
        {title: 'Tesco Express', lat: 51.908403, long: -1.138026, info: '<p>OX26 4FR</p>'},
        {title: 'Tesco Express', lat: 51.901161, long: -1.174264, info: '<p>OX26 2GJ</p>'},
        {title: 'Tesco', lat: 51.891314, long: -1.138333, info: '<p>OX26 6XX</p>'},
        {title: 'Co-Operative Food', lat: 51.907145, long: -1.150336, info: '<p>OX26 3AH</p>'}
      ]},
    takeaways: {
      icon: 'takeaway.png',
      places: [
        {title: 'Wing On (Chinese)', lat: 51.908284, long: -1.138732, info: '<p>OX26 4FR</p>'},
        {title: 'Taj Mahal (Indian)', lat: 51.896542, long: -1.152518, info: '<p>OX26 6AW</p>'},
        {title: 'Domino\'s Pizza', lat: 51.906575, long: -1.150151, info: '<p>OX26 4HB</p>'}
      ]},
    shopping: {
      icon: 'shopping.png',
      places: [
        {title: 'Bicester Village', lat: 51.891772, long: -1.155563, info: '<p>OX26 6WD</p>'}
      ]},
    transport: {
      icon: 'transport.png',
      places: [
        {title: 'Bicester North Train Station', lat: 51.903491, long: -1.150377, info: '<p>OX26 6EF</p>'},
        {title: 'Bicester Town Train Station', lat: 51.893493, long: -1.148065, info: '<p>OX26 6HU</p>'},
        {title: 'Bus Station', lat: 51.898450, long: -1.152709, info: '<p></p>'}
      ]},
    bnbs: {
      icon: 'bnb.png',
      places: [
        {title: 'Watts Lodge Bed & Breakfast', lat: 51.905533, long: -1.151156, info: '<p>OX26 4EQ</p>\
          <p>01869 241930</p>'},
        {title: 'Ava House Bed & Breakfast', lat: 51.906802, long: -1.145904, info: '<p>OX26 4TR</p>\
          <p>01869 345958</p>'},
        {title: 'Chapter & Verse Guest House', lat: 51.895636, long: -1.153157, info: '<p>OX26 6AU</p>\
          <p>01869 245760</p>'},
        {title: 'Manor Farm', lat: 51.922778, long: -1.064005, info: '<p>OX27 9BB</p>\
          <p>01869 277212</p>'},
        {title: 'The Old School House', lat: 51.930413, long: -1.113345, info: '<p>OX27 9BJ</p>\
          <p>01869 277371</p>'},
        {title: 'West Farm', lat: 51.927984, long: -1.116172, info: '<p>OX27 9AS</p>\
          <p>01869 278344</p>'}
      ]}
  };

  addAllPlacesOfInterest(objPlacesOfInterest);

  $('ul#legend li').css('cursor', 'pointer').click(function() {toggleCategoryDisplay(this);});
});

function initialiseAroundTheAreaMap () {
  var mapAroundTheArea = new google.maps.Map2($('#aroundthearea-map')[0]);
  mapAroundTheArea.setCenter(new google.maps.LatLng(51.901973,
                                                    -1.154279),
                                                    13);
  mapAroundTheArea.setMapType(G_HYBRID_MAP);
  mapAroundTheArea.setUIToDefault();

  markerAirfield = returnIUMarkerIcon('airfield.png');

  mapAroundTheArea.addOverlay(new google.maps.Marker(new google.maps.LatLng(51.913000,
                                                                            -1.140400),
                                                     {icon: markerAirfield,
                                                      clickable: false}));

  return mapAroundTheArea;
}//function

function addAllPlacesOfInterest (objPlacesOfInterest) {
  $.each(objPlacesOfInterest, function (strCategory, objCategoryInfo) {
    strMarkerIcon = objCategoryInfo.icon;

    $.each(objCategoryInfo.places, function (intIndex, objPlaceInfo) {
      markerPlaceOfInterest = returnPlaceOfInterestMarker(objPlaceInfo.lat, objPlaceInfo.long, strMarkerIcon);
      mapAroundTheArea.addOverlay(markerPlaceOfInterest);

      google.maps.Event.addListener(markerPlaceOfInterest, 'click', function () {
        markerClicked(objPlaceInfo);
      });

      objGlobalMarkers[strCategory].push(markerPlaceOfInterest);
    });
  });
}//function

function returnPlaceOfInterestMarker (decLat, decLong, strMarkerImage) {
  return new google.maps.Marker(new google.maps.LatLng(decLat,
                                                       decLong),
                                {icon: returnIUMarkerIcon(strMarkerImage)});
}//function

function toggleCategoryDisplay (elListItem) {
  strCategory = $(elListItem).attr('id').substring(5);

  if ($(elListItem).hasClass('on')) {
    $(elListItem).removeClass('on');
    $(elListItem).addClass('off');

    $.each(objGlobalMarkers[strCategory], function (intIndex, objMarker) {
      objMarker.hide();
    });
  } else {
    $(elListItem).removeClass('off');
    $(elListItem).addClass('on');

    $.each(objGlobalMarkers[strCategory], function (intIndex, objMarker) {
      objMarker.show();
    });
  }//if
}//function

function markerClicked (objPlaceInfo) {
  mapAroundTheArea.openInfoWindowHtml(new google.maps.LatLng(objPlaceInfo.lat, objPlaceInfo.long), "<b>" + objPlaceInfo.title + "</b>\r\n" + objPlaceInfo.info);
}//function