/**
 * @author Sławomir Kokłowski {@link http://www.kurshtml.boo.pl}
 * @copyright NIE usuwaj tego komentarza! (Do NOT remove this comment!)
 */

function Menu(id, style, otworz, wysun, czasRozwin, czasZwin, czasOtworz, czasZamknij, nieInicjalizuj)
{
   if (typeof czasRozwin == 'undefined' || czasRozwin < 0) czasRozwin = 25;
   if (typeof czasZwin == 'undefined' || czasZwin < 0) czasZwin = 25;
   if (typeof czasOtworz == 'undefined' || czasOtworz < 0) czasOtworz = 250;
   if (typeof czasZamknij == 'undefined' || czasZamknij < 0) czasZamknij = 500;

   var url = unescape(window.location.href);
   var base = window.location.protocol + '//' + window.location.host + window.location.pathname.replace(/[^\/\\]+$/, '');

   if (style)
   {
      if (style.indexOf(':') < 0)
      {
         document.getElementById(id).className += ' ' + style;
      }
      else
      {
         style = style.replace(/(^\s+|(\s|;)+$)/g, '').split(/\s*;\s*/);
         for (var i = 0; i < style.length; i++)
         {
            style[i] = style[i].split(/\s*:\s*/);
            for (var j = 0, c, property = ''; j < style[i][0].length; j++)
            {
               c = style[i][0].charAt(j);
               property += c == '-' ? style[i][0].charAt(++j).toUpperCase() : c.toLowerCase();
            }
            eval('document.getElementById("' + id + '").style.' + property + ' = "' + style[i][1].replace(/"/g, '\\"') + '"');
         }
      }
   }

   for (var i = 0; i < document.getElementById(id).getElementsByTagName('dt').length; i++)
   {
      var dd = new Array();
      var el = document.getElementById(id).getElementsByTagName('dt')[i].nextSibling;
      var nodeName;
      while (el && (nodeName = el.nodeName.toLowerCase()) != 'dt')
      {
         if (nodeName == 'dd')
         {
            el._dt = document.getElementById(id).getElementsByTagName('dt')[i];
            if (otworz)
            {
               el.onmouseover = function()
               {
                  clearTimeout(this._dt._timoutID);
                  this._dt._displayed = false;
                  this._dt.onclick();
               }
               el.onmouseout = function()
               {
                  clearTimeout(this._dt._timoutID);
                  var dt = this._dt;
                  this._dt._timoutID = setTimeout(function () { dt._displayed = true; dt.onclick(); }, czasZamknij);
               };
            }
            dd[dd.length] = el;
         }
         el = el.nextSibling;
      }
      document.getElementById(id).getElementsByTagName('dt')[i]._dd = dd;
      document.getElementById(id).getElementsByTagName('dt')[i]._timoutID = null;
      document.getElementById(id).getElementsByTagName('dt')[i]._displayed = false;
      document.getElementById(id).getElementsByTagName('dt')[i].onclick = function()
      {
         clearTimeout(this._timoutID);
         if (!this._displayed)
         {
            var el = this.parentNode.getElementsByTagName('dt')[0];
            while (el)
            {
               if (el.nodeName.toLowerCase() == 'dt' && el != this)
               {
                  el._displayed = false;
                  if (czasZwin) display(el, 0);
                  else display(el);
               }
               el = el.nextSibling;
            }
         }
         this._displayed = !this._displayed;
         if (this._displayed && czasRozwin || !this._displayed && czasZwin) display(this, 0);
         else display(this);
      };
      if (otworz)
      {
         document.getElementById(id).getElementsByTagName('dt')[i].onmouseover = function()
         {
            clearTimeout(this._timoutID);
            var dt = this;
            this._timoutID = setTimeout(function () { dt._displayed = false; dt.onclick(); }, czasOtworz);
         };
         document.getElementById(id).getElementsByTagName('dt')[i].onmouseout = function()
         {
            clearTimeout(this._timoutID);
            var dt = this;
            this._timoutID = setTimeout(function () { dt._displayed = true; dt.onclick(); }, czasZamknij);
         };
      }
   }

   start(document.getElementById(id).getElementsByTagName('dt')[0]);

   function start(dt)
   {
      var hide = true;
      var el = dt;
      while (el)
      {
         var nodeName = el.nodeName.toLowerCase();
         if (nodeName == 'dt')
         {
            dt = el;
            hide = true;
         }
         if (nodeName == 'dt' || nodeName == 'dd')
         {
            if (!nieInicjalizuj && el.getElementsByTagName('a').length)
            {
               var active = el.getElementsByTagName('a')[0].href && unescape(el.getElementsByTagName('a')[0].href) == url;
               if (!active)
               {
                  var rel = el.getElementsByTagName('a')[0].getAttribute('rel');
                  if (rel)
                  {
                     var matches = (' ' + rel + ' ').match(/\s+Collection\(([^)]+)\)\s+/i);
                     if (matches)
                     {
                        matches = matches[1].split(',');
                        for (var k = 0; k < matches.length; k++)
                        {
                           if (/^[\/\\]/.test(matches[k])) matches[k] = window.location.protocol + '//' + window.location.host + matches[k];
                           else if (!/^[a-z0-9]+:/i.test(matches[k])) matches[k] = base + matches[k];
                           if (unescape(matches[k].replace(/[\/\\]\.([\/\\])/g, '$1').replace(/[^\/\\]+[\/\\]\.\.[\/\\]/g, '')) == url)
                           {
                              active = true;
                              break;
                           }
                        }
                     }
                  }
               }
               if (active)
               {
                  el.className = (el.className ? el.className + ' ' : '') + 'active';
                  dt._displayed = true;
                  display(dt);
                  hide = false;
                  var el_parentNode = el.parentNode;
                  while (el_parentNode != document.getElementById(id))
                  {
                     if (el_parentNode.nodeName.toLowerCase() == 'dd')
                     {
                        var el_sibling = el_parentNode.previousSibling;
                        while (el_sibling)
                        {
                           if (el_sibling.nodeName.toLowerCase() == 'dt')
                           {
                              el_sibling._displayed = true;
                              display(el_sibling)
                              break;
                           }
                           el_sibling = el_sibling.previousSibling;
                        }
                     }
                     el_parentNode = el_parentNode.parentNode;
                  }
               }
            }
         }
         if (nodeName == 'dd')
         {
            if (hide) el.style.display = 'none';
            start(el.getElementsByTagName('dt')[0]);
         }
         el = el.nextSibling;
      }
   }

   function display(dt, i)
   {
      if (typeof i == 'undefined')
      {
         for (var i = 0; i < dt._dd.length; i++)
         {
            dt._dd[i].style.display = dt._displayed ? 'block' : 'none';
            if (!dt._displayed)
            {
               for (var j = 0; j < dt._dd[i].getElementsByTagName('dt').length; j++)
               {
                  dt._dd[i].getElementsByTagName('dt')[j]._displayed = false;
                  display(dt._dd[i].getElementsByTagName('dt')[j]);
               }
            }
         }
      }
      else if (i < dt._dd.length)
      {
         var dir = wysun ? !dt._displayed : dt._displayed;
         var n = dir ? i : dt._dd.length - 1 - i;
         dt._dd[n].style.display = dt._displayed ? 'block' : 'none';
         if (!dt._displayed)
         {
            for (var j = 0; j < dt._dd[n].getElementsByTagName('dt').length; j++)
            {
               dt._dd[n].getElementsByTagName('dt')[j]._displayed = false;
               display(dt._dd[n].getElementsByTagName('dt')[j]);
            }
         }
         dt._timoutID = setTimeout(function() { display(dt, i + 1); }, dt._displayed ? czasRozwin : czasZwin);
      }
   }
}
