Array.prototype.in_array = function(needle) {
    for(var i=0; i < this.length; i++)
    {
      if(this[ i] === needle)
      {
        return true;
      }
    }

    return false;
  }

function getElementsByClassName(name)
{
  var all_objects;
  var class_objects = new Array();
  var j = 0;
  var test_string;

  if(document.all)
  {
    all_objects=document.all;
  }
  else if(document.getElementsByTagName)
  {
    all_objects=document.getElementsByTagName("*");
  }

  for(i = 0; i < all_objects.length; i++)
  {
    if(all_objects[i].className.indexOf(name)!=-1)
    {
      test_string = "," + all_objects[i].className.split(" ").join(",") + ",";

      if(test_string.indexOf("," + name + ",")!=-1)
      {
        class_objects[j] = all_objects[i];
        j++;
      }
    }
  }

  return class_objects;
}

function map_view_actions_by_category(category, view)
{
  // "Sichtbarkeit" für jeden Eintrag in entsprechender Kategorie verarbeiten
  for(var i = 0; i < eval('map_category_' + category).length; i++)
  {
    // "Sichtbarkeit" für den Eintrag nur dann setzen, wenn die Zeitspanne, in der sich dieser befindet
    // angezeigt werden soll
    if(
      (map_period_1.in_array(eval('map_category_' + category)[i]) && map_period_1_display) ||
      (map_period_2.in_array(eval('map_category_' + category)[i]) && map_period_2_display) ||
      (map_period_3.in_array(eval('map_category_' + category)[i]) && map_period_3_display))
    {
      // ist die Sichtbarkeit auf "sichtbar" gesetzt, so wird dieser unmittelbar als "sichtbar" dargestellt
      if(view == true)
      {
        document.getElementById('entry_' + eval('map_category_' + category)[i]).style.display = 'block';
      }
      // wird die Sichtbarkeit auf "unsichtbar" gesetzt, so muss noch überprüft werden, ob der Eintrag noch in
      // anderen sichtbaren Kategorien auftaucht
      else
      {
        pass = false;

        for(var j = 0; j < map_categories.length; j++)
        {
          // nur zu behandeln, wenn es sich nicht um die aktuell gewählte Kategorie handelt
          if(map_categories[j] != category)
          {
            // befindet sich der Eintrag noch in einer weiteren Kategorie, die auf "sichtbar" gesetzt ist,
            // so wird dieser übersprungen
            if(
              eval('map_category_' + map_categories[j]).in_array(eval('map_category_' + category)[i]) &&
              eval('map_category_' + map_categories[j] + '_display'))
            {
              pass = true;
              break;
            }
          }
        }

        if(pass == false)
        {
          document.getElementById('entry_' + eval('map_category_' + category)[i]).style.display = 'none';
        }
      }
    }
  }

  // Kategorie auf neuen "Sichtbarkeits"-Status setzen
  eval('map_category_' + category + '_display = view');

  var entries = getElementsByClassName('category_' + category);

  for(var i = 0; i < entries.length; i++)
  {
    // Verwendung der letzten Stelle des R-, G-, B-Wertes als Zustandsautomat, wobei die letzte Stelle
    // des G-Wertes hier den Status der Kategorie kennzeichnet
    if(view)
    {
      if(entries[i].style.color == '#AAABAA' || entries[i].style.color == 'rgb(170, 171, 170)')
      {
        entries[i].style.color = '#000000';
      }
      else if(entries[i].style.color == '#AAABAB' || entries[i].style.color == 'rgb(170, 171, 171)')
      {
        entries[i].style.color = '#AAAAAB';
      }
    }
    else
    {
      if(entries[i].style.color == '#AAAAAB' || entries[i].style.color == 'rgb(170, 170, 171)')
      {
        entries[i].style.color = '#AAABAB';
      }
      else if(entries[i].style.color == '#AAABAB' || entries[i].style.color == 'rgb(170, 171, 171)')
      {
        // keine Änderung
      }
      else
      {
        entries[i].style.color = '#AAABAA';
      }
    }
  }
}

function map_view_actions_by_period(period, view)
{
  // "Sichtbarkeit" für jeden Eintrag in entsprechender Zeitspanne verarbeiten
  for(var i = 0; i < eval('map_period_' + period).length; i++)
  {
    pass = true;

    // "Sichtbarkeit" für den Eintrag nur dann setzen, wenn eine Kategorie, in der sich dieser befindet
    // angezeigt werden soll ...
    for(var j = 0; j < map_categories.length; j++)
    {
      if(
        eval('map_category_' + map_categories[j]).in_array(eval('map_period_' + period)[i]) &&
        eval('map_category_' + map_categories[j] + '_display'))
      {
        pass = false;
        break;
      }
    }

    // ... und sich dieser in keiner weiteren Zeitspanne befindet, die angezeigt werden soll
    if(pass == false)
    {
      if((map_period_1.in_array(eval('map_period_' + period)[i]) && map_period_1_display && period != 1) ||
        (map_period_2.in_array(eval('map_period_' + period)[i]) && map_period_2_display && period != 2) ||
        (map_period_3.in_array(eval('map_period_' + period)[i]) && map_period_3_display && period != 3))
      {
        pass = true;
      }
    }

    if(pass == false)
    {
      if(view == true)
      {
        document.getElementById('entry_' + eval('map_period_' + period)[i]).style.display = 'block';
      }
      else
      {
        document.getElementById('entry_' + eval('map_period_' + period)[i]).style.display = 'none';
      }
    }
  }

  // Zeitspanne auf neuen "Sichtbarkeits"-Status setzen
  eval('map_period_' + period + '_display = view');

  var entries = getElementsByClassName('period_' + period);

  for(var i = 0; i < entries.length; i++)
  {
    // Verwendung der letzten Stelle des R-, G-, B-Wertes als Zustandsautomat, wobei die letzte Stelle
    // des B-Wertes hier den Status der Zeitspanne kennzeichnet
    if(view)
    {
      if(entries[i].style.color == '#AAAAAB' || entries[i].style.color == 'rgb(170, 170, 171)')
      {
        entries[i].style.color = '#000000';
      }
      else if(entries[i].style.color == '#AAABAB' || entries[i].style.color == 'rgb(170, 171, 171)')
      {
        entries[i].style.color = '#AAABAA';
      }
    }
    else
    {
      if(entries[i].style.color == '#AAABAA' || entries[i].style.color == 'rgb(170, 171, 170)')
      {
        entries[i].style.color = '#AAABAB';
      }
      else if(entries[i].style.color == '#AAABAB' || entries[i].style.color == 'rgb(170, 171, 171)')
      {
        // keine Änderung
      }
      else
      {
        entries[i].style.color = '#AAAAAB';
      }
    }
  }
}

function view_entry_info(entry)
{
  document.getElementById('entry_info_' + entry).style.display = 'block';
  
  x_pos = document.getElementById('entry_' + entry).style.marginLeft;
  y_pos = document.getElementById('entry_' + entry).style.marginTop;
  
  document.getElementById('entry_info_' + entry).style.marginLeft = (parseInt(x_pos.substr(0, x_pos.length - 2)) + 16) + 'px';
  document.getElementById('entry_info_' + entry).style.marginTop = (parseInt(y_pos.substr(0, y_pos.length - 2)) - 4) + 'px';
}

function hide_entry_info(entry)
{
  document.getElementById('entry_info_' + entry).style.display = 'none';
}
