        var _sunMenu = new Array();
        function sunMenu(_s)
        {

            _s.id = _sunMenu.length;
            if(!_s.closeTime) _s.closeTime = 1000;
            if(!_s.startOpacity) _s.startOpacity = 0;
            if(!_s.endOpacity) _s.endOpacity = 1;
            if(!_s.on) _s.on = 'over';

            var liList = new Array();
            var liListMenu = new Array();
            for(i = 0; i < _s.menu.childNodes.length; i++) {
                var li = _s.menu.childNodes.item(i);
                if(li.nodeName.toLowerCase() != 'li' && li.nodeName.toLowerCase() != 'div') continue;

                var menuBox = false;
                for(j = 0; j < li.childNodes.length; j++) {
                    var name = li.childNodes.item(j).nodeName.toLowerCase();
                    if(name != 'div' && name != 'ol') continue;
                    menuBox = li.childNodes.item(j);
                    break;
                }

                if(menuBox == false)
                    continue;

                li._id = _s.id;
                li._indexItem = liList.length;

                liList.push(li);
                liListMenu.push(menuBox);
            }

            _s.list = liList;
            _s.listMenu = liListMenu;
            _s.listClose = new Array();
            _s.timeOuts = new Array();
            _s.opacity = new Array();

            _sunMenu[_s.id] = _s;

            for(i = 0; i < _sunMenu[_s.id].list.length; i++)
            {
                if(_s.on == 'over')
                    _sunMenu[_s.id].list[i].onmouseover = function() { _sunMenuOpen(this); }
                else {
                    _sunMenu[_s.id].list[i].onclick = function() { _sunMenuOpen(this); }
                    _sunMenu[_s.id].list[i].onmouseover = function() { _sunMenu[_s.id].listClose[i] = false; }
                }
                _sunMenu[_s.id].list[i].onmouseout = function() { _sunMenuClose(this); }
                _sunMenu[_s.id].listClose[i] = true;
            }

        }


        function _sunMenuOpen(li)
        {


            if(!_sunMenu[li._id].listClose[li._indexItem]) return;


            _sunMenu[li._id].listClose[li._indexItem] = false;


            if(_sunMenu[li._id].opacity[li._indexItem] == _sunMenu[li._id].endOpacity) return;

            // zavrou se vsechny ostatni
            if(_sunMenu[li._id].onlyOne) {
                for(i = 0; i < _sunMenu[li._id].opacity.length; i ++)
                    if(_sunMenu[li._id].opacity[i] > 0 && i != li._indexItem)
                        _sunMenuHide(li._id, i);
            }


            var menu = _sunMenu[li._id].listMenu[li._indexItem];


            if(menu == false) {
                alert('menu nenalezeno');
                return;
            }

            menu.style.opacity = 0;
            menu.style.filter = 'alpha(opacity=' + 0 + ')';
            menu.style.zIndex = 1000;



            menu.style.display = 'block';
            menu.style.position = 'absolute';


            var pos = _sunMenugetPos(li);
            //document.title = pos;
            menu.style.left = (pos[0] - 16) + 'px';
            menu.style.top = pos[1] + li.offsetHeight + 'px';

            //document.title = menu.style.top;

            //var id = li._id;
            menu.onmouseouver = function() { _sunMenu[li._id].listClose[li._indexItem] = false; }
            menu.onmouseout = function() {  _sunMenu[li._id].listClose[li._indexItem] = true; }

            _sunMenu[li._id].opacity[li._indexItem] = 0;
            setOpa(li._id, li._indexItem);
        }


        function _sunMenuClose(li)
        {
            if(_sunMenu[li._id].listClose[li._indexItem]) return;
            _sunMenu[li._id].listClose[li._indexItem] = true;
            clearTimeout(_sunMenu[li._id].timeOuts[li._indexItem]);
            _sunMenu[li._id].timeOuts[li._indexItem] = setTimeout('_sunMenuHide(' + li._id + ', ' + li._indexItem + ')', _sunMenu[li._id].closeTime);

        }

        function setOpa(id, index)
        {

            if(_sunMenu[id].opacity[index] == _sunMenu[id].endOpacity) return;


            var menu = _sunMenu[id].listMenu[index];



            // nastavi se minimalni
            if(_sunMenu[id].opacity[index] < _sunMenu[id].startOpacity) {
                _sunMenu[id].opacity[index] = _sunMenu[id].startOpacity;
                menu.style.opacity = _sunMenu[id].opacity[index];
                menu.style.filter = 'alpha(opacity=' + (_sunMenu[id].opacity[index] * 100) + ')';

            }
            // nastavi se dalsi krok
            else if(_sunMenu[id].opacity[index] < _sunMenu[id].endOpacity) {
                var step = (_sunMenu[id].endOpacity - _sunMenu[id].opacity[index]) / 2;
                if(step < 0.05)
                    step = 0.05;

                _sunMenu[id].opacity[index] += step;

                if(_sunMenu[id].opacity[index] > _sunMenu[id].endOpacity)
                    _sunMenu[id].opacity[index] = _sunMenu[id].endOpacity;

                menu.style.opacity = _sunMenu[id].opacity[index];
                menu.style.filter = 'alpha(opacity=' + (_sunMenu[id].opacity[index] * 100) + ')';
            }
            else {

                return;
            }

            //document.title = _sunMenu[id].opacity[index];

            setTimeout('setOpa(' + id + ',' + index + ')', 50);

        }


        function _sunMenuHide(id, index)
        {
            if(_sunMenu[id].listClose[index] == false) return;
            _sunMenu[id].listMenu[index].style.display = 'none';
            _sunMenu[id].opacity[index] = 0;
            _sunMenu[id].listClose[index] == false;
        }

        function _sunMenugetPos(o)
        {
            var res = [0, 0];

            if (o.offsetParent)
                while (true)
                {
                    res[0] += o.offsetLeft;
                    res[1] += o.offsetTop;
                    if (!o.offsetParent) break;
                    o = o.offsetParent;
                }

            else if (o.x)
                res[o.x, o.y];

            return res;
        }
