var SlideMenu = {
	create: function (elementID, menuButton, direction) {
				var newmenu = Object();	
				var oldcolor = '';
				
				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)
				{
					oldcolor = $(menuButton).style.backgroundColor;
					var fx = new Fx.Styles($(menuButton).getElements('img')[0], {duration:200, wait:false});
					var fx2 = new Fx.Styles($(menuButton), {duration:200, wait:false});
					$(menuButton).slider = newmenu;
					$(menuButton).addEvent('mouseenter', function(){
						fx.start({
							'opacity': '1'
						});
						fx2.start({
							'background-color': '#00826b'
						});
					});
					$(menuButton).addEvent('click', function(){this.slider.show();});
					$(menuButton).addEvent('mouseout', function(){this.slider.unprop();});
					/* $(menuButton).addEvent('mouseleave', function(){
						fx.start({
							'opacity': '0'
						});
					});
					*/
				}
				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: 500, 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();
						if (menuButton) {
							var fx = new Fx.Styles($(menuButton).getElements('img')[0], {duration:200, wait:false});
							var fx2 = new Fx.Styles($(menuButton), {duration:200, wait:false});
							fx.start({
								'opacity': '0'
							});
							fx2.start({
								'background-color': '#015850'
							});
						}
					}
				}
 
				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);
				}
				
 				newmenu.menu.parentNode.className = 'slidediv';
				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();
			}
};