/*
Menu Version 2.0b
variables with a $ in the front are Jquery Objects.

example: 
$divs = $('div')
*/

function initMenu(menuHolder,direction,menuArray,buttonOn, reverse){
	var dataStore = $.data($("#"+menuHolder).get(0), "slideMenu", {});
	direction  = direction.toLowerCase();
	reverse = reverse == undefined ? false : true;
	dataStore["buttonOn"] = buttonOn;
	dataStore["direction"] = direction;
	dataStore["menuHolder"] = menuHolder;
	dataStore["menus"] = new Array();
	for(var i = 0; i < menuArray.length; i++){
		var hasMenu = buildMenuItems(direction,reverse,menuHolder, menuArray[i].pageid,buttonOn, 2,menuArray[i].hoffset , menuArray[i].voffset , menuArray[i].animate);
		if(hasMenu)
			dataStore["menus"].push(menuArray[i].pageid);
	}
	buildMenuAction(menuHolder);
}

function buildMenuItems(direction, reverse, menuHolder, pageID, buttonOn, menuLevel, hOffset, vOffset, menuAnimate) {
	var $menuButton = $("#"+menuHolder+"_"+pageID);
	var $menuHolder = $("#"+menuHolder);
	hOffset = hOffset == undefined?0:hOffset;
	vOffset = vOffset == undefined?0:vOffset;
	if(pageID == buttonOn)
		$menuButton.addClass("on");	
	var arr = $.grep(pageList, function (n,i){return (n.parentID == pageID && n.level == menuLevel)});
	if(arr.length > 0){
		if(direction == "up" || reverse == true)
			arr.reverse();
		$menuHolder.after("<div id='L2_"+pageID+"' class='subMenu"+direction+"'></div>");
		var $subMenu = $("#L2_" + pageID);
		$subMenu.css("display","none");
		$.each(arr,function(){ 
			var target = this.target == true ? "_blank":"_self";
			var $aTag = $(document.createElement("a"))
							.data("menuHolder",menuHolder)
							.data("pageID",pageID)
							.addClass("subMenuItems"+direction)
							.attr("href", this.pageURL)
							.attr("target",target)
							.append("<span>"+this.pageName+"</span>");
			$aTag.hover(function(){
				var $obj = $(this);
				var dataStore = $("#"+ $obj.data("menuHolder")).data("slideMenu");
				dataStore["active"] = $obj.data("pageID");
				clearTimeout(dataStore["timeout"]);
			},function(){
				var $obj = $(this);
				var dataStore = $("#"+ $obj.data("menuHolder")).data("slideMenu");
				var direction = dataStore["direction"];
				dataStore["active"] = 0;
				dataStore["timeout"] = setTimeout(function(){ animateAllOut(menuHolder)}, 100);
			});
			$subMenu.append($aTag); 
		});
		$subMenu.prepend("<div id='menu-header'><!-- --></div>")
			.append("<div id='menu-footer'><!-- --></div>")
			.wrapInner("<div id='holder'></div>")
			.css("overflow","hidden")
			.data("hOffset",hOffset)
			.data("vOffset",vOffset)
			.data("menuAnimate",menuAnimate)
            .data("pageID",pageID)
            .data("menuHolder",menuHolder);
		var $itemHolder = $subMenu.children();
		$itemHolder.children().filter(function(){  
				return $(this).attr("id") == "menu-header" || $(this).attr("id") == "menu-footer";
			})
			.data("menuHolder",menuHolder)
			.data("pageID",pageID)
			.hover(function(){
				var $obj = $(this);
				var dataStore = $("#"+ $(this).data("menuHolder")).data("slideMenu");
				dataStore["active"] = $obj.data("pageID");
				clearTimeout(dataStore["timeout"]);
			},function(){
				var $obj = $(this);
				var dataStore = $("#"+ $(this).data("menuHolder")).data("slideMenu");
				var direction = dataStore["direction"];
				dataStore["active"] = 0;
				dataStore["timeout"] = setTimeout(function(){ animateAllOut(menuHolder)}, 100);
			});
		$menuButton.data("hasMenu",true);
		positionSubMenuHolder(direction, $subMenu);
		return true;
	}
	return false;
}

function buildMenuAction(menuHolder){
	var $menuItems = $("#"+menuHolder+" li a");
	$menuItems.each(function(){
		$obj = $(this);
		$obj.data("pageID",$(this).attr("id").substring(menuHolder.length+1,$(this).attr("id").length)).data("menuHolder",menuHolder);
	});
	$("#"+menuHolder+" li a").hover(function () {
		var $obj = $(this);
		$obj.addClass("on");
		if($obj.data("hasMenu")){
			var pageID =  $obj.data("pageID");
			var $menuHolder = $("#"+ $obj.data("menuHolder"));
			var dataStore =  $menuHolder.data("slideMenu");
			dataStore["active"] = pageID;
			var direction = dataStore["direction"];
			var menuHolder = dataStore["menuHolder"];
			animateSubMenuHolderIn(menuHolder,direction,pageID);
		}
	}, 
	function () {
		var $obj = $(this);
		var pageID = $obj.data("pageID");
		var $menuHolder = $("#"+$obj.data("menuHolder"));
		var menuHolder = $obj.data("menuHolder");
		var dataStore =  $menuHolder.data("slideMenu");
		var direction = dataStore["direction"];
		
		if($obj.data("hasMenu")){
			dataStore["active"] = 0;
			dataStore["timeout"] = setTimeout(function(){ animateAllOut(menuHolder)}, 50);
		} else {
			if(dataStore["buttonOn"] != pageID)
				$obj.removeClass("on");
		}
	});
}

function positionSubMenu(direction , $menuButton, $subMenu){
	var offset = $menuButton.getTopLeft();
	var top = 0;
	var left = 0;
	switch (direction){
	case "up":
		top = parseInt(offset.top) - parseInt($subMenu.height()) + parseInt($subMenu.data("vOffset"));
		left = parseInt(offset.left) + parseInt($subMenu.data("hOffset"));
	break;
	case "down":
		top = parseInt(offset.top) + $menuButton.height() + parseInt($subMenu.data("vOffset"));
		left = parseInt(offset.left) + parseInt($subMenu.data("hOffset"));	
	break;
	}
	$subMenu.css("top", top+"px");
	$subMenu.css("left", left+"px");
}

function positionSubMenuHolder(direction,$subMenu){
	var top = 0;
	var left = 0;
	switch (direction){
		case "up":
			top = $subMenu.height();
		break;
		case "down":
			top = $subMenu.height() * -1; 
		break;
	}
	var $subMenuHolder = $subMenu.children("#holder");
	$subMenuHolder.css("top",top).css("left",left).css("position","relative");
}

function animateSubMenuHolderIn(menuHolder,direction,pageID) {
	var $menuButton = $("#"+menuHolder+"_"+pageID);
	var $subMenu =  $("#L2_" + pageID);
	var $subHolder = $("#L2_" + pageID+" #holder");
	var top = 0;
	var left = 0;
	
	positionSubMenu(direction, $menuButton, $subMenu);
	
	
	$menuButton.addClass("on");
	$subHolder.queue("fx", []).stop();
	$subMenu.show().css("z-index",1000);;
	switch (direction){
		case "up":
			$subHolder.animate({top: 0},500);
		break;
		case "down":
			$subHolder.animate({top: 0},500); 
		break;
	}
}

function animateSubMenuHolderOut(menuHolder,direction,pageID) {
	var $menuButton = $("#"+menuHolder+"_"+pageID);
	var $subMenu =  $("#L2_" + pageID);
	var $subHolder = $("#L2_" + pageID+" #holder");
	var dataStore = $("#"+menuHolder).data("slideMenu");
	var top = 0;
	var left = 0;
	
	if(dataStore["buttonOn"] != pageID)
		$menuButton.removeClass("on");
	
	$subMenu.css("z-index",500);
	$subHolder.queue("fx", []).stop();
	switch (direction){
		case "up":
			top = $subMenu.height();
			$subHolder.animate({top: top},500);
		break;
		case "down":
			top = parseInt($subMenu.height()) * -1;
			$subHolder.animate({top: top},500); 
		break;
	}
	$subHolder.queue(function () {
		$(this).parent().hide();
		$(this).dequeue();
	});	
}

function animateAllOut(menuHolder){
	var $menuHolder = $("#"+menuHolder);
	var dataStore = $menuHolder.data("slideMenu");
	var menus = dataStore["menus"];
	var active = dataStore["active"];
	var direction = dataStore["direction"];
	$.each(menus,function(){
		//alert(this)
		if(this != active)
			animateSubMenuHolderOut(menuHolder,direction,this);
	});
}


