var massmap_active = false;
var massmap_pending;

function massmap_cancel_hide () {
  if (massmap_pending) {
    clearTimeout (massmap_pending);
    massmap_pending = null;
  }
}

function massmap_hide_floater () {
  massmap_cancel_hide ();
  $("#towns_floater").fadeOut("fast");
  massmap_active = false;
}

function massmap_schedule_hide () {
  massmap_cancel_hide ();
  massmap_pending = setTimeout (massmap_hide_floater, 50);
}

function massmap_mousemove (ev) {
  if (! massmap_active) {
    return;
  }
    
  var floater = $("#towns_floater");

  var map_width = 913;
  var map_height = 574;

  var offset = $("#towns_map").offset ();

  var floater_w = floater.width();
  var floater_h = floater.height();

  var floater_x = ev.pageX - offset.left;
  
  if (floater_x + 30 + floater_w >= map_width) {
    floater_x = floater_x - 30 - floater_w;
  } else {
    floater_x = floater_x + 30;
  }


  var floater_y = ev.pageY - offset.top - floater_h;

  if (floater_y < 40) {
    floater_y = floater_y + floater_h + 40;
  } else {
    floater_y = floater_y - 40;
  }

  var args = {};
  args.position = "absolute";
  args.left = floater_x + "px";
  args.top = floater_y + "px";
  floater.css(args);
}

function massmap_mouseover (ev) {
  var href = "" + ev.target.href;
  var town_code = href.replace (new RegExp ('.*town_code='), '');

  if (town_code >= 1 && town_code <= 351) {
    var floater = $("#towns_floater");
      
    floater.html ($("#map"+town_code).html());
    massmap_active = true;
    massmap_cancel_hide ();
    massmap_mousemove (ev);
    floater.show();
  } else {
    massmap_active = false;
  }
}

function massmap_select_town (ev) {
  var town_code = $("#town_code_selector").val();
  dbg (town_code);
  if (town_code) {
    $("#town_text").html($("#map"+town_code).html());

    $("#town_text .map_more").html("<a href='towns.php?town_code="+town_code+"'>[click for more details]</a>");
  }
}

$(function () {
    $("area").mouseover (massmap_mouseover);
    $("area").mouseout (massmap_schedule_hide);
    $("#towns_map,area").mousemove (massmap_mousemove);
    $("#town_code_selector").change (massmap_select_town);
  });

function clock_tick () {
  	$("#clock").html (Math.floor (get_msecs () / 100.0) / 10.0);
 }

$(function () {
    if ($("#clock").size()) {
	window.setInterval ('clock_tick()', 100);
    }
  });

