MW.namespace("controls.panel");

(function() {
	var manager;
	
	/**
	 * A single preview panel
	 * 
	 * requires YAHOO selector and YAHOO animation
	 * 
	 * @see YAHOO.widget.Overlay
	 * @see YAHOO.util.Selector
	 * @see YAHOO.widget.ContainerEffect
	 * 
	 */
	MW.controls.panel.Preview = function(elm,trigger,mgr,align)
	{
		this.panel = new YAHOO.widget.Overlay(elm,{
			visible: false,
			context: [trigger,align[0],align[1],["beforeShow", "windowResize"]],
			effect: {effect: YAHOO.widget.ContainerEffect.FADE, duration:0.25}
		});
		
		this.panel.render();
		
		mgr.register(this.panel); //YAHOO.widget.OverlayManager
		
		this.hide = function()
		{
			this.panel.hide();
		};
		
		this.show = function()
		{
			mgr.hideAll();
			this.panel.show();
		}
	}
	
	MW.controls.panel.Preview.getOverlayManager = function()
	{
		if (typeof manager == "undefined")
		{
			manager = new YAHOO.widget.OverlayManager();
		}
		return manager;
	}
	
	/**
	 * Creates and initializes a set of generic preview panels on a given page, under a specified container element
	 * 
	 * @param container elm|id of element containing preview panels
	 * @param align array elment, trigger (tl, tr, bl, br) optional
	 * 
	 */
	MW.controls.panel.Preview.initializePreviews = function(container,align)
	{
		if (typeof container == "string")
		{
			container = document.getElementById(container);
		}
		
		if (!align)
		{
			align = ["br","br"]; // alignment
		}
		
		var mgr = MW.controls.panel.Preview.getOverlayManager();
		
		// collect panels
		var panels = YAHOO.util.Selector.query("div.generic-overlay",container,false);
		var p = panels.length;
		
		YAHOO.log(typeof(panels));
		YAHOO.log(panels.length);
		
		// instantiate panels, collect triggers, assign panels and events
		for(var i = 0; i < p; i++)
		{
			var thisPanel = panels[i];
			YAHOO.log(thisPanel.outerHTML);
			var openTrigger = YAHOO.util.Selector.query("a.trigger.open",thisPanel.parentNode,true);
			var closeTrigger = YAHOO.util.Selector.query("a.trigger.close",thisPanel,true);
			var preview = new MW.controls.panel.Preview(thisPanel,openTrigger,mgr,align);
			
			function bindShow(p)
			{
				return function(e)
				{
					p.show();
					YAHOO.util.Event.stopEvent(e);
				}
			}
			
			function bindHide(p)
			{
				return function(e)
				{
					p.hide();
					YAHOO.util.Event.stopEvent(e);
				}
			}
			
			YAHOO.util.Event.addListener(
				openTrigger,
				"click",
				bindShow(preview),
				true
			);
			YAHOO.util.Event.addListener(
				closeTrigger,
				"click",
				bindHide(preview),
				true
			);
		}
	}
}());
