Event.addBehavior({
  '#thumbnails': Controls.ChangeImage
});

function loadBalloon() {
  window.balloonTimeout = (function() {
    window.balloonTimeout = null;
    $$('.balloon').invoke('remove');
    new Ajax.Request(this.href, {method: 'get'});
  }).bind(this).delay(0.5);
}

function prepareMap() {
  $R(-1, 2).each(function(floor_number) {
    var floor = $("floor"+floor_number);
    if (floor) {
      var fixed = floor.hasClassName('fixed');
      cvi_map.add(floor, {nofade: true});
      var map = document.getElementsByName(floor.mapname)[0];
      $A(map.areas).each(function(area) {
        area = $(area);
        if (fixed) {
          area.onmouseover = null;
          area.onmouseout = null;
          area.observe('click', function(e) { e.stop(); });
        } else {
          area.observe('mouseover', loadBalloon);
          area.observe('mouseout', function() { if (window.balloonTimeout) window.clearTimeout(window.balloonTimeout); });
        }
      });
    }
  });
}

function prepareMenuForms() {
  $$('.coloca_desplegable_planta form').each(function(form) {
    form.select('input[type=submit]').invoke('remove');
    form.select('select').invoke('observe', 'change', function() { this.form.submit(); });
  });
}

Event.observe(window, 'load', prepareMap);
Event.observe(document, 'dom:loaded', prepareMenuForms);

function sum(array) {
  return array.inject(0, function(total, elem) { return total + parseInt(elem, 10); });
}

function markLocal(floor, local, content) {
  local = 'local_' + floor + '_' + local;
  floor = 'floor' + floor;
  extAreaOver(floor, local);
  var pos_map = $(floor).cumulativeOffset();
  var coords = $(local).coords.split(',');
  coords.pop();
  coords.pop();
  coords = coords.partition(function(elem, pos) {return pos % 2 == 0;});
  var pos_local = {left: sum(coords[0]) / coords[0].length, top: sum(coords[1]) / coords[1].length};
  var absolute = new Element('div', {className: 'balloon'});
  document.body.appendChild(absolute);
  absolute.setStyle({position: 'absolute',
    top: (pos_map.top + pos_local.top - absolute.getHeight() + 7) + 'px',
    left: (pos_map.left + pos_local.left - 27) + 'px'
  }).update(new Element('div', {className: 'balloon_inner'}).update(content));
}
