var divheight = 0;
var origheight = 0;
var hoverclass = 'hover';
var subhoverclass = 'subhover';
var selectedclass = 'active';
$(function() {

    var level1 = $('div#menu ul.level0 li.item0 ul.level1');
    level1.hide();
    var level2 = $('div#menu ul.level0 li.item0 ul.level1 li.item1 ul.level2');
    level2.hide();
    var subheights = new Array();
    var opener;
    var t;
    var t2;
    origheight = $('div#menu').height();

    // position submenus
    for (var i = 0; i < level1.length; i++) {
        var leftpos = $(level1[i]).parent().position().left;
        var subpos = leftpos + "px";
        $(level1[i]).css("left", subpos);

        // determine div#menu height
        subheights[subheights.length] = $(level1[i]).height();

        for (var j = 0; j < subheights.length; j++) {
            if (divheight < subheights[j]) {
                divheight = subheights[j] + 10 + origheight;
            }
        }
    }


    // event handler on menu items
    $('div#menu ul.level0 li.item0').mouseenter(function() {

        clearTimeout(t);

        if ($('div#menu').height() == origheight) {
            $('div#menu').animate({ height: divheight + 'px' }, "normal");
            opener = $(this)[0].id;
        }

        if ($('div#menu ul.level0 li.item0 ul.' + hoverclass).length > 0) {
            $('div#menu ul.level0 li.item0 ul.level1').removeClass(hoverclass).hide();
            $('div#menu ul.level0 li.item0').removeClass(hoverclass);
        }

        $(this).children(".level1").show().addClass(hoverclass);
        $(this).addClass(hoverclass);
    });
    /*
    $('div#menu ul.level0 li.item0').mouseleave(function() {
    $('div#menu ul.level0 li.item0').removeClass(hoverclass);
    });
    */
    $('div#menu').mouseenter(function() {
        clearTimeout(t);
    });

    $('div#menu').mouseleave(function() {
        t = setTimeout(handleMouseLeave, 500);
    });

    $('div#menu ul.level0 li.item0 ul.level1 li.item1').mouseenter(function() {
        $(this).addClass(subhoverclass);
        if ($(this).children('ul.level2').length > 0) {
            level2.hide();
            $(this).children('ul.level2').show();

            positionLevel2();
            var computedHeight = $(this).children('ul.level2').position().top + $(this).parent().position().top + $(this).children('ul.level2').height();
            if ((computedHeight + 10 + origheight) > divheight) {
                $('div#menu').stop();
                $('div#menu').animate({ height: (computedHeight + origheight) + 'px' }, "fast");
            }
        }
        else {
            level2.hide();
            $('div#menu').stop();
            $('div#menu').animate({ height: divheight + 'px' }, "fast");
        }

    });

    $('div#menu ul.level0 li.item0 ul.level1 li.item1').mouseleave(function() {
        $(this).removeClass(subhoverclass);
    });

    $('div#menu ul.level0 li.item0 ul.level1 li.item1 ul.level2 li.item2').mouseenter(function() {
        $(this).addClass(subhoverclass);
    });

    $('div#menu ul.level0 li.item0 ul.level1 li.item1 ul.level2 li.item2').mouseleave(function() {
        $(this).removeClass(subhoverclass);
    });


    // submenu things
    var submenus_level1 = $('div#submenu ul li ul.level1');
    submenus_level1.hide();
    // position submenu-children

    for (var i = 0; i < submenus_level1.length; i++) {
        var leftpos = $(submenus_level1[i]).parent().position().left;
        var width = $(submenus_level1[i]).parent().width();
        var subpos = leftpos + "px";
        var subwidth = width + "px";
        $(submenus_level1[i]).css("left", subpos);
        if ($(submenus_level1[i]).width() < width) {
            $(submenus_level1[i]).css("width", subwidth);
        }
    }

    $('div#submenu ul li.item0').mouseenter(function() {
        clearTimeout(t2);
        $('div#submenu ul li.item0 ul.level1').hide();
        if ($(this).children('ul.level1').length > 0) {
            $(this).children('ul.level1').show();
        }
    });
    $('div#submenu ul li.item0').mouseleave(function() {
        t2 = setTimeout(handleSubmenuMouseLeave, 500);
    });

    $('div#menu a.' + selectedclass).removeClass(selectedclass);
    $('div#menu ul li.' + selectedclass + ' a:first').addClass(selectedclass);

});


positionLevel2 = function() {
    var level2 = $('div#menu ul.level0 li.item0 ul.level1 li.item1 ul.level2');
    for (var s = 0; s < level2.length; s++) {
        var leftpos = $(level2[s]).parent().parent().width();
        var toppos = $(level2[s]).parent().position().top;
        var subpos = leftpos + "px";
        $(level2[s]).css("left", subpos);
        $(level2[s]).css("top", toppos);
        $(level2[s]).css("width", '200px');
    }
}
handleMouseLeave = function() {
    if ($('div#menu').height() >= divheight) {
        $('div#menu').animate({ height: origheight + 'px' }, "normal");
    }
    $('div#menu ul.level0 li.item0').removeClass(hoverclass);
    $('div#menu ul.level0 li.item0 ul.level1').hide().removeClass(hoverclass);
    $('div#menu ul.level0 li.item0 ul.level1 li.item1 ul.level2').hide().removeClass(subhoverclass);
    $('div#menu ul.level0 li.item0 ul.level1 li.' + subhoverclass).removeClass(hoverclass);
}

handleSubmenuMouseLeave = function() {
    el = $('div#submenu ul li.item0');
    for (var i = 0; i < el.length; i++) {
        if ($(el[i]).children('ul.level1').length > 0) {
            $(el[i]).children('ul.level1').hide();
        }
    }


}

