/*
jQuery ALE Menu
Version: 1.0.0
Author: fgplus.com
*/

/***********************************************************************************/
var menuNoHide = 30; 		// from left, right, bottom (px)
var menuFadeTime = 400; 	// fade period (ms)

// Rows with posts
var rows = new Array();
rows[0] = new Array(90, 430);
rows[1] = new Array(40, 380);
rows[2] = new Array(160, 515);
rows[3] = new Array(25, 450);
rows[4] = new Array(120, 515);
rows[5] = new Array(10, 410);
rows[6] = new Array(30, 470);
rows[7] = new Array(60, 440);
rows[8] = new Array(40, 500);
rows[9] = new Array(30, 425);
rows[10] = new Array(50, 450);
rows[11] = new Array(30, 490);
rows[12] = new Array(40, 500);
rows[13] = new Array(120, 515);
rows[14] = new Array(25, 490);
var maxRows = 4;

// Rows with pages
var lastRows = new Array();
lastRows[0] = new Array(70, 290, 515);
lastRows[1] = new Array(115, 290, 490);
lastRows[2] = new Array(80, 300, 500);
lastRows[3] = new Array(55, 250, 480);
lastRows[4] = new Array(150, 320, 515);
var maxLastRows = 2;
/***********************************************************************************/

var menuDone = false;

$(function() {

	positionateMenu();
	getMenu();
	
	$("#header").mouseover(function () {
		if ($("#loader").is(":visible")) {
			$("#loader").fadeOut();
		}
		$("#aleMenu").fadeIn(menuFadeTime, function(){
			if ($.browser.msie) {
				this.style.removeAttribute("filter");
			}
		});		
	});
	
	$(window).resize(function (e) {				
		positionateMenu();
	});
	
	$().mousemove(function (e) {
		var toHide = false;
		if ($("#aleMenu").is(":visible")) {
			try {				
				var relativeY = e.pageY;
				var relativeX = e.pageX;
				var menuTop = $("#aleMenu").position().top;
				var menuBottom = menuTop + $("#aleMenu").height();
				var menuLeft = $("#aleMenu").position().left;
				var menuRight = menuLeft + $("#aleMenu").width();
				
				if (
						relativeY > menuBottom && relativeY - menuBottom > menuNoHide ||
						relativeY > menuTop && relativeX < menuLeft && menuLeft - relativeX > menuNoHide ||
						relativeY > menuTop && relativeX > menuRight && relativeX - menuRight > menuNoHide								
				) {
					toHide = true;
				}
				
			}
			catch(e1) {
			}
		}
		if (toHide) {
			deactivateMenu();
		}
	});

	function getMenu() {
		try {			
			if (!menuDone) {
				makeMenu();
			}
		}
		catch(e) {}
	}
	
	function makeMenu() {
		
		var menuHTML = "";
		var menuPostRows = 0;
		var menuPageRows = 0;
		
		// Rows with posts
		var noLinks = Math.ceil($('#aleMenuData ul li.item').length);		
		menuPostRows = getMenuRows(noLinks, maxRows, rows[0].length);

		// Rows with pages
		var noLastLinks = Math.ceil($('#aleMenuData ul li.last').length);
		menuPageRows += getMenuRows(noLastLinks, maxLastRows, lastRows[0].length);
		
		$("#aleMenu").height((menuPostRows + menuPageRows) * 20 + "px");

		$("#aleMenu").empty();
		getMenuItems(rows, noLinks, menuPostRows, "item");
		getMenuItems(lastRows, noLastLinks, menuPageRows, "last");
		
		menuDone = true;

	}
	
	function getMenuItems(rows, noLinks, menuRows, liClass) {

		var rowLinksNo = Math.ceil(noLinks / menuRows);
		var i = 0, remainRows = menuRows, linkOnRow = 1, linkHTML, menuHTML = "";
		
		if (menuRows > rows.length) {
			for (j = 1; j <= menuRows - rows.length; j++) {
				rows[rows.length] = rows[j - 1];
			}
		}
		
		$("#aleMenuData").find("ul li[class='" + liClass + "'] a").each(function() {

			linkHTML = "";			
			
			if (i > 0 && linkOnRow - 1 == rowLinksNo) {
				linkHTML += '</div>';
				linkOnRow = 1;
				remainRows--;
			}

			$(this).css({"left" : rows[menuRows - remainRows][linkOnRow - 1] + "px"});
			
			if (linkOnRow == 1) {
				linkHTML += '<div class="menuRow">';				
			}			
			
			menuHTML += linkHTML + $(this).parent().html();

			if (i % rowLinksNo == 0) {
				if (rowLinksNo > 1 && (noLinks - i) % (rowLinksNo - 1) == 0 && (noLinks - i) / (rowLinksNo - 1) == remainRows) {
					rowLinksNo--;
				}
			}
			
			linkOnRow++;
			i++;
		});

		if (i > 0) {
			$("#aleMenu").append(menuHTML + '</div>');
		}

	}
	
	function getMenuRows(noLinks, maxRows, itemsOnRow) {
	
		if (noLinks == 0) {
			return 0;
		}
		
		var noRows = 0;
		if (noLinks <= maxRows) {
			noRows = noLinks;
		}
		else {
			if (noLinks > maxRows * itemsOnRow) {
				noRows = Math.ceil(noLinks / itemsOnRow);
			}
			else {			
				noRows = maxRows;
			}
		}
		
		return noRows;
	}

	function deactivateMenu() {
		try {
			if ($("#aleMenu").is(":visible")) {
				$("#aleMenu").fadeOut(menuFadeTime);
			}
		}
		catch(e) {}
	}
	
	function positionateMenu() {
		try {
			var headerLeft = $("#header").position().left;
			$("#aleMenu").css({"left" : headerLeft});
		}
		catch(e) {}
	}
});
