SCM_create_menu = function(){
	var eSwitch = YAHOO.util.Event;
	var Ydom	= YAHOO.util.Dom;
	var Ybutton	= YAHOO.widget.Button;
	var eAnim	= YAHOO.env.ua;
	var o_anim;
	
	return{
		init: function(){
			eSwitch.onAvailable('index_menu', this.build_menu);
			eSwitch.onContentReady('memberbutton_container', this.member_button);
		},
		
		build_menu: function(){
			var menu_bar = new YAHOO.widget.MenuBar("index_menu",
			{
				autosubmenudisplay: true, 
                hidedelay: 750,
				lazyload: true,
				shadow: true
			});

			menu_bar.subscribe("beforeShow", SCM_create_menu.submenu_before_show);
			menu_bar.subscribe("show", SCM_create_menu.on_submenu_show);
			menu_bar.render();
		},

		submenu_before_show: function(p_sType, p_sArgs){
			var o_body, o_element, o_shadow, o_ul;

			if(this.parent){
				o_element = this.element;
				o_shadow = o_element.lastChild;
				o_shadow.style.height= "Opx";

				// stop  the animation instance if it is currently animation a Menu
				if(o_anim && o_anim.isAnimated){
					o_anim.stop();
					o_anim = null;
				}

				// set the body element's "overflow" property to "hidden" to clip the display of its negatively positioned <ul> element
				o_body = this.body;

				if(this.parent && !(this.parent instanceof YAHOO.widget.MenuBarItem)){
					if(eAnim.gecko){
						o_body.style.width = o_body.clientWidth + "px";
					}

					if(eAnim.ie == 7){
						o_element.style.width = o_element.clientWidth + "px";
					}
				}

				o_body.style.overflow = "hidden";

				// set the <ul> element's "marginTop" property to a negative value so that the Menu's height collapses
				o_ul = o_body.getElementsByTagName("ul")[0];
				o_ul.style.marginTop = ("-" + o_ul.offsetHeight + "px");

			}
		},

		on_tween: function(p_sType, p_aArgs, p_oShadow){
			if(this.cfg.getProperty("iframe")){
				this.syncIframe();
			}

			if(p_oShadow){
				p_oShadow.style.height = this.element.offsetHeight + "px";
			}
		},

		on_animation_complete: function(p_sType, p_aArgs, p_oShadow){
			var o_body = thsi.body,
				o_ul = o_body.getElementsByTagName("ul")[0];

			if(p_oShadow){
				p_oShadow.style.height = this.element.offsetHeight + "px";
			}

			o_ul.style.marginTop = "";
			o_body.style.overflow = "";

			if(this.parent && !(this.parent instanceof YAHOO.widget.MenuBarItem)){

				if(eAnim.gecko){
					o_body.style.width = "";
				}

				if(eAnim.ie == 7){
					this.element.style.width = "";
				}

			}

		},

		on_submenu_show: function(p_sType, p_sArgs){
			var o_element, o_shadow, o_ul;

			if(this.parent){
				o_element	= this.element;
				o_shadow	= o_element.lastChild;
				o_ul		= this.body.getElementsByTagName("ul")[0];

				o_anim = new YAHOO.util.Anim(
					o_ul,
					{ marginTop: { to: 0} },
					.5,
					YAHOO.util.Easing.easeOut
				);

				o_anim.onStart.subscribe(
					function(){
						o_shadow.style.height = "100%";
					}
				);

				o_anim.animate();

				if(YAHOO.env.ua.ie){
					o_shadow.style.height = o_element.offsetHeight + "px";
					o_anim.onTween.subscribe(SCM_create_menu.on_tween, o_shadow, this);
				}

				o_anim.onComplete.subscribe(SCM_create_menu.on_animation_complete, o_shadow, this);

			}
		},

		member_button: function(){
			var button = new Ybutton({
				id: "member-button",
				label: "Members",
				container: 'memberbutton'
			});

			button.on('appendTo', function(){
				var anim_button = new YAHOO.util.ColorAnim(
					'member-button',
					{
						backgroundColor: { to: '#B1DDFF'}
					}
				);

				anim_button.onComplete.subscribe(function(){
					this.attributes.backgroundColor.to = (this.attributes.backgroundColor.to == '#B1DDFF') ? '#016BBD' : '#B1DDFF';
					this.animate();
				});

				anim_button.animate();
				SCM_create_menu.create_menu_overlay();
				SCM_create_menu.load_member_pages();
			});

			button.on('click', SCM_create_menu.show_member_pages);
		},

		create_menu_overlay: function(){
			//var button			= Ydom.get('member-button');
			//var button_region	= Ydom.getRegion(button);

			var main = document.createElement('div');
			var body = document.createElement('div');

			Ydom.setAttribute(main, 'id', 'member_menu_container');
			Ydom.setStyle(main, 'visibility', 'hidden');
			Ydom.setStyle(main, 'height', '0px');

			Ydom.setAttribute(body, 'id', 'member_menu');
			Ydom.addClass(body, 'member_menu');
			//Ydom.setStyle(body, 'width', button_region.width + 'px');

			main.appendChild(body);
			Ydom.get('memberbutton_container').appendChild(main);
		},

		load_member_pages: function(){
			var request_url	= '/contents/ajax_member_menu';
			var container	= Ydom.get('member_menu');

			var callback = {
				success : function(o){
					if(o.responseText !== undefined){
						var response = o.responseText.split('<!--');
						if(response[0] != 'error'){
							container.innerHTML = response[0];
						}
					}
					else{
						alert('failed sending the request to the server');
					}
				},
				failure: function(o){

					if(o.responseText !== undefined){
						alert('the request to the server failed:\n' + o.statusText);
					}
					else{
						alert('failed sending the request to the server');
					}

				}
			};

			var request = YAHOO.util.Connect.asyncRequest('POST', request_url, callback);
		},

		show_member_pages: function(){

			function manage_menu_overlay(){
				var menu		= Ydom.get('member_menu_container');
				var menu_region	= undefined;

				menu_region	= Ydom.getRegion(menu);
				if(menu_region.height < 1){
					var body_region	= Ydom.getRegion('member_menu');
					var to_height	= body_region.height;

					open_menu(menu, to_height);
				}
				else{
					close_menu(menu);
				}

			}

			function open_menu(menu, to_height){
				var open_menu = new YAHOO.util.Anim(menu, {
					height: { to: to_height }
				}, 0.25);

				Ydom.setStyle(menu, 'visibility', 'visible');
				open_menu.animate();
			}

			function close_menu(menu){
				var menu_close = new YAHOO.util.Anim(menu, {
					height : { to: 0 }
				}, 0.25);

				menu_close.onComplete.subscribe(function(menu){
					Ydom.setStyle(menu, 'visibility', 'hidden');
				})

				menu_close.animate();
			}

			manage_menu_overlay();
		}

	};
}();

SCM_create_menu.init();
