function ppMenu(menuElement, parentElement, direction) {
	if (direction == undefined) direction = 'vertical';
	$(parentElement).mouseenter(showMenu);
	$(menuElement).mouseenter(showMenu);
	$(parentElement).mouseleave(hideMenu);
	$(menuElement).mouseleave(hideMenu);
	$(menuElement).css({ 'position': 'absolute', 'display': 'none' });
	var tOut = 0;
	var This = this;
	this.subMenuClassName = '';
	this.closeDelay = 250;
	this.mainMenuItem = undefined;
	this.baseZindex = 10000;
	this.hAlign = 'left';
	this.elements = new Array();
	this.menuElement = $(menuElement).get(0);

	function showMenu() {
		if (($(menuElement).css('display') == 'none') || (tOut != 0)) {
			clearTimeout(tOut);
			BringToFront();
			switch (direction) {
				case 'vertical':
					$(menuElement).css({ 'top': $(parentElement).position().top + $(parentElement).height() + 'px' });
					$(menuElement).css({ 'left': $(parentElement).position().left + 'px' });
					if (This.hAlign == 'center') { $(menuElement).css({ 'left': $(parentElement).position().left + ($(parentElement).width() / 2) - ($(menuElement).width() / 2) + 'px' }); }
					$(menuElement).css({ 'display': 'block' });

					break;
				case 'horizontal':
					$(menuElement).css({ 'top': $(parentElement).position().top + 'px' });
					$(menuElement).css({ 'left': $(parentElement).position().left + $(parentElement).width() + 'px' });
					$(menuElement).css({ 'display': 'block' });
					break;
			}
			hideOthers($(menuElement).get(0));			 
		 }

	}

	function hideMenu() {
		tOut = setTimeout(function() {
			$(menuElement).css({ 'display': 'none' });
			SendToBack();
		}, This.closeDelay);
	}

	function hideOthers(el) {
		if (This.mainMenuItem == undefined) return true;
		var elmts = new Array();
		elmts.push(el);
		while (el != This.mainMenuItem.menuElement) { el = el.parentNode;if (Contains(This.elements, el)) { elmts.push(el); }  }
		var i = 0;
		for (i = 0; i < This.mainMenuItem.elements.length; i++) {
			if (Contains(elmts,This.mainMenuItem.elements[i])==false) { $(This.mainMenuItem.elements[i]).css({ 'display': 'none' }); }
		}
	}

	function Contains(a,o) {
		var i = 0;
		for (i = 0; i < a.length; i++) {if (a[i] == o) return true; }
		return false;
	 }

	function BringToFront() {
		var zi = 0;
		$('*').each(function(s) { if (this.style.zIndex > zi) zi = this.style.zIndex; });
		if (zi < This.baseZindex) zi = This.baseZindex;
		$(menuElement).css({ 'zIndex': zi + 1 });
	}
	function SendToBack() { $(menuElement).css({ 'zIndex': 0 }); }

	this.init = function() {
		$('*').each(function(s) { if (This.baseZindex < this.style.zIndex) This.baseZindex = this.style.zIndex + 1; });
		var cn = this.subMenuClassName;
		var pm = this;
		$(menuElement).find('.' + cn).each(function(s) { var m = new ppMenu(this, this.parentNode, 'horizontal'); m.mainMenuItem = pm; This.elements.push(this) })
		$(menuElement).find('*').each(function(s) { if (this.title == '')this.title=''; });
	}
	
}
