window.addEvent('domready', function () {

    if ($('mainMenu')) {

        var heightOnChange = false;
        var resizer = null;
        var mainStartHeight = 0;
        var heightWay = -1;

        function resetHeightChecher() {
            heightOnChange = false;
            $('mainMenu').setStyle('height', 'auto');
        }

        function resetCloseHeightChecher() {
            heightOnChange = false;

        }

        function checkHeight(way) {
            heightWay = way;
            heightOnChange = true;
            resizeMain();
        }

        function resizeMain() {
            var rightH = $('main-right').getCoordinates().height;
            var leftH = $('main').getCoordinates().height;
            if (heightOnChange) {
                if (rightH > mainStartHeight) {
                    $('main').setStyle("height", rightH + "px");
                }
                resizer = setTimeout(resizeMain, 50);
            }
            else {
                if (0 == heightWay) {
                    $('main').setStyle("height", "auto");
                }
                heightWay = -1;
                clearTimeout(resizer);
            }
        }


        $('mainMenu').onMouseLeave = function (event) {
            var hideMenu = true;
            var waitingDelay = effectWaitingOut;
            if (event) {
                event = new Event(event);
                if (event.type == 'click' && event.target) {
                    var target = event.target;
                    while (target != null) {
                        if (target.getAttribute('id') == 'main-menu-contener') {
                            target = null;
                            hideMenu = false;
                        }
                        else {
                            target = target.parentNode != document ? target.parentNode : null;
                        }
                    }
                    waitingDelay = 0;
                }
            }

            if (hideMenu) {
                if (window.ie6) {
                    checkHeight(0);
                }
                $clear(menuFx.delay);
                menuFx.stop();
                $clear(menuCloseFx.delay);
                if (waitingDelay == 0)menuCloseFx.stop();
                var e = new Event(event);

                if ($('mainMenu').offsetHeight >= startHeight) {
                    $('mainMenu').setStyle('height', $('mainMenu').offsetHeight);
                    menuCloseFx.delay = menuCloseFx.start.delay(waitingDelay, menuCloseFx, [$('mainMenu').offsetHeight, startHeight]);
                }
            }
        };


        // The initialisation

        $('main-right').setStyle('min-height', '0');
        var rightSize = $('main-right').getCoordinates().height;
        var menuSize = $('mainMenu').getCoordinates().height;
        var mainSize = $('main').getCoordinates().height;
        if ($('fullWidth')) {
            mainSize = $('fullWidth').getCoordinates().top - $('main').getCoordinates().top;
        }
        $('main-right').setStyle('min-height', '');

        var margin = 15;

        var effectDuration = 300;
        var effectWaitingOut = 3000;
        var effectWaitingOver = 0;

        var rightBlank = (mainSize - rightSize) > 0 ? (mainSize - rightSize) : 0;
        rightSize = mainSize > rightSize ? mainSize - margin : rightSize - margin;
//        $('main-right').setStyle('min-height', rightSize);
        var rightHeightWithoutMenu = 80;

        $('main-right').getChildren().each(function(child){
            if(child.getAttribute('id') != 'main-menu-contener')
                rightHeightWithoutMenu += child.getCoordinates().height;
        });

        var startHeight = rightBlank + menuSize;
        startHeight = mainSize - rightHeightWithoutMenu;
        startHeight -= (startHeight % 20);

        $('mainMenu').setStyle("display", "block");
        var menuFx = new Fx.Style($('mainMenu'), 'height', { duration:effectDuration, transition:Fx.Transitions.Quint.easeInOut, onComplete:resetHeightChecher });
        var menuCloseFx = new Fx.Style($('mainMenu'), 'height', { duration:effectDuration, transition:Fx.Transitions.Quint.easeInOut, onComplete:resetCloseHeightChecher });


        // add the listeners
        $('main-menu-contener').addEvent('mouseenter', function (event) {
            if (window.ie6) {
                checkHeight(1);
            }
            $clear(menuCloseFx.delay);
            menuCloseFx.stop();
            $clear(menuFx.delay);
            menuFx.stop();
            var e = new Event(event);
            menuFx.delay = menuFx.start.delay(effectWaitingOver, menuFx, [$$('#mainMenu ul')[0].offsetHeight, menuFx.offset]);
            e.stop();
        }.bind(this));

        $('mainMenu').addEvent('mouseleave', $('mainMenu').onMouseLeave.bind(this));
        $$('body')[0].addEvent('click', $('mainMenu').onMouseLeave.bind(this));

        menuFx.stop();
        menuFx.set(startHeight);
    }
}.bind(this));
