/*
 *  tabs.js
 *  Obsluga podstrony kontakt na www.netius.pl
 *  @author lukasz@szakul.net
 *  @date 21. paˇdziernika 2007, 21:32:31
 */
 
tabs = (function() 
{

  var _current;
  var _height;
  
  var show = function(o) 
  {
    if (typeof o == 'object') 
    {
        o.style.position   = 'static';
        o.style.visibility = 'visible';
    }
  };
  
  var hide = function(o) 
  {
    if (typeof o == 'object') 
    {
        o.style.position   = 'absolute';
        o.style.visibility = 'hidden';
    }
  };
  
  var step = function(o, m) 
  {
    switch(m)
    {
      case '+':
        o.style.height = (o.offsetHeight+4)+'px';
        break;
        
      case '-':
        o.style.height = (o.offsetHeight-4)+'px';
        break;
    }
  }
  
  var init = function(options) 
  {
    var _conteiner = document.getElementById(options.conteiner);
    
    if (_conteiner) 
    {
        var _tabs = _conteiner.getElementsByTagName('dt');
        
        if (_tabs.length) 
        {
            for (var i = 0; i < _tabs.length; i++) 
            {
              var _links = _tabs[i].getElementsByTagName('a');
              
              if (_links.length) 
              {
                  if (_links[0].href != '') 
                  {
                      var _tab = document.getElementById(findTab(_links[0].href));
                      
                      if (_tab) 
                      {
                          _links[0].className = 'plus';
                          hide(_tab);
                          
                          if (findTab(document.URL) != '')
                          {
                              if (findTab(_links[0].href) == findTab(document.URL))
                              {
                                  _links[0].className = 'minus';
                                  
                                  _height = _tab.offsetHeight;
                                  _tab.style.height = 0;
                                  
                                  hideOrExpand(_links[0], 'slide-down');
                              }
                          }
                          else
                          {
                              if (i == options.current) 
                              {
                                  _links[0].className = 'minus';
                                  
                                  _height = _tab.offsetHeight;
                                  _tab.style.height = 0;
                                  
                                  hideOrExpand(_links[0], 'slide-down');
                              } 
                           }
                           
                           _links[0].onclick = function() {
                             hideOrExpand(this);
                             return false;
                           }
                        }
                    }
                 }
              }
           }
      }
  };
  
  var hideOrExpand = function(link, mode, replace) 
  {
    if (typeof link == 'object') 
    {
        var _tab = document.getElementById(findTab(link.href));
        
        if (_tab) 
        {
            if (mode)
            {
                switch (mode)
                {
                  case 'slide-down':
                    show(_tab);
                    
                    if (typeof replace == 'object') 
                    {
                        _height = _tab.offsetHeight;
                        _tab.style.height = 0;
                    } 
                    
                    link.className = 'minus';
                  
                    if (_tab.offsetHeight < _height) 
                    {
                        step(_tab, '+');
                        
                        _current = link;
                        
                        setTimeout(function(){
                          hideOrExpand(link, 'slide-down');
                        }, 1);
                    }
                    break;
                  
                  case 'slide-up':
                    link.className = 'plus';
                    
                    if (_tab.offsetHeight > 0)
                    {
                        step(_tab, '-');
                        
                        setTimeout(function(){
                          hideOrExpand(_current, 'slide-up', replace);
                        }, 1);
                    }
                    else
                    {
                        if (typeof replace == 'object')
                        {
                            hideOrExpand(replace, 'slide-down', replace);
                            _tab.removeAttribute('style');
                            return;
                        }
                        
                        _current = null;
                    }
                    break;
                }
            }
            else
            {
                if (_current == 'undefined' || _current == null)
                {
                    hideOrExpand(link, 'slide-down');
                    return;
                }
                
                if (_current.href == link.href) {
                    return false;
                }
                
                if (typeof _current == 'object')
                {
                    hideOrExpand(_current, 'slide-up', link);
                    return;
                }
            }
        }
    }
  };
  
  var findTab = function(v) 
  {
    if (v.indexOf('#') >= 0) 
    {
        var a = v.split('#');
          
        /* zwraca ostatni element tablicy */
        return a[a.length-1];
    }
  
    return '';
  };
  
  return (function(o) 
  {
    /* ustawia zakladki */
    init(o);
  });
})();