/**************************************
/* EXPANDABLE PANEL
/**************************************/
var ExpandablePanels;

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);
	}
}
/**************************************
/* Google analytics helpers
/**************************************/
function GA_Init()
{
	TRACKERTEXT = true;
	if(BreadCrumbText.length < 1)
		GetBreadCrumb();	
}
function GetBreadCrumb()
{	
	var breadcrumb = xGetElementById('BreadCrumb');
	var vStrippedHTML = breadcrumb.innerHTML.replace(/\<[^\>]+\>/g,"");
	BreadCrumbText = "/" + vStrippedHTML.replace(new RegExp(/\s+$/),"") + "/";
}
/***************************************/

function ExpandablePanel(oPanel, oState, oHeader, oExpander, sExpandClassName, sHoverClassName)
{
	this.expanded = true;
	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();
	else
		this.collapse();
	
	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() 
{
	this.expanded = true;
	this.state.value = "1";
	addClassName(this.panel, this.expandClassName);
	
	// For Google Analytics
	if(TRACKERTEXT)
	{			
		 var trackStr = BreadCrumbText+this.header.innerHTML;
		 var trimmedTrackStr = trackStr.replace(/^\s+|\s+$/, "");
		 urchinTracker(trimmedTrackStr);		
	}	
}

function qTrim(s, c)
{
      var l=0; var r=s.length -1;

      while(l < s.length && s.charAt(l) == c)

      {     l++; }

      while(r > l && s.charAt(r) == c)

      {     r-=1; }

      return s.substring(l, r+1);
}



ExpandablePanel.prototype.expandAll	= function() 
{
	this.expanded = true;
	this.state.value = "1";
	addClassName(this.panel, this.expandClassName);
}

ExpandablePanel.prototype.collapse = function() 
{
	this.expanded = false;
	this.state.value = "0";
	removeClassName(this.panel, this.expandClassName);
}

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.expandAll();
				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(); })
}
