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

infoWindow = null;
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.Map($('#aroundthearea-map')[0], {zoom: 13,
                                                                          center: new google.maps.LatLng(51.901973,
                                                                                                         -1.154279),
                                                                          mapTypeId: google.maps.MapTypeId.HYBRID});

  markerAirfield = new google.maps.Marker({position: new google.maps.LatLng(51.913000,
                                                                            -1.140400),
                                           map: mapAroundTheArea,
                                           icon: returnIUMarkerImage('airfield.png'),
                                           shadow: returnIUMarkerShadowImage(),
                                           shape: returnIUMarkerShape(),
                                           clickable: false});

  return mapAroundTheArea;
}//function

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

    $.each(objCategoryInfo.places, function (intIndex, objPlaceInfo) {
      markerPlaceOfInterest = new google.maps.Marker({position: new google.maps.LatLng(objPlaceInfo.lat,
                                                                                       objPlaceInfo.long),
                                                      map: mapAroundTheArea,
                                                      icon: returnIUMarkerImage(strMarkerIcon),
                                                      shadow: returnIUMarkerShadowImage(),
                                                      shape: returnIUMarkerShape()});

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

      google.maps.event.addListener(mapAroundTheArea, 'click', function () {
        if (infoWindow != null) {
          infoWindow.close();
        }//if
      });

      objGlobalMarkers[strCategory].push(markerPlaceOfInterest);
    });
  });
}//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.setVisible(false);
    });
  } else {
    $(elListItem).removeClass('off');
    $(elListItem).addClass('on');

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

function markerClicked (objPlaceInfo) {
  if (infoWindow != null) {
    infoWindow.close();
  }//if

  infoWindow = new google.maps.InfoWindow({content: "<b>" + objPlaceInfo.title + "</b>\r\n" + objPlaceInfo.info,
                                           position: new google.maps.LatLng(objPlaceInfo.lat,
                                                                            objPlaceInfo.long)});

  infoWindow.open(mapAroundTheArea);
}//function
