/**************************************
/* EXPANDABLE PANEL
/**************************************/
var ExpandablePanels;
var CurrentExpandedPanel;

function ExpandablePanel_Init()
{
	var count = ExpandablePanel_Controls.length;
	ExpandablePanels = new Array(count);

	for( var i=0; i<count; i++ ) 
	{
		var o = ExpandablePanel_Controls[i];
		var panel	= xGetElementById(o.panel);
		var header	= xGetElementById(o.header);
		var state	= xGetElementById(o.state);
		var expander= xGetElementById(o.expander);
		ExpandablePanels[i] = new ExpandablePanel(panel, state, header, expander, o.expandClassName, o.hoverClassName);
	}
}

function ExpandablePanel(oPanel, oState, oHeader, oExpander, sExpandClassName, sHoverClassName)
{
	this.expanded = false;
	this.panel	= oPanel;
	this.panel.ExpandablePanel = this;
	this.header = oHeader;
	this.expander = oExpander;
	this.expander.ExpandablePanel = this;
	this.expander.hoverClassName = sHoverClassName;
	this.expandClassName = sExpandClassName;
	this.state	= oState;
	if ( this.state.value == "1" )
		this.expand();
	
	xAddEventListener(this.expander,"click",		ExpandablePanel.eventHandlers.click );
	xAddEventListener(this.expander,"mouseover",	ExpandablePanel.eventHandlers.mouseover );
	xAddEventListener(this.expander,"mouseout",		ExpandablePanel.eventHandlers.mouseout );
	
}

ExpandablePanel.eventHandlers = 
{
	click: function(e)
	{
		var panel = ExpandablePanel.eventHandlers.getExpandablePanel(e);
		panel.toggle();
	},
	
	mouseover: function(e)
	{
		var expander = ExpandablePanel.eventHandlers.getEventTarget(e);
		addClassName(expander, expander.hoverClassName);
	},

	mouseout: function(e)
	{
		var expander = ExpandablePanel.eventHandlers.getEventTarget(e);
		removeClassName(expander, expander.hoverClassName);
	},
	
	getEventTarget:	function(e)
	{
		if (e) { return e.target || window.event.srcElement; }
		return null;
	},
	
	getExpandablePanel:	function (e) 
	{
		var el = ExpandablePanel.eventHandlers.getEventTarget(e);
		while (el != null && el.ExpandablePanel == null)
			el = el.parentNode;

		return el ? el.ExpandablePanel : null;
	}
}
ExpandablePanel.prototype.expand	= function() 
{
	if( CurrentExpandedPanel )
		CurrentExpandedPanel.collapse();
	this.expanded = true;
	this.state.value = "1";
	addClassName(this.panel, this.expandClassName);
	CurrentExpandedPanel = this;
}

ExpandablePanel.prototype.collapse = function() 
{
	this.expanded = false;
	this.state.value = "0";
	removeClassName(this.panel, this.expandClassName);
	CurrentExpandedPanel = null;
}

ExpandablePanel.prototype.toggle	= function() 
{
	if ( this.expanded ) 
		this.collapse();
	else 
		this.expand();
}

function ExpandablePanelList_ToggleAll(listID,panelClassName)
{
	var list = xGetElementById(listID);
	var panels = xGetElementsByClassName(panelClassName,list,"div");
	if ( panels != null )
	{
		var allExpanded = true;
		for (var i=0; i<panels.length; i++)
		{
			if ( !panels[i].ExpandablePanel.expanded )
			{
				panels[i].ExpandablePanel.expand();
				allExpanded = false;
			}
		}
		if ( allExpanded )
			ExpandablePanelList_CollapseAll(listID, panelClassName);
			
	}
}

function ExpandablePanelList_ExpandAll(listID,panelClassName)
{
	var list = xGetElementById(listID);
	xGetElementsByClassName(panelClassName,list,"div", function(el) { el.ExpandablePanel.expand(); });
}

function ExpandablePanelList_CollapseAll(listID,panelClassName)
{
	var list = xGetElementById(listID);
	xGetElementsByClassName(panelClassName,list,"div", function(el) { el.ExpandablePanel.collapse(); })
}
