var SlideMenu = {
	create: function (elementID, menuButton, direction) {
				var newmenu = Object();
				newmenu.props = 0;
				newmenu.mode = 'vertical';
				if (typeof(direction) != "undefined" && direction != null) newmenu.mode = direction;
 
				//Move the menu of the screen, show the menu, create the Menu, collapse the menu, replace the menu.
				newmenu.menu = $(elementID);
				newmenu.menu.slider = newmenu;
				newmenu.menu.addEvent('mouseover', function(){this.slider.prop();});
				newmenu.menu.addEvent('mouseout', function(){this.slider.unprop();});
				if (menuButton)
				{
					$(menuButton).slider = newmenu;
					$(menuButton).addEvent('mouseover', function(){this.slider.show();});
					$(menuButton).addEvent('mouseout', function(){this.slider.unprop();});
				}
				newmenu.menu.style.visibility = "hidden";
				newmenu.menu.style.display = "block";
				newmenu.menu.style.left = (newmenu.menu.offsetLeft - 1000) + "px";
				newmenu.menu.style.visibility = "visible";
				newmenu.slider = new Fx.Slide(elementID, {duration: 400, mode: newmenu.mode}).hide();
				newmenu.menu.style.left = (newmenu.menu.offsetLeft + 1000) + "px";
 
				newmenu.instanceID = elementID;	
				SlideMenu.instances[newmenu.instanceID] = newmenu;
 
				newmenu.show = function(force) {
					if (force) this.props = 0;
					if (this.props == 0)
					{
						this.slider.stop();
						this.slider.slideIn();
						this.prop();
					}
				}
 
				newmenu.hide = function() {
					if (this.props == 0)
					{
						this.slider.stop();
						this.slider.slideOut();
					}
				}
 
				newmenu.prop = function() {
					this.props++;
				}
 
				newmenu.hideTimer = null;
				newmenu.unprop = function() {
					if (this.props <= 0)
						this.props = 0;
					else
						this.props--;
					clearTimeout(this.hideTimer);
					this.hideTimer = setTimeout("SlideMenu.instances['"+this.instanceID+"'].hide();", 200);
				}
				
				return newmenu;
			},
 
 
	instances: new Array(),	//Public static member containing references to all isntances of SlideMenu objects.
 
	//show will show a menu if it is not already shown, and prop it open.
	show:	function (id, force) {
				if (typeof(SlideMenu.instances[id]) == "object")
					SlideMenu.instances[id].show(force || false);
			},
	//unprop takes the prop off and attempts to hide the menu in 200ms.
	unprop:	function (id) {
				if (typeof(SlideMenu.instances[id]) == "object")
					SlideMenu.instances[id].unprop();
			},
	//prop adds another prop to the menu so that it won't hide until it is unpropped.
	prop:	function (id) {
				if (typeof(SlideMenu.instances[id]) == "object")
					SlideMenu.instances[id].prop();
			}
};
