var menuengine = {};
menuengine.cancel = false;
menuengine.cancelShow = false;
menuengine.cancelEnterHide = false;
menuengine.manualHide = false;
menuengine.hideMenuInterval = null;

$(document).ready(function() {
	$(document).click(function() {
		menuengine.hideMenu();
	});

	$(document).keypress(function(e) {
		if (menuengine.manualHide) return;
		//if (e.keyCode==27) {
			menuengine.hideMenu();
		//}
	});

	$(document).mousemove(function() {
		if (menuengine.manualHide) return;
		clearInterval(menuengine.hideMenuInterval);
		menuengine.hideMenuInterval = setInterval(function() {
			if (!menuengine.cancel) {
				menuengine.hideAllMenus();
			}
			menuengine.cancel = false;
	
			clearInterval(menuengine.hideMenuInterval);
		}, 10);
	});

	/*<select class="DROPDOWN"> will be converted to onhover menu*/
	 $("SELECT.DROPDOWN").each(function(index, elm) {
 		var menuShow = $(elm).attr("show");
 		if (menuShow==null) {
 			menuShow = "right";
 		}

 		$(elm.parentNode).append("<span class='DROPDOWN CLOSED' id='SELECT_TITLE_" + index + "'>Title</span><ul use='#SELECT_TITLE_" + index + "' highlightrow='MENU_ITEM_HOVER' show='"+menuShow+"' class='MENU SELECT_" + index + "'></ul>");
 		$(elm).children("OPTION").each(function(idx, opt) {
 			$(".SELECT_" + index).append("<li class='CAPTION MENU_ITEM_" + index + "_" + idx + "'><a href='javascript:'>" + opt.innerHTML + "</a></li>");
 			$(".MENU_ITEM_" + index + "_" + idx).click(function() {
 				$(elm).val(idx);
 				$(elm).change();
 				$("#SELECT_TITLE_" + index).html($(elm).find("option:selected").text());
 				menuengine.hideMenu();
 			});
 		});
 		 
		$("#SELECT_TITLE_" + index).html($(elm).find("option:selected").text());
 		$(".SELECT_" + index).insertBefore($(elm));
 		$("#SELECT_TITLE_" + index).css("min-width", $(elm).width());
 		$(".SELECT_" + index).css("min-width", $(elm).width());
 		$(elm).hide();
 	});
	
	setTimeout(function () {
		$(".MENU").click(function() {
			setTimeout(function() {menuengine.manualHide = true;}, 10);
			clearInterval(menuengine.hideMenuInterval);
			menuengine.cancel = true;
		});
		$(".MENU").mousemove(function() {
			clearInterval(menuengine.hideMenuInterval);
			menuengine.cancel = true;
		});
		$(".MENU A").live("focus", function() {
			clearInterval(menuengine.hideMenuInterval);
			menuengine.manualHide = true;
			menuengine.cancel = true;
		});
		$(".MENU A").live("blur", function() {
			menuengine.manualHide = false;
			menuengine.hideMenu();
		});
		$(".MENU_UNDERLAY").mousemove(function() {
			clearInterval(menuengine.hideMenuInterval);
			menuengine.cancel = true;
		});
		$(".TEMP_MENU_BORDER").mousemove(function() {
			clearInterval(menuengine.hideMenuInterval);
			menuengine.cancel = true;
		});
		$(".MENU .CAPTION").mouseover(function() {
			$(this).addClass("MENU_ITEM_HOVER");
		});
		$(".MENU .CAPTION").mouseout(function() {
			$(this).removeClass("MENU_ITEM_HOVER");
		});
		$(".MENU LI").click(function() {
			location.href = $(this).find("A").get(0).href;
			return false;
		});

	}, 100);

	$(".MENU").each(function(index, elm) {
		var use = $(elm).attr("use");
		if (use!=null&&use!='') {
			menuengine.setAsMenu(elm);
		}
	});
});

menuengine.setAsMenu = function(menuElm) {
	var titleElmId = $(menuElm).attr("use");
	var highlightRow = $(menuElm).attr("highlightrow");
/*
	if (highlightRow==null||highlightRow=='false') {
		highlightRow = false;
	} else if (highlightRow=='true') {
		highlightRow = true;
	} else {
		highlightRow = false;
	}*/
	if (highlightRow!=null) {
		$(menuElm).find("LI").mouseover(function() {
			if ($(this).parent().attr("header")=="true") {
				$(this).attr("original_color", $(this).find("A").css("color"));
				$(this).find("A").css("color", "white");
			}
			$(this).addClass(highlightRow);
		});
		$(menuElm).find("LI").mouseout(function() {
			if ($(this).parent().attr("header")=="true") {
				$(this).find("A").css("color", $(this).attr("original_color"));
			}
			$(this).removeClass(highlightRow);
		});
	}
	$(titleElmId).click(function() {
		setTimeout(function() {menuengine.manualHide = true;}, 10);
		clearInterval(menuengine.hideMenuInterval);
		menuengine.cancel = true;

		if (menuengine.cancelEnterHide) return;
		if ($(menuElm).is(":visible")) {
			menuengine.cancelShow = true;
			menuengine.cancel = false;
		} else {
			clearInterval(menuengine.hideMenuInterval);
			setTimeout(function() {menuengine.cancel = true;}, 10);

			menuengine.showMenuItem(menuElm, titleElmId, true);

		}
		menuengine.cancelEnterHide = false;

	});

	$(titleElmId).mouseout(function() {
		menuengine.cancelShow = false;
	});

	$(titleElmId).mouseenter(function() {
		clearInterval(menuengine.hideMenuInterval);
		menuengine.cancel = true;
		menuengine.cancelEnterHide = true;
		
		setTimeout(function() {
			menuengine.cancelEnterHide = false;
		}, 700);
	});

	$(titleElmId).mousemove(function() {
		menuengine.showMenuItem(menuElm, titleElmId);
	});

	$(titleElmId).attr("aria-haspopup", "true");
	$(titleElmId).attr("role", "menu");
//	$(titleElmId).attr("tabindex", 0);
	$(titleElmId).live("focus", function() {
		menuengine.showMenuItem(menuElm, titleElmId);
		menuengine.cancel = true;

	});
	$(titleElmId).live("blur", function() {
		menuengine.manualHide = false;
		menuengine.hideMenu();

	});
};

menuengine.showMenuItem = function (menuElm, titleElmId, clicked) {
	if (clicked==null) {
		clicked = false;
	}
	
	if (!clicked) {
		if (menuengine.cancelShow) return;
		clearInterval(menuengine.hideMenuInterval);
		menuengine.cancel = true;
		if ($(menuElm).is(":visible")) return;
	}
	
	menuengine.hideAllMenus();
	var menuShow = $(menuElm).attr("show");
	if (menuShow==null) {
		menuShow = "right";
	}
	if ($.browser.msie  && parseInt($.browser.version) == 8) {
		menuShow="right";
	}
	

	if (menuShow=="right") {
		$(menuElm).addClass("MENU_RIGHT");
	} else {
		$(menuElm).addClass("MENU_LEFT");
	}
	
	var dom = $(titleElmId);
	var wdth = dom.width();
	wdth+=(dom.css("padding-left").replace(/px/gi, '') * 1);
	wdth+=(dom.css("padding-right").replace(/px/gi, '') * 1);
	wdth+=(dom.css("borderLeftWidth").replace(/px/gi, '') * 1);
	wdth+=(dom.css("borderRightWidth").replace(/px/gi, '') * 1);

	var menuWdth = $(menuElm).width();
	menuWdth+=($(menuElm).css("margin-left").replace(/px/gi, '') * 1);
	menuWdth+=($(menuElm).css("margin-right").replace(/px/gi, '') * 1);
	menuWdth+=($(menuElm).css("padding-left").replace(/px/gi, '') * 1);
	menuWdth+=($(menuElm).css("padding-right").replace(/px/gi, '') * 1);
	menuWdth+=($(menuElm).css("borderLeftWidth").replace(/px/gi, '') * 1);
	menuWdth+=($(menuElm).css("borderRightWidth").replace(/px/gi, '') * 1);

	$(menuElm).css("min-width", wdth - 1);

	if (menuShow=="right") {
		$(menuElm).css("left", Math.round($(titleElmId).offset().left));
	} else {
		$(menuElm).css("left", (Math.round($(titleElmId).offset().left) - menuWdth) + wdth - ($.browser.mozilla?1:0));
	}
	
	var offset = dom.get(0).offsetTop;
	var menuTop = dom.get(0).offsetHeight - 1;
	menuTop = $.browser.msie&&menuShow=='right'?menuTop-1:menuTop;
	menuTop = $.browser.mozilla&&menuShow=='left'?menuTop-1:menuTop;


	if ($.browser.msie  && parseInt($.browser.version) == 7) { 
			if (dom.get(0).offsetTop+dom.get(0).offsetHeight<=$("#HEADER_TOP").get(0).offsetHeight) {
				menuTop = 0;
				offset = $("#HEADER_TOP").get(0).offsetHeight - 10;
			} else if (dom.get(0).offsetTop>=$("#HEADER").get(0).offsetHeight) {
				offset = Math.round($(titleElmId).offset().top);
			} else {
				menuTop = 0;
				offset = $("#HEADER").get(0).offsetHeight - 4;
			}
	} 
	 menuTop += offset;

	var isHeader = false;
	var isHeaderTop = false;

	if (menuTop<=$("#HEADER").get(0).offsetHeight) {
		isHeader = true;
	}
	
	if (menuTop<=$("#HEADER_TOP").get(0).offsetHeight) {
		menuTop += 3;
		isHeaderTop = true;
	}
	
	$(menuElm).css("top", menuTop);
	
	if (!isHeader) {
		$(titleElmId).parent().append("<span class='" + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER TEMP_MENU_BORDER'>&nbsp;</span>");
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("height", 1);
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("top", dom.get(0).offsetTop + dom.get(0).offsetHeight - 1);
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("border-left", "1px solid " + $(titleElmId).css("border-left-color"));
		if (menuShow=="left") {
			$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("left", Math.round($(titleElmId).offset().left) + wdth - ($.browser.mozilla?2:1));
		} else {
			$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("left", Math.round($(titleElmId).offset().left));

		}
		$(titleElmId).css("position", "relative");
		$(titleElmId).css("z-index", 99998);
		$(titleElmId).css("border-bottom-color", $(menuElm).css("background-color"));
		$(titleElmId).css("background-color", $(menuElm).css("background-color")); //TODO: button is transparent, so border is displayed, have border element replace this.
		$(menuElm).css("z-index", 99997);
		$(menuElm).css("border-top", "1px solid " + $(menuElm).css("border-bottom-color"));
		if($(titleElmId).hasClass("FLIPPABLE")) {
			$(titleElmId).toggleClass("FLIP");
		}
	}
	
	if (isHeader&&!isHeaderTop) {
		$(titleElmId).append("<span class='" + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER TEMP_MENU_BORDER'>&nbsp;</span>");
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("height", 20);
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("left", wdth + Math.round($(titleElmId).offset().left));
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("width", menuWdth - wdth - 4);
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("top", dom.get(0).offsetTop + dom.get(0).offsetHeight - 5);
		$("." + titleElmId.replace(/\#/gi, '').replace(/\./gi, '') + "_BORDER").css("border-top", "1px solid " + $(menuElm).css("border-bottom-color"));
			$(menuElm).attr("setHeaderMenu", "true");
			setTimeout(function() {
				//$(menuElm).css("border-top-width", "2px");
				//$("#NAVIGATION .MENU").css("margin-top", "5px");
				$(menuElm).css("-moz-border-bottom-right-radius", "6px");
				$(menuElm).css("border-bottom-right-radius", "6px");
				$(menuElm).css("-moz-border-bottom-left-radius", "6px");
				$(menuElm).css("border-bottom-left-radius", "6px");
			}, 100);
			$(menuElm).css("top", menuTop - 5);
			$(menuElm).css("left", Math.round($(titleElmId).offset().left) - 2);
			
	}
	$(menuElm).slideToggle(150);
	$(titleElmId + " .FLIPPABLE").addClass("FLIP");
	$(titleElmId).toggleClass("CLOSED");
	$(titleElmId).toggleClass("OPENED");

};

menuengine.hideAllMenus = function () {
	//$("#NAVIGATION .MENU").css("border-top-color", $("#NAVIGATION .MENU").css("background-color"));
	$("#NAVIGATION .MENU").css("border-top-width", "0");
	//alert(Math.round($("#NAVIGATION .MENU").css("margin-top").replace(/px/gi, '') * 1) + 2)

	$(".MENU").fadeOut(150);
	$(".HEADER_MENU").fadeOut(150);
	$("#NAVIGATION .MENU").css("-moz-border-bottom-right-radius", "0");
	$("#NAVIGATION .MENU").css("border-bottom-right-radius", "0");
	$("#NAVIGATION .MENU").css("-moz-border-bottom-left-radius", "0");
	$("#NAVIGATION .MENU").css("border-bottom-left-radius", "0");

	$(".DROPDOWN").removeClass("CLOSED");
	$(".DROPDOWN").addClass("CLOSED");
	$(".DROPDOWN").removeClass("OPENED");
	$(".FLIPPABLE").removeClass("FLIP");
	$(".DROPDOWN").css("position", "static");
	$(".DROPDOWN").css("border-bottom-color", "");
	$(".TEMP_MENU_BORDER").each(function(index, elm) {
		$(elm).hide();
		$(elm).remove();
	});
};

menuengine.hideMenu = function() {
	menuengine.manualHide = false;
	menuengine.cancel = false;
	if (menuengine.cancelEnterHide) return;

	clearInterval(menuengine.hideMenuInterval);
	menuengine.hideMenuInterval = setInterval(function() {
		if (!menuengine.cancel) {
			menuengine.hideAllMenus();
		}
		menuengine.cancel = false;
		menuengine.manualHide = false;

		clearInterval(menuengine.hideMenuInterval);
	}, 200);
};


