/**
 * @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.replace(/#.*/, ''));
   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.replace(/#.*/, '')) == 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, pos = -1; k < matches.length; k++)
			{
			   if (matches[k].charAt(0) == '[' && (pos = matches[k].lastIndexOf(']')) > 0)
			   {
			      if (new RegExp(unescape(matches[k].substring(1, pos)), matches[k].substring(pos + 1)).test(url))
			      {
				 active = true;
				 break;
			      }
			   }
			   else
			   {
			      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, '').replace(/#.*/, '')) == 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);
      }
   }
}
