var belfastMap;
var belfastMarker;
var belfastInfo;
var belfastInfoWithDirectionsTo;
var belfastInfoWithDirectionsFrom;

var dublinMap;
var dublinMarker;
var dublinInfo;
var dublinInfoWithDirectionsTo;
var dublinInfoWithDirectionsFrom;

/*
 * Maps functions.
 */

function directionsFromHere(map)
{
  eval(map + 'Info.close();');
  eval(map + 'InfoWithDirectionsTo.close();');
  eval(map + 'InfoWithDirectionsFrom.open(' + map + 'Map, ' + map + 'Marker);');
}

function directionsToHere(map)
{
  eval(map + 'Info.close();');
  eval(map + 'InfoWithDirectionsFrom.close();');
  eval(map + 'InfoWithDirectionsTo.open(' + map + 'Map, ' + map + 'Marker);');
}

$(document).ready(function() {

  /*
   * Validate contact form.
   */

  $('form#contact-form').validate({

    rules: {
      name: {
        required: true
      },
      email: {
        required: true,
        email: true
      },
      enquiry: {
        required: true
      }
    },

    errorElement: 'span',
    errorClass: 'invalid',
    errorPlacement: function(error, element) {
      error.appendTo(element.parents('div.field').find('label:first'));
    }

  });

  /*
   * Initialize Belfast map.
   */

  var belfastLatlng = new google.maps.LatLng(54.588707, -5.92522);

  var belfastOptions = {
    zoom: 14,
    center: belfastLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  belfastMap = new google.maps.Map(document.getElementById('belfast-map-inner'), belfastOptions);

  var belfastContent = '<strong>Tibus<\/strong><br \/>Havelock House<br \/>Ormeau Road<br \/>Belfast, BT7 1EB';

  belfastInfo = new google.maps.InfoWindow({
    content: belfastContent + '<br>Directions: <a href="./" onclick="directionsToHere(\'belfast\'); return false">To here<\/a> - <a href="./" onclick="directionsFromHere(\'belfast\'); return false">From here<\/a>'
  });

  belfastInfoWithDirectionsTo = new google.maps.InfoWindow({
    content: belfastContent + '<br>Directions: <b>To here<\/b> - <a href="./" onclick="directionsFromHere(\'belfast\'); return false">From here<\/a>' +
       '<br>Start address:<form action="http://maps.google.com/maps" method="get" target="_blank">' +
       '<input type="text" size="40" MAXLENGTH=40 name="saddr" id="saddr" value="" /><br>' +
       '<input value="Get Directions" type="submit">' +
       '<input type="hidden" name="daddr" value="' + belfastLatlng.lat() + ',' + belfastLatlng.lng() +
       '"/>'
  });

  belfastInfoWithDirectionsFrom = new google.maps.InfoWindow({
    content: belfastContent + '<br>Directions: <a href="./" onclick="directionsToHere(\'belfast\'); return false">To here<\/a> - <b>From here<\/b>' +
       '<br>End address:<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
       '<input type="text" size="40" MAXLENGTH=40 name="daddr" id="daddr" value="" /><br>' +
       '<input value="Get Directions" type="submit">' +
       '<input type="hidden" name="saddr" value="' + belfastLatlng.lat() + ',' + belfastLatlng.lng() +
       '"/>'
  });

  belfastMarker = new google.maps.Marker({
    position: belfastLatlng,
    map: belfastMap,
    title: "Tibus Belfast"
  });

  google.maps.event.addListener(belfastMarker, 'click', function() {
    belfastInfo.open(belfastMap, belfastMarker);
  });

  /*
   * Initialize Dublin map.
   */

  var dublinLatlng = new google.maps.LatLng(53.348566, -6.232054);

  var dublinOptions = {
    zoom: 16,
    center: dublinLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  dublinMap = new google.maps.Map(document.getElementById('dublin-map-inner'), dublinOptions);

  dublinMarker = new google.maps.Marker({
    position: dublinLatlng,
    map: dublinMap,
    title: "Tibus Dublin"
  });

  var dublinContent = '<strong>Tibus Dublin<\/strong><br \/>The Stone Building, <br \/>15 Fleming Place, <br \/>Dublin 4,<br \/>Ireland';

  dublinInfo = new google.maps.InfoWindow({
    content: dublinContent + '<br>Directions: <a href="./" onclick="directionsToHere(\'dublin\'); return false">To here<\/a> - <a href="./" onclick="directionsFromHere(\'dublin\'); return false">From here<\/a>'
  });

  dublinInfoWithDirectionsTo = new google.maps.InfoWindow({
    content: dublinContent + '<br>Directions: <b>To here<\/b> - <a href="./" onclick="directionsFromHere(\'dublin\'); return false">From here<\/a>' +
       '<br>Start address:<form action="http://maps.google.com/maps" method="get" target="_blank">' +
       '<input type="text" size="40" MAXLENGTH=40 name="saddr" id="saddr" value="" /><br>' +
       '<input value="Get Directions" type="submit">' +
       '<input type="hidden" name="daddr" value="' + dublinLatlng.lat() + ',' + dublinLatlng.lng() +
       '"/>'
  });

  dublinInfoWithDirectionsFrom = new google.maps.InfoWindow({
    content: dublinContent + '<br>Directions: <a href="./" onclick="directionsToHere(\'dublin\'); return false">To here<\/a> - <b>From here<\/b>' +
       '<br>End address:<form action="http://maps.google.com/maps" method="get"" target="_blank">' +
       '<input type="text" size="40" MAXLENGTH=40 name="daddr" id="daddr" value="" /><br>' +
       '<input value="Get Directions" type="submit">' +
       '<input type="hidden" name="saddr" value="' + dublinLatlng.lat() + ',' + dublinLatlng.lng() +
       '"/>'
  });

  google.maps.event.addListener(dublinMarker, 'click', function() {
    dublinInfo.open(dublinMap, dublinMarker);
  });

  /*
   * Handle 'View on Google Maps' clicks.
   */

  $('div#addresses p.view-map a').click(function() {

    map = $(this).attr('href');

    $('div#addresses div.address div.heading p.view-map a').html('View on Google Maps');

    if ($('div#contact-form-and-maps div#' + map).css('position') != 'absolute') {

      $('div#contact-form-and-maps div#' + map)
        .css('position', 'absolute')
        .css('left', '-9999em');

      $('div#contact-form-and-maps form#contact-form').show();

    } else {

      $(this).html('View Contact Form');

      if ($('div#contact-form-and-maps form#contact-form').is(':visible')) {

        $('div#contact-form-and-maps form#contact-form').fadeOut(function() {
          $('div#contact-form-and-maps div.map#' + map)
            .css('position', 'static')
            .css('left', '0')
            .fadeIn();
        });

      } else {

        $('div#contact-form-and-maps div.map')
          .css('position', 'absolute')
          .css('left', '-9999em');

        $('div#contact-form-and-maps div.map#' + map)
          .css('position', 'static')
          .css('left', '0')
          .fadeIn();

      }

    }

    return false;

  });

  /*
   * Handle 'Close Map' clicks.
   */

  $('div#contact-form-and-maps div.map p.close a').click(function() {

    $('div#contact-form-and-maps div.map')
      .css('position', 'absolute')
      .css('left', '-9999em');

    $('div#contact-form-and-maps form#contact-form').show();

    $('div#addresses div.address div.heading p.view-map a').html('View on Google Maps');

    return false;

  });

});
