/*
Ореховое меню
2007 - Magic Wand
*/

NutMenu = function() {
    this.showTimer = null;
    this.showSubNutElem = null;
    this.hideAllTimer = null;
    this.mouseInMenu = false;
    this.elem = null;
}

NutMenu.prototype = {
    init: function(elem) {
        this.elem = elem;
        this.hideAll();
        var oThis = this;
        $('.nutpunkt', elem).hover(
            function() {
                oThis.beginShow(this);
            },
            function() {
                oThis.endShow(this);
            }
        );
        $('.subnut', elem).hover(
            function() {
                oThis.endHideAll();
                oThis.setMouseInMenu(true);
            },
            function() {
                oThis.beginHideAll();
                oThis.setMouseInMenu(false);
            }
        );
        $(document).click(function() { if(!oThis.getMouseInMenu()) oThis.hideAll(); });
    },
    
    setMouseInMenu: function(status) {
        this.mouseInMenu = status;
    },
    
    getMouseInMenu: function() {
        return this.mouseInMenu;
    },
    
    beginHideAll: function() {
        this.startHideAllTimer();
    },
    
    endHideAll: function() {
        this.stopHideAllTimer();
    },
    
    startHideAllTimer: function() {
        this.stopHideAllTimer();
        var oThis = this;
        this.hideAllTimer = setTimeout(function() {oThis.hideAll()}, 2000);
    },
    
    stopHideAllTimer: function() {
        if(!this.hideAllTimer) return;
        clearTimeout(this.hideAllTimer);
        this.hideAllTimer = null;
    },
    
    beginShow: function(punkt) {
        var jpunkt = $(punkt);
        $.log('begin show');
        if(jpunkt.is('.rootpunkt')) this.hideAll();
        else this.hideSibling(punkt);
        this.stopHideAllTimer();
        this.startShowTimer(jpunkt);
    },
    
    endShow: function() {
        $.log('end show');
        this.stopShowTimer();
    },
    
    hideAll: function() {
        $.log('hide all');
        //$('.subnut', this.elem).hide().prev().removeClass('actived');
        $('.subnut', this.elem).hide().prev();
        this.stopHideAllTimer();
    },
    
    hideSibling: function(punkt) {
        $.log('hide sibbling');
        //$('.subnut', $(punkt).siblings('.subnut').hide().prev().removeClass('activated')).hide().prev().removeClass('actived');
        var jpunkt = $(punkt);
        if(!jpunkt.is('rootpunkt'))
            $('.subnut', jpunkt.parents('table:first').siblings()).hide();
    },
    
    stopShowTimer: function() {
        if(!this.showTimer) return;
        $.log('stop timer');
        clearTimeout(this.showTimer);
        this.showTimer = this.showSubNutElem = null;
    },
    
    startShowTimer: function(jpunkt) {
        //var sub_nut = jpunkt.next('.subnut');
        /*var punkt_tab = jpunkt.parents('table:last');
        var sub_nut = $('.subnut', punkt_tab);*/
        var sub_nut = jpunkt.is('.rootpunkt') ? jpunkt.next('.subnut') : $('.subnut', jpunkt.parents('table:first'));
        if(sub_nut.length == 0) return;
        $.log('start timer');
        this.showSubNutElem = sub_nut.get(0);
        var oThis = this;
        this.showTimer = setTimeout(function() {oThis.showSubNut()}, 250);
    },
    
    showSubNut: function(elem) {
        if(!elem) elem = this.showSubNutElem;
        if(!elem) return;
        $.log('>>> show subnut');
        var jelem = $(elem);
        jelem.show();
        //jelem.prev().addClass('actived');
        //jelem.parents('table:first').addClass('actived');
        this.stopShowTimer();
        
        /*var parent = jelem.parents('.subnut:first');
        if(parent.length == 0) return;
        var parent_width = parent.eq(0).width();
        alert(parent_width);
        alert(jelem.width());
        jelem.css('left', - parent_width - jelem.width());*/
        
        /*var coords = jelem.parent().coords();
        alert(coords.x);*/
        /*if(document.width) alert(document.width);
        else if(document.body.scrollWidth) alert(document.body.scrollWidth);*/
        
    }
}

jQuery.fn.nutmenu = function() {
    return this.each(function() {
        var menu = new NutMenu();
        menu.init(this);
    });
}

//$(document).ready(function() { $(document).nutmenu(); });

//$(document).ready(function() { var menu = new NutMenu(); menu.init(); });


