/**
 * @fileoverview This demo is used for MarkerClusterer. It will show 100 markers
 * using MarkerClusterer and count the time to show the difference between using
 * MarkerClusterer and without MarkerClusterer.
 * @author Luke Mahe (v2 author: Xiaoxi Wu)
 */

function $(element) {
  return document.getElementById(element);
}

var speedTest = {};

speedTest.pics = null;
speedTest.map = null;
speedTest.markerClusterer = null;
speedTest.markers = [];
speedTest.infoWindow = null;

speedTest.init = function() {
  var latlng = new google.maps.LatLng(39.91, 116.38);
  var options = {
    'zoom': 2,
    'center': latlng,
    'mapTypeId': google.maps.MapTypeId.HYBRID
  };

  speedTest.map = new google.maps.Map($('map'), options);
  speedTest.genomes = genomedata.genomes;
  speedTest.samples = sampledata.samples;
  
  speedTest.infoWindow = new google.maps.InfoWindow();

  speedTest.showMarkers();
};

speedTest.showMarkers = function() {
  speedTest.markers = [];


  if (speedTest.markerClusterer) {
    speedTest.markerClusterer.clearMarkers();
  }

  var panel = $('markerlist');
  var samplepanel = $('samplelist');
  panel.innerHTML = '';

  for (var i = 0; i < speedTest.genomes.length; i++) {
    var titleText = speedTest.genomes[i].organism_name;
    if (titleText == '') {
      titleText = 'No title';
    }

    var item = document.createElement('DIV');
    var title = document.createElement('A');
    title.href = '#';
    title.className = 'genome';
    title.innerHTML = titleText;

    item.appendChild(title);
    panel.appendChild(item);


    var latLng = new google.maps.LatLng(speedTest.genomes[i].latitude,
        speedTest.genomes[i].longitude);

    var imageUrl = 'http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=' +
        'FFFFFF,008CFF,000000&ext=.png';
    var markerImage = new google.maps.MarkerImage(imageUrl,
        new google.maps.Size(24, 32));

    var marker = new google.maps.Marker({
      'position': latLng,
      'icon': markerImage
    });

    var fn = speedTest.markerClickFunction(speedTest.genomes[i], latLng);
    google.maps.event.addListener(marker, 'click', fn);
    google.maps.event.addDomListener(title, 'click', fn);
    speedTest.markers.push(marker);
  }
  for (var i = 0; i < speedTest.samples.length; i++) {
    var titleText = speedTest.samples[i].organism_name;

    if (titleText == '') {
      titleText = 'No title';
    }

    var item = document.createElement('DIV');
    var title = document.createElement('A');
    title.href = '#';
    title.className = 'sample';
    title.innerHTML = titleText;

    item.appendChild(title);
    samplepanel.appendChild(item);


    var latLng = new google.maps.LatLng(speedTest.samples[i].latitude,
        speedTest.samples[i].longitude);

    var imageUrl = 'http://genomesonline.org/cgi-bin/GOLD/bin/GOLDCards.cgi?goldstamp=' +
        speedTest.samples[i].goldstamp_id;
    var markerImage = new google.maps.MarkerImage(imageUrl,
        new google.maps.Size(24, 32));

    var marker = new google.maps.Marker({
      'position': latLng,
      'icon': markerImage
    });

    var fn = speedTest.markerClickFunction(speedTest.samples[i], latLng);
    google.maps.event.addListener(marker, 'click', fn);
    google.maps.event.addDomListener(title, 'click', fn);
    speedTest.markers.push(marker);
  }

  window.setTimeout(speedTest.time, 0);
};

speedTest.markerClickFunction = function(pic, latlng) {
  return function(e) {
    e.cancelBubble = true;
    e.returnValue = false;
    if (e.stopPropagation) {
      e.stopPropagation();
      e.preventDefault();
    }
    var title = pic.organism_name;
    var url = 'http://genomesonline.org/cgi-bin/GOLD/bin/GOLDCards.cgi?goldstamp=' +
        pic.goldstamp_id;
    var fileurl = pic.image;

    var infoHtml = '<div class="info"><h3>' + title +
      '</h3><div class="info-body">' +
      '<a href="' + url + '" target="_blank"><img src="' +
      fileurl + '" class="info-img"/></a></div>' +
      '<a href="' + url + '" target="_blank">' +
      pic.goldstamp_id +
      '</a><br/>' +
       pic.location +
      '</div></div>';

    speedTest.infoWindow.setContent(infoHtml);
    speedTest.infoWindow.setPosition(latlng);
    speedTest.infoWindow.open(speedTest.map);
  };
};

speedTest.clear = function() {
//  $('timetaken').innerHTML = 'cleaning...';
  for (var i = 0, marker; marker = speedTest.markers[i]; i++) {
    marker.setMap(null);
  }
};

speedTest.change = function() {
  speedTest.clear();
  speedTest.showMarkers();
};

speedTest.time = function() {
//  $('timetaken').innerHTML = 'timing...';
//  var start = new Date();
//  if ($('usegmm').checked) {
    speedTest.markerClusterer = new MarkerClusterer(speedTest.map, speedTest.markers);
//  } else {
//    for (var i = 0, marker; marker = speedTest.markers[i]; i++) {
//      marker.setMap(speedTest.map);
 //   }
 // }

//  var end = new Date();
//  $('timetaken').innerHTML = end - start;
};


