window.addEvents({
    'domready': function(){
        menuInit();
    },
    'resize': function(){
        menuInit();
    }
});

var Showed = new Array();
var Hided = new Array();
var ShowingTime = 200;
var HideingTime = 200;

function showMenu(id) {
	var menu = $('submenu_' + id);
	menu.getPrevious('a').addClass('active');
	if(Hided[id]) $clear(Hided[id]);
	Showed[id] = showMenuTimed.delay(ShowingTime, id);
}

function hideMenu(id) {
	menu = $('submenu_' + id);
	menu.getPrevious('a').removeClass('active');
	if(Showed[id]) $clear(Showed[id]);
	Hided[id] = hideMenuTimed.delay(HideingTime, id);
}

function showMenuTimed() {
	var menu = $('submenu_' + this);
	menu.setStyle('visibility', 'visible');
	menu.getParent('li').setStyle('z-index', '10000');
}

function hideMenuTimed() {
	menu = $('submenu_' + this);
	menu.setStyle('visibility', 'hidden');
	menu.getParent('li').setStyle('z-index', '1');
}

function menuInit() {
	$each($$('#newMenu ul.submenu'), function(ul, index) {
		dC = document.getCoordinates(); // document coordinates
        dW = dC.width; // document width
        dH = dC.height; // document height

		pC = ul.getParent('li').getCoordinates(); // parent coordinates
		pL = pC.left; // parent left
        pW = pC.width; //parent width
        pT = pC.top; //parent top

		mC = ul.getCoordinates(); // ul menu coordinates
		mL = mC.left; // ul menu left
		mW = mC.width; // ul menu width
		mH = mC.height; // ul menu height

		// left
		if(dW > (pL + (ul.hasClass('level1') ? 0 : pW) + mW)) {
			ul.setStyle('left', (ul.hasClass('level1') ? 0 : pW) - 1 + 'px');
		}
		else {
            if(ul.hasClass('level1')) {
            	ul.setStyle('left', -(20 + mW - (dW - pL)) + 'px');
            }
			else {
            	if(pL > mW) {
            		ul.setStyle('left', -(mW - 1) + 'px');
				}
				else {
					if(pL < 30) {
                    	ul.setStyle('left', mW * 0.5 - 1 + 'px');
					}
					else {
                    	ul.setStyle('left', -(pL - 1 - 20) + 'px');
					}
   				}
			}
		}

		// top
		if(dH > pT + mH) {
       		ul.setStyle('top', (ul.hasClass('level1') ? 20 : -2) + 'px');
		}
		else {
			ul.setStyle('top', -Math.min((mH - (dH - pT) + 20), (pT - 10)) + 'px');
		}

//		new Element('li').inject(ul).set('html', '<a href="#">' + 'dW:' + dW + ', dH:' + dH + ', pL:' + pL + ', pW:' + pW + ', pT:' + pT + ', mL:' + mL + ', mW:' + mW + ', mH:' + mH + '</a>');
	});
}