function wz_tooltip_Menu(ulid, isAdmin, isOwner) {
    
    var wz_tooltip_Menu = cssDragDropMenu(ulid, {
                        draggableclass:         'draggableclass',
                        irrelevantclass:        'irrelevant',
                        draghandleclass:        'draghandle',
                        folderclass:            'folder',
                        overclass:              'over',
                        draggedclass:           'draggedclass',
                        dragoverclass:          'dragoverclass',
                        openedclass:            'openedclass',
                        newsubmenudummyclass:   'newsubmenudummyclass', 
                        irrelevantfolderclass:  'irrelevantfolderclass',
                        irrelevantoverclass:    'irrelevantoverclass',
                        newsubmenudummytext:    '<div class="div_menu_item_outer">Drop here</div>', 
                        onStartDragging: function (lie, ule) {
                                                                wz_tooltip_Menu.realyHideToolTip();
                                                                    if (wz_tooltip_Menu.menuInPlaceEditor) 
                                                                        wz_tooltip_Menu.menuInPlaceEditor.handleFormCancellation();
                                                                    if (wz_tooltip_Menu.editedliid) 
                                                                        wz_tooltip_Menu.hideMenuAddForm(wz_tooltip_Menu.editedliid);
                                                                    wz_tooltip_Menu.realyHideToolTip();
                                                                    },
                        onEndDragging:  function(lie, ule, index) {
                                    new Ajax.Request(
                                                 '/menu/a_move.php?menu_id=' + 
                                                            lie.id.replace(/li_/,'') + '&menu_position='+index+'&menu_parent_id=' + 
                                                            ule.id.replace(/ul_/,'') + '&rand=' + Math.random(),
                                                    {
                                                    method: 'GET',
                                                    onSuccess: function(transport) {
                                                        
                                                        },
                                                    onFailure: function() {
                                                        alert('server error');
                                                        }
                                                     }
                                                 );
                                    },
//                      isDropable:     this.isMenuItemDropable,
                        onChange:   function (lie) {
                                            if ($('add_item_li_0').nextSibling)
                                                wz_tooltip_Menu.insertBefore($('add_item_li_0').nextSibling, $('add_item_li_0'));
                                            },
                        timeout: 200
                        });

    wz_tooltip_Menu.menuInPlaceEditor = null;
    wz_tooltip_Menu.menuOldSpanValue = '';
    wz_tooltip_Menu.isAdmin = isAdmin;
    wz_tooltip_Menu.isOwner = isOwner;
    wz_tooltip_Menu.showntooltipid = 0;
    wz_tooltip_Menu.editmenuwin = null;
    wz_tooltip_Menu.editmenuwinopened = false;

    wz_tooltip_Menu.getURL = function (l) {
        if (!this.frozeditem && l)
            document.location.href = l;
        }
    
    wz_tooltip_Menu.isMenuItemDropable = function(element,parentelement,prevelement,nextelement,def) {
    return def;
    }

    wz_tooltip_Menu.createAddItemLI = function(ule) {
    ule = $(ule);
    if (!ule) return;
    tmpid = ule.id.replace(/ul_/,'');
        ule.insert({'bottom': '<li class="'+wz_tooltip_Menu.options.irrelevantfolderclass + ' ' + wz_tooltip_Menu.options.irrelevantoverclass +'" id="add_item_li_'+tmpid+'"><div id="div_menu_add_'+tmpid+'" class="adddiv"><img src="/img/0.png" width="15" height="15"><a '
        +'href="#" id="a_menu_add_'+tmpid+'" onClick="return menuAddForm(\''+tmpid+'\');"><span>Add menu item</span></a></div></li>'
        });
    }
//??
wz_tooltip_Menu.higlightActive = function(lie) { 
    lie = $(lie);
    var tmpid = lie.id.replace(/li_/,'');
    var tmpactive = ((lie.readAttribute('active')=='1')?'1':0);
    if (!tmpactive) 
        lie.down('span').addClassName('inactiveitem');
    else 
        lie.down('span').removeClassName('inactiveitem');
    }

    

wz_tooltip_Menu.realyShowToolTip = function(e,liel) {
    this.tooltiptimer = null;
    this.tooltipplanedid = 0;
    this.openedtooltipli = liel;
    var tmpis = liel.id.replace(/li_/,'');
    psh = liel.cumulativeOffset();
    var stt = false;
    if (liel.readAttribute('activable')=='1') 
        {
        $('menutooltip').down('img',1).src = '/img/active_' + liel.readAttribute('active')  + '.png';
        $('menutooltip').down('img',1).show();
        stt = true;
        }
    else 
        $('menutooltip').down('img',1).hide();

    if (liel.readAttribute('lockable')=='1') {
        $('menutooltip').down('img',2).src = '/img/locked_' + liel.readAttribute('locked')  + '.png';
        $('menutooltip').down('img',2).show();
        stt = true;
        }
    else 
        $('menutooltip').down('img',2).hide();
        
    if (liel.readAttribute('editable')=='1') {
        $('menutooltip').down('img',0).show();
        stt = true;
        }
    else 
        $('menutooltip').down('img',0).hide();

    if (liel.readAttribute('deletable')=='1') {
        $('menutooltip').down('img',3).show();
        stt = true;
        }
    else 
        $('menutooltip').down('img',3).hide();

    if (!stt)
        return this.realyHideToolTip();
        
    if ($('menutooltip_' + tmpis)) 
        $('menutooltip_' + tmpis).innerHTML = $('menutooltip').innerHTML;
    else 
        this.openedtooltipli.insert({'bottom': '<div id="menutooltip_'+ tmpis +'" class="menutooltipclass">'+$('menutooltip').innerHTML+'</div>'});
    $('menutooltip_' + tmpis).show();
    }

wz_tooltip_Menu.realyHideToolTip = function() {
    if (this.tooltiptimer) {
        this.tooltipplanedid = 0;
        clearTimeout(this.tooltiptimer);
        this.tooltiptimer = null;
        }
    if (this.openedtooltipli && $(this.openedtooltipli.id.replace(/li_/,'menutooltip_')))
        $(this.openedtooltipli.id.replace(/li_/,'menutooltip_')).hide();
    this.openedtooltipli = null;
    }
    
wz_tooltip_Menu.showToolTip = function(e,id) {
    if (this.frozeditem) return false;
    if (this.dragging) return false;
    if (e) Event.stop(e);
    liel = $('li_' + id);
    if (Event.findElement(e,'li')!=liel) return false;
    if (this.openedtooltipli && (this.openedtooltipli==liel)) return;
    if (this.openedtooltipli) this.hideToolTip();
    _self = this;
    if (this.tooltiptimer) {
        this.tooltipplanedid = 0;
        clearTimeout(this.tooltiptimer);
        }
    this.tooltipplanedid = id;
    this.tooltiptimer = setTimeout(function () {_self.realyShowToolTip(e,liel)},250);
    }

wz_tooltip_Menu.cancelToolTip = function(e) {
    if (this.tooltiptimer && !this.openedtooltipli) {
        clearTimeout(this.tooltiptimer);
        _self = this;
        liel = $('li_' + this.tooltipplanedid);
        this.tooltiptimer = setTimeout(function () {_self.realyShowToolTip(e,liel)},250);
        }
    }

wz_tooltip_Menu.hideToolTip = function(e) {
    if (this.tooltiptimer) 
        clearTimeout(this.tooltiptimer);
    if (e) Event.stop(e);
    else return;
    if (!e || !e.relatedTarget || (e.relatedTarget.tagName=='LI') || (e.relatedTarget.up('li')!=this.openedtooltipli)) 
            this.realyHideToolTip();;
    }


wz_tooltip_Menu.switchMenuItem = function(img) {
    var tmpid = img.up('li').id.replace(/li_/,'');
    var setto = ($('li_' + tmpid).readAttribute('active')=='1'?'0':'1');
    new Ajax.Request(
                 '/menu/a_active.php?menu_id=' + tmpid + '&menu_active=' + setto + '&rand=' + Math.random(),
                    {
                    method: 'get',
                    onSuccess: function(transport) {
                        if (transport.responseText.match(/^[\d]+:(1|0)$/))  {
                            var newval = transport.responseText.replace(/[\d]+:/,'');
                            var newvar = transport.responseText.replace(/:(1|0)$/,'');
                            if ($('li_' + newvar)) {
                                $('li_' + newvar).writeAttribute({active: newval});
                                wz_tooltip_Menu.higlightActive($('li_' + newvar));
                                $('menutooltip_' + newvar).down('img',1).src = '/img/active_' + newval + '.png';
                                }
                            }
                        else
                            alert('server error: ' + transport.responseText);
                        },
                    onFailure: function() {
                            alert('server error');
                        }
                     }
                 );
    }
    
wz_tooltip_Menu.lockMenuItem = function(img) {
    var tmpid = img.up('li').id.replace(/li_/,'');
    if ($('li_'+tmpid).readAttribute('lockable')!='1')  return;
    var setto = ($('li_' + tmpid).readAttribute('locked')=='1'?'0':'1');
    new Ajax.Request(
                 '/menu/a_lock.php?menu_id=' + tmpid + '&menu_locked=' + setto + '&rand=' + Math.random(),
                    {
                    method: 'get',
                    onSuccess: function(transport) {
                        if (transport.responseText.match(/^[\d]+:(1|0)$/))  {
                            var newval = transport.responseText.replace(/[\d]+:/,'');
                            var newvar = transport.responseText.replace(/:(1|0)$/,'');
                            if ($('li_' + newvar)) {
                                $('li_' + newvar).writeAttribute({locked: newval});
                                wz_tooltip_Menu.higlightActive($('li_' + newvar));
                                $('menutooltip_' + newvar).down('img',2).src = '/img/locked_' + newval + '.png';
                                }
                            }
                        else
                            alert('server error: ' + transport.responseText);
                        },
                    onFailure: function() {
                            alert('server error');
                        }
                     }
                 );
    }
    
wz_tooltip_Menu.removeMenuItem = function(img) {
    this.frozeItem(img.up('li'));
    var tmpid = img.up('li').id.replace(/li_/,'');
        if (confirmLink('Are you sure? You want remove menu item `' + $('li_' + tmpid).down('span').innerHTML + '`?')) {
            if ( $('ul_' + tmpid).select('li').any( function (lie) {return ( !lie.hasClassName(wz_tooltip_Menu.options.irrelevantfolderclass) )} ) &&
                    !confirmLink('Thes menu item has submenu items. If you sure you want remove please press OK') )
                    return this.unfrozedelayedItem();
            new Ajax.Request(
                 '/menu/a_remove.php?menu_id=' + tmpid + '&rand=' + Math.random(),
                    {
                    method: 'get',
                    onSuccess: function(transport) {
                        if (transport.responseText.match(/^([\d]+:)+$/)) {
                            var nevar = transport.responseText.replace(/^([\d]+).*$/,"$1");
                            if ($('li_' + nevar))
                                wz_tooltip_Menu.removeItem('li_' + nevar);
                            }
                        else
                            alert('server error: ' + transport.responseText);
                        wz_tooltip_Menu.unfrozedelayedItem();
                        },
                    onFailure: function() {
                            alert('server error');
                            wz_tooltip_Menu.unfrozedelayedItem();
                        }
                     }
                 );
            }
        else {
            this.unfrozedelayedItem();
            }
        }

wz_tooltip_Menu.unfrozedelayedItem = function() {
    if (this.frozeditem) this.frozeditem.removeClassName(this.options.draggedclass);
    this.onmousemove = function (event) {
        wz_tooltip_Menu.onmousemove = null;
        wz_tooltip_Menu.frozeItem(null);
        }
    return false;
    }
        
wz_tooltip_Menu.frozeItem = function(lie) {
        if (this.openedtooltipli)
            this.realyHideToolTip(this.openedtooltipli);
        if (lie) {
            this.up('.cssMENU').addClassName('tmpcssMENU');
            this.up('.cssMENU').removeClassName('cssMENU');
            lie.ancestors().find(function (ae) {
                if (!ae.descendantOf(wz_tooltip_Menu)) return true;
                if (ae.nodeName=='UL') ae.addClassName('forceopened');
                return false;
                } );
            lie.addClassName(this.options.draggedclass);
            }
        else 
            {
            if (this.frozeditem) {
                this.frozeditem.removeClassName(this.options.draggedclass);
                this.frozeditem.ancestors().find(function (ae) {
                if (!ae.descendantOf(wz_tooltip_Menu)) return true;
                if (ae.nodeName=='UL') ae.removeClassName('forceopened');
                return false;
                } );
                }
            this.up('.tmpcssMENU').addClassName('cssMENU');
            this.up('.tmpcssMENU').removeClassName('tmpcssMENU');
            }
        this.frozeditem = lie;
        }
        
    
wz_tooltip_Menu.showMenuUpdateForm = function(img) {
    var liel = this.openedtooltipli;
    if (!liel) return;
    this.realyHideToolTip();
    this.frozeItem(liel);
    var editid = liel.id.replace(/li_/,'');
    var spanelement = liel.down('span');
    if (this.menuInPlaceEditor) {
            this.menuInPlaceEditor.handleFormCancellation(null);
            };
    spanelement.hide();
    this.menuInPlaceEditor = new Ajax.InPlaceEditor(spanelement,'/menu/a_update.php', {
            okControl:              false,
            cancelControl:          false,
            externalControlOnly:    true,
            submitOnBlur:           false,
            highlightcolor:         '',
            highlightendcolor:      '',
            formId:                 'inplaceeditorform_id',
            callback:               function(form, value) {
                                        return 'menu_id='+ editid +'&menu_title=' +Url.encode(value);
                                        },
            onFormCustomization: function (inplaceeditor, form) {
                Event.observe(form.down('input'),'keydown',inplaceeditor.checkForEscapeOrReturn.bind(inplaceeditor));
                },
            onComplete:             function (transport,spanelement) {
                                        wz_tooltip_Menu.menuInPlaceEditor.destroy();
                                        wz_tooltip_Menu.menuInPlaceEditor = null;
                                        wz_tooltip_Menu.unfrozedelayedItem();
                                        if (transport) 
                                            wz_tooltip_Menu.updateLI(transport,spanelement);
                                        else
                                            wz_tooltip_Menu.restoreFailedLI(transport,spanelement); 
                                        },
            onFailure:              function (transport,spanelement) {
                                        wz_tooltip_Menu.menuInPlaceEditor.destroy();
                                        wz_tooltip_Menu.menuInPlaceEditor = null;
                                        alert('failed editor');
                                        wz_tooltip_Menu.unfrozedelayedItem();
                                        wz_tooltip_Menu.restoreFailedLI(transport,spanelement); 
                                        }
            });
        this.menuInPlaceEditor.getText = function() {
                return this.element.innerHTML;
                },
        spanelement.writeAttribute('oldvalue',spanelement.innerHTML);
        this.menuInPlaceEditor.enterEditMode();
    }
        
wz_tooltip_Menu.updateLI = function(transport,spanelement) {
    if (transport && transport.responseText.match(/^[\d]+:.*$/)) {
        var newval = Url.decode(transport.responseText.replace(/^[\d]+:/,''));
        var newvar = transport.responseText.replace(/^([\d]+):.*$/,"$1");
        if ($('li_' + newvar)) {
            $('li_' + newvar).down('span').innerHTML = newval;
            }
        }
    else {
        wz_tooltip_Menu.restoreFailedLI(transport,spanelement);
        }
    }

wz_tooltip_Menu.restoreFailedLI = function(transport,spanelement) {
    if (spanelement) {
        spanelement.innerHTML = spanelement.readAttribute('oldvalue');
        spanelement.writeAttribute('oldvalue','');
        }
    if (transport) {
        alert("Error communicating with the server: " + transport.responseText.stripTags());
        }
    }
    
wz_tooltip_Menu.showMenuAddForm = function(id) {
        if (this.frozeditem) return false;
        var pn = $('add_item_li_' + id);
        if (!pn) return false;
        this.frozeItem(pn);
        this.editedliid = id;
        pn.down('span').hide(); 
        pn.down('.divforaddform').innerHTML = $('addform').innerHTML;
        pn.down('input').focus(); 
        pn.down('input.menu_parent_id').value = id;
        pn.down('input.cancelbutton').onclick = function (event) {
            wz_tooltip_Menu.hideMenuAddForm(id);
            };
        pn.down('form').onsubmit = function () {
            $('add_item_li_'+ id).down('input.savingbutton').value = 'saving';
            this.down('input.savingbutton').disabled = true;
            this.request({
            onComplete: function(transport) {
                if (transport.responseText.match(/^[\d]+:.*/gi))  {
                            var newval = transport.responseText.replace(/[\d]+:/gi,'');
                            var newvar = transport.responseText.replace(/:.*$/gi,'');
                            wz_tooltip_Menu.addItem(newval,pn,'top');
                            }
                        else{
                            alert('server error!!!:' + transport.responseText);
                            }
                    wz_tooltip_Menu.hideMenuAddForm(id);
                },
            onFailure: function() {
                alert('server error');
                wz_tooltip_Menu.hideMenuAddForm(id);
                }
                });
            return false;
            }
        pn.down('.divforaddform').show();
        return false;
    }
    
    
wz_tooltip_Menu.hideMenuAddForm = function(id) {
        $('add_item_li_'+ id).down('.divforaddform').hide();
        $('add_item_li_'+ id).down('.divforaddform').innerHTML = '';
        $('add_item_li_'+ id).down('span').show();
        this.unfrozedelayedItem();
        this.editedliid = 0;
    }
    
    
return wz_tooltip_Menu;

}