  function findPos(obj)
  {
    var curleft = curtop = 0;
    if (obj.offsetParent)
    {
      curleft = obj.offsetLeft
      curtop = obj.offsetTop
      while (obj = obj.offsetParent)
      {
        curleft += obj.offsetLeft
        curtop += obj.offsetTop
      }
    }
    return [curleft,curtop];
  }

  function set_focus()
  {
    if (focused_item)
    {
      var _item = document.getElementById(focused_item);
      if (_item)
      { 
        _item.focus();
        document.body.scrollTop = findPos(_item)[1] - focused_delta;
      }
    }
  }
  
  function set_visible(item_id)
  {
    var _item = document.getElementById('div_'+item_id);
    if (_item)
    {
      _item.style.overflow = 'visible';
      _item.style.width = 'auto';
      _item.style.height = 'auto';
    }
    var _item = document.getElementById(item_id);
    if (_item)
    {
      _item.style.position = 'static';
      _item.style.visibility = '';
      _item.style.width = 'auto';
      _item.style.height = 'auto';
    }
  }
  
  function set_hidden(item_id)
  {
    var _item = document.getElementById(item_id);
    if (_item)
    {
      _item.style.visibility = 'hidden';
      _item.style.position = 'absolute';
      _item.style.width = '0px';
      _item.style.height = '0px';
    }
    var _item = document.getElementById('div_'+item_id);
    if (_item)
    {
      _item.style.overflow = 'hidden';
      _item.style.width = '0px';
      _item.style.height = '0px';
    }
  }
  
  function addRow(table, attribs, index)
  {
    var _table = document.getElementById(table);
    if (_table)
    {
      if (index < 0)
        index = _table.rows.length + 1 + index;
      var _row = _table.insertRow(index);
      if (attribs['class'])
      {
        if ((table_row_counter[table]&1 == 1))
        {
          attribs['class'] = attribs['class'].replace(/____evenodd____/, '_odd');
        }
        else
        {
          attribs['class'] = attribs['class'].replace(/____evenodd____/, '_even');
        }
      }
      _row.className = attribs['class'];
      for (var _attrib_name in attribs)
        _row.setAttribute(_attrib_name, attribs[_attrib_name]);
      return _row;
    }
    return null;
  }
  function addCell(row, attribs, text, data_counter, counters)
  {
    var _cell = row.insertCell(-1);
    for (var _attrib_name in attribs)
    {
      if (_attrib_name == 'colspan')
      {
        _cell.colSpan = attribs[_attrib_name];
      }
      else if (_attrib_name == 'rowspan')
      {
        _cell.rowSpan = attribs[_attrib_name];
      }
      else
        _cell.setAttribute(_attrib_name, attribs[_attrib_name]);
    }
    text = text.replace(/____data_counter____/g, data_counter);
    for (_counter_name in counters)
    {
      _regexp = new RegExp(_counter_name, 'g');
      text = text.replace(_regexp, counters[_counter_name]);
    }    
    _cell.innerHTML = text;
  }
  
  function increaseCounters(counters)
  {
    for (_counter_name in counters)
    {
      counters[_counter_name]++;
    }
    
    return counters;
  }
  
  var table_row_counter = new Array();
  var table_counters = new Array();

  var sActualBrowserItemId = null;

  function najdiSoubor(sItemId, sType, sDirectory)
  {
    sActualBrowserItemId = sItemId;
    if (sType) 
      sType = '&Type=' + sType;
    else
      sType = '';
    
	  window.open('thirdparty/FCKeditor/editor/filemanager/browser/default/browser.html?Connector=../../connectors/php/connector.php' + sType + '&CurrentFolder=' + sDirectory, 'FileBrowseWindow', 'width=800,height=600');
  }

  function SetUrl(url, width, height, alt)
  {
    var item = document.getElementById(sActualBrowserItemId);
    if (item)
      item.value = url;
    sActualBrowserItemId = null;
  }
  
  var events = new Array ();
  
  function array_keys(pole)
  {
    var _res = new Array();    
    for (var _key in pole)
      _res[_res.length] = _key;    
    return _res;
  }
  
  function array_indexOf(pole, hodnota)
  {
    var _res = -1;
    var _i = 0;    
    for (var _key in pole)
    {
      if (pole[_key] == hodnota)
      {
        _res = _i;
        break;
      }
      _i ++;
    }
    return _res;
  }  
  
  function tabsheetEventFunction (parameter)
  {
    if (parameter && this.sheets)
    {
      if (parameter == '__next__')
      {
        var _values = array_keys(this.sheets);
        var i = array_indexOf(_values, this.current_value);
         parameter = i + 1 < _values.length ? _values[i+1] : _values[0];
      }      

      _current_sheet = document.getElementById(this.sheets[this.current_value]);
      _new_sheet = document.getElementById(this.sheets[parameter]);
      
      if (_current_sheet && _new_sheet)
      {
        set_hidden (this.sheets[this.current_value]);
        set_visible (this.sheets[parameter]);
        this.current_value = parameter;
      }    
    }
  }
  
  function tabsheetEvent (sheets, current_value)
  {
    this.sheets = sheets;
    this.current_value = current_value;
    this.run = tabsheetEventFunction
  }
  
  function add_event(event_name, event)
  {
    if (events[event_name])
    {
      alert('Event "' + event_name + '" is already defined.');
    }
    else
    {
      events[event_name] = event;
    }    
  }
  
  function trigger_event(event_name, parameters)
  {
    if (events[event_name])
    {
      var _event = events[event_name];
      if (_event.run)
      {
        _event.run(parameters);
      }
    }    
  }