//fce getElementsByClass normalne v DOM neni, ale ja ji mam rad, proto jsem ji nadefinoval sam
//vraci pole vsech elementu dane tridy (podobne jako getElementsByTagName...)
function getElementsByClass(s)
{
  var my_array = document.getElementsByTagName('*');
  var retvalue = new Array();
  var j = 0;
  for (var i = 0; my_array.length > i; i++)
  {
    if (RegExp(' ' + s + ' ').test(' ' + my_array[i].className + ' '))
    {
      retvalue[j++] = my_array[i];
    }
  }
  return retvalue;
}

//zavesi udalost spravne, at uz jde o IE, FX, nebo OP
function addEvent(obj, ev, fce)
{
  if (obj.addEventListener)
  {
    obj.addEventListener(ev, fce, false);
    return;
  }
  if (obj.attachEvent)
  {
    obj.attachEvent('on' + ev, fce);
    return;
  }
}

//takova pikoska; kazde funkci v javascriptu prida dalsi moznost; iterovat nad nejakym polem.
//takze je moznost ted udelat nekde UltraFunkce.Iterate(pole objektu)
//a ta fce se vykona pro kazdy objekt v poli, pricemz konkretni objekt da do parametru te fce
// Zapis dale v textu
//  (function(e)
//  {
//    prikazy (napr. alert(e.src);)
//  }).Iterate(pole);
// pak chapej jako: pro kazdy prvek v poli udelek to, ze jej docasne vloz do promenne e a vykonej prikazy...
Function.prototype.Iterate = function(collection)
{
  for (var i = 0; collection.length > i; i++) this(collection[i]);
}

// --- vlastni obsluha -------------------------

//udalost po window.onload
function mapTipsStart()
{
  //nahookuj :)) na vsechny AREA v mape a linky udalost na zobrazeni tipu
  (function(e)
  {
    addEvent(e, 'mouseover', showTip);
    addEvent(e, 'mouseout', hideTip);
  }).Iterate(document.getElementById('map').getElementsByTagName('area'));

  (function(e)
  {
    addEvent(e, 'mouseover', showTip);
    addEvent(e, 'mouseout', hideTip);
  }).Iterate(document.getElementById('maplinks').getElementsByTagName('a'));
}

//zobrazi tip
function showTip(e)
{
  //korekce pro IE
  if (!e) e = window.event;
  //zjisti nejdrive X a Y souradnice udalosti, IE vs. OP vs. FX
  //pak nastav X, Y pozici tipu
  //jde o to, aby se skutecne nasla prava souradnice pri danem zobrazeni v jakemkoli prohlizeci, nikoli predpocitana...
  var mx = e.pageX ? e.pageX : e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
  var my = e.pageY ? e.pageY : e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
  //vem ID objektu, na kterem doslo k udalosti, IE vs. OP vs FX
  //vem posledni dva znaky identifikujici zem a dopln je do maptip_XX, ten objekt pak dej do promenne tip
  var src = e.srcElement ? e.srcElement : e.target;
  var tip = document.getElementById(src.getAttribute('id').replace(/map.+_/i, 'maptip_'));
  tip.style.left = mx + 3 + 'px';
  tip.style.top = my + 3 + 'px';
  tip.style.display = 'block';
}

function hideTip()
{
  //skryje _vsechny_ tipy
  (function(e)
  {
    e.style.display = 'none';
  }).Iterate(getElementsByClass('maptip'));
}

//zachytavat udalosti
//onload zavesit inicializaci
if (window.captureEvents) window.captureEvents(Event.LOAD | Event.MOUSEOUT | Event.MOUSEOVER);
addEvent(window, 'load', mapTipsStart);

