
/* Initiate tab set */

/*addLoadEvent(function() {
	var x = new TabSet("MediaPlayer");
	x.Init();
});*/


/***********/
/* Tab set */
/***********/

// Constructor

var TabSet = function(containerId, defaultIndex)
{
	this.ContainerID = containerId;
	this.TabSetID = TabSet.GetTabSetID(document.getElementById(this.ContainerID));
	this.TabArray = [];
}

// Static properties

TabSet.ActiveClass = "tab{0}Active";
TabSet.InactiveClass = "tab{0}Inactive";


// Public instance methods

TabSet.prototype.Init = function()
{
	if(!document.getElementById || !document.getElementsByTagName || !document.createTextNode) {
		return;
	}

	// Define tabs
	this.PopulateTabArray(document.getElementById(this.TabSetID));
	
	if(this.TabArray.length > 0)
	{
		// Reveal tabs
		TabSet.Display(document.getElementById(this.ContainerID));
		
		// Hide all panels
		Panel.HideAllPanels(this.TabArray);
		
		// Set class on default tab
		Tab.SetDefaultTab(this.TabArray);
		
		// Display default panels
		Panel.DisplayPanelsByTab(this.TabArray[0]);
	}
}


TabSet.prototype.PopulateTabArray = function(container)
{
	if(container.hasChildNodes())
	{
		var nodeList = container.childNodes;
		var tabItem;
		var targetIndex = 0;
		
		for(var i=0; i<nodeList.length; i++)
		{
			if(nodeList[i].nodeType == document.ELEMENT_NODE || nodeList[i].nodeType == 1)
			{
				switch(nodeList[i].tagName.toLowerCase())
				{
					case "li":
						tabItem = new Tab(nodeList[i].id, targetIndex, this)
						targetIndex ++;

						// Populate tab's panel array
						this.TabArray[this.TabArray.length] = tabItem;
						break;
						
					default:
						this.PopulateTabArray(nodeList[i]);
						break;
				}
			}
		}
	}
}

// Public static methods

TabSet.GetTabSetID = function(container)
{
	if(container.hasChildNodes())
	{
		var nodeList = container.childNodes;
		var tabItem;
		
		for(var i=0; i<nodeList.length; i++)
		{
			if(nodeList[i].nodeType == document.ELEMENT_NODE || nodeList[i].nodeType == 1)
			{
				switch(nodeList[i].tagName.toLowerCase())
				{
					case "ul":
						return nodeList[i].id;
						break;
						
					default:
						this.PopulateTabArray(nodeList[i]);
						break;
				}
			}
		}
	}
}

TabSet.Display = function(obj)
{
	obj.style.display = "block";
}

/*******/
/* Tab */
/*******/

// Constructor

function Tab(tabId, tabIndex, parentTabSet)
{
	this.TabID = tabId;
	this.TabIndex = tabIndex;
	this.Visible = true;
	this.PanelArray = [];
	this.ParentTabSet = parentTabSet;
	
	// Populate panel array
	this.PopulatePanelArray();
	
	// If no panels exist, hide the parent tab
	if(this.PanelArray.length == 0)
	{
		document.getElementById(tabId).style.display = "none";
		this.Visible = false;
		return;
	}
	
	// Create variables for anonymous function
	var obj = document.getElementById(tabId);
	var tempIndex = this.TabIndex;
	var tempFullTabArray = this.ParentTabSet.TabArray;
	var tempPanelArray = this.PanelArray;
	var eventArray = ["click", "keypress"];

	(function(){
		for(i = 0; i< eventArray.length; i++)
		{
			obj["on" + eventArray[i]] = function(){

					// Ensure tab focus is removed
					obj.blur();
					
					// Remove all tab classes
					for(var j = 0; j < tempFullTabArray.length; j++)
					{
						document.getElementById(tempFullTabArray[j].TabID).className = TabSet.InactiveClass.replace("{0}", j + 1);
					}
					
					// Add relevant tab class
					obj.className = TabSet.ActiveClass.replace("{0}", tempIndex + 1);

					// Hide all panels
					Panel.HideAllPanels(tempFullTabArray);

					// Reveal correct panels
					Panel.DisplayPanels(tempPanelArray);
				}
			}

	})();
}


// Public instance methods

Tab.prototype.PopulatePanelArray = function()
{
	var divArray = document.getElementsByTagName("div");
	
	for(var i=0; i < divArray.length; i++)
	{
		if(divArray[i].id.indexOf(this.TabID) == 0)
		{
			this.PanelArray[this.PanelArray.length] = new Panel(divArray[i].id);
		}
	}
}

// Public static methods

Tab.SetDefaultTab = function(tabArray)
{
	for(var i = 0; i < tabArray.length; i++)
	{
		if(tabArray[i].Visible)
		{
			// Set first visible tab
			document.getElementById(tabArray[i].TabID).className = TabSet.ActiveClass.replace("{0}", 1);
			return;
		}
	}
}


/*********/
/* Panel */
/*********/

// Constructor

function Panel(panelId)
{
	this.PanelID = panelId;
}


// Public static methods

Panel.HideAllPanels = function(tempTabArray)
{
	for(var i = 0; i < tempTabArray.length; i++)
	{
		for(var j = 0; j < tempTabArray[i].PanelArray.length; j++)
		{
			document.getElementById(tempTabArray[i].PanelArray[j].PanelID).style.display = "none";
		}
	}
}

Panel.DisplayPanelsByTab = function(tempTab /* tab object */ )
{
	for(var i = 0; i < tempTab.PanelArray.length; i++)
	{
		document.getElementById(tempTab.PanelArray[i].PanelID).style.display = "block";
	}
}

Panel.DisplayPanels = function(panelArray /* panel array */ )
{
	for(var i = 0; i < panelArray.length; i++)
	{
		document.getElementById(panelArray[i].PanelID).style.display = "block";
	}
}



