var maps = [];

function resizewindow() {
  var browserheight = $(window).height();
  $('#page').height(browserheight - $('#header').height());
  $('#tabscontent').height($('#page').height() - $('#tabsheader').height() - 2);
  $('#panel').height($('#page').height() - $('#tabsheader').height() - 2);
  var browserwidth = $(window).width();
  if (browserwidth > 820) {
    $('#ad-tr').show();
  } else {
    $('#ad-tr').hide();
  }
  for(key in maps) {
    google.maps.event.trigger(maps[key], 'resize');
  }
}

function map_fill_markers(jq, caves, main) {
  var map = jq.data('activemap');
  if (jq.data('markers')) {
    for (i in jq.data('markers')) {
      jq.data('markers')[i].setMap(null);
    }
    jq.data('markers').length = 0;
  } else {
    jq.data('markers', []);
  }
  var i;
  var icons = [];
  if (caves) {
    for (i in caves) {
      icons[caves[i]] = new Number(i)+1;
    }
    caves = caves.join(',');
  }

  $.getJSON('/ajax/coord.php', { caves: (main ? 'all' : caves) }, function(data) {
    var bounds = new google.maps.LatLngBounds();
    var infowindow = new google.maps.InfoWindow();
    for (i in data.coords) {
      if (!data.coords[i].lat || !data.coords[i].lon) continue;
      var pos = new google.maps.LatLng(data.coords[i].lat, data.coords[i].lon);
      bounds.extend(pos);
      var extra;
      if (data.coords[i].coord_name) {
        extra = data.coords[i].coord_type + ': ' + data.coords[i].coord_name;
      } else {
        extra = data.coords[i].coord_type;
      }
      var marker = new google.maps.Marker({
        position: pos,
        icon: (caves ? '/img/icon-' + icons[data.coords[i].id_cave] + '-dot.png' : '/img/icon-small-red.png'),
        html:
          '<div class="infowin-html"><h3>' + 
          '<a href="cave.php?id=' + data.coords[i].id_cave + '">' +
          data.coords[i].cave_name + '</a></h3>' + extra + '</div>'
      });
      marker.setTitle(data.coords[i].cave_name);
      if (!main) {
        marker.setMap(map);
      }
      jq.data('markers').push(marker);
      google.maps.event.addListener(marker, 'click', function(){
        infowindow.setContent(this.html);
        infowindow.open(map, this);
        /* this could add more than one trigger function! */
        clicks_to_cave($('.infowin-html a'));
      });
      /* why doesn't this work?: */
/*
      google.maps.event.addListener(infowindow, 'domready', function(){
        clicks_to_cave($(map.getDiv()).find('.infowin-html a'));
      });
*/
    }
    if (bounds.isEmpty()) {
	bounds.extend(new google.maps.LatLng(36, -9));
	bounds.extend(new google.maps.LatLng(43, 4));
    }
    map.fitBounds(bounds);  
    if (main) {
      var mcoptions = {imagePath: '/img/cloud', gridSize: 30, maxZoom: 13, zoomOnClick: false };
      var mc = new MarkerClusterer(map, jq.data('markers'), mcoptions);
    }
  });
}

function new_map(container) {
  var center = new google.maps.LatLng(40.33, -3.77);
  var options = {
//    'zoom': 5,
//    'center': center,
    'scaleControl': true,
    'mapTypeId': google.maps.MapTypeId.TERRAIN
  };
  var map = new google.maps.Map(container, options);
  maps.push(map);
  return map;
}

function change_page(number, fill) {
  $('#tabsheader li').removeClass('activetab');
  $('#tabsheader li').eq(number).addClass('activetab');
  $('#tabscontent').children().hide();
  $('#tabscontent').children().eq(number).show();
  resizewindow();
  var id = $('#tabscontent').children().eq(number).children('.map');
  if (!id.data('activemap')) {
    var map = new_map(id.get(0));
    id.data('activemap',map);
    if (fill) {
      if (number==0) {
        map_fill_markers(id, null, true);
      } else if (number==1) {
        var caves = search_to_array($('#results a'));
        map_fill_markers(id, caves, false);
      } else if (number==2) {
        var i = $('#cavetitle').attr('href').split('=').pop();
        map_fill_markers(id, [i], false);
      }
    }
  }
}

function show_cave(id) {
  $.get("/ajax/cave.php", { "id": id },
    function(data){
      $('#cave').html(data);
      $('#cavetitle').html($('#cave span:first').html());
      $('#cavetitle').attr('href', 'cave.php?id=' + id);
      $('#cavetitle').show();
      $('.cave-map').show();
      change_page(2,false);
      map_fill_markers($('.cave-map'), [id], false);
    });
  return false;
}

function new_cave() {
  $.get("/ajax/edit.php",
    function(data){
      $('#cave').html(data);
      $('#cavetitle').html('Nueva cavidad');
      $('#cavetitle').show();
      $('.cave-map').hide();
      change_page(2,false);
    });
  return false;
}

function clicks_to_cave(jq) {
  jq.click(function(){
    var id = $(this).attr('href').split('=').pop();
    show_cave(id);
    return false;
  });
}

function search_to_array(jq) {
  var caves = [];
  jq.each(function(){
    var id = $(this).attr('href').split('=').pop();
    caves.push(id);
  });
  return caves;
}

$(document).ready(function() {
  $('#planeta-espeleo a').attr('target', '_blank');
  clicks_to_cave($('#results a'));
  resizewindow();
  $(window).bind("resize", resizewindow);
  var idx = $('#tabsheader li').index($('li.activetab'));
  change_page(idx,true);
  $('#tabsheader a').click(function(){
    var idx = $('#tabsheader li').index($(this).parent());
    change_page(idx,true);
    return false;
  });
  $('#a-login').click(function(){
    $('#dialog-outer').show();
    $('#dialog-login').show();
    return false;
  });
  $('#a-help').click(function(){
    $('#dialog-outer').show();
    $('#help').show();
    return false;
  });
  $('.close-icon').click(function(){
    $('#dialog-outer').hide();
    $('#dialog-login').hide();
    $('#help').hide();
  });
  $('#a-logout').click(function(){
    $.get('/ajax/logout.php');
    $('.auth-yes').hide();
    $('.auth-no').show();
    return false;
  });
  $('#form-search').submit(function() {
    change_page(1,false);
    $.get("/ajax/search.php", { q: $('#input-q').val() },
      function(data){
        $('#results').html(data);
        clicks_to_cave($('#results a'));
        var caves = search_to_array($('#results a'));
        map_fill_markers($('.search-map'), caves, false);
      });
    return false;
  });
  $('#hck-new').click(function() {
    new_cave();
  });
});

