/**************************
 Restructure code
**************************/
function unpack(element)
{
	var divs = new Array();
	var cur = element.firstChild;
	var i=0;
	while(cur != null)
	{
		if(cur.nodeType == 1 && cur.nodeName == 'DIV')
		{
			divs[i] = cur;
			i++;
		}
		cur = cur.nextSibling;
	}	
	createTabItemList(element, divs);
	createTabDataList(element, divs);
}

/* tab data */
function createTabDataList(cont, divs)
{
	var ContainerDiv =	document.createElement('DIV');
	ContainerDiv.className = 'data';
	cont.appendChild(ContainerDiv);
	for(var i=0; i<divs.length; i++)
	{
		relocateDiv(ContainerDiv, divs[i]);
	}
}

function relocateDiv(adopter, div)
{
	adopter.appendChild(div);
	div.setAttribute('id', div.id + '_data');
	div.className = 'tab';
	/*
	 insert an extra clearing div with clear:both, so that the container
	 will always wrap around containing floats */
	var ClearingDiv;
	ClearingDiv  =	document.createElement('DIV');
	ClearingDiv.className = 'clearing';
	div.appendChild(ClearingDiv);
}

/* tab items */
function createTabItemList(cont, divs)
{
	var List;
	List =	document.createElement('UL');
	List.className = 'strip';
	cont.appendChild(List);
	for(var i=0; i<divs.length; i++)
	{
		createTabItem(List, divs[i]);
	}
}

function createTabItem(cont, div)
{
	var Item = document.createElement('LI');
	cont.appendChild(Item);
	Item.setAttribute('id', div.id);
	Item.appendChild(document.createTextNode(div.getAttribute('title')));
}

function unpackTabDivs(node)
{
	if(node.nodeType == 1 && node.nodeName == 'DIV' && node.className.indexOf('tabset') > -1)
	{
		unpack(node);
		// Check if the current tabset was hidden (while loading the page). If so, make it visible now.
		if (node.className.indexOf('hidden') > -1) 
		{
			node.className = node.className.replace(/\s*hidden/, '');
		}			
	}
	for(var i=0; i<node.childNodes.length ; i++)
	{		
	 unpackTabDivs(node.childNodes[i]);
	}	
}

unpackTabDivs(document);

/**************************
 runtime behavior code
**************************/

function tabclick(el)
{
	var tab = document.getElementById(el.id + '_data');
	focusTab(tab);
	focusTabItem(el);
}

/* tab strip items behavior */
function focusTabItem(tabItem)
{
	blurSiblingTabItems(tabItem.parentNode.firstChild);
	tabItem.className += " on";
}

function blurSiblingTabItems(tabItem)
{
		if(tabItem != null)
{
		if(tabItem.nodeType == 1)// elements only
		{
			tabItem.className = tabItem.className.replace(/\s*on/, '');
		}
		blurSiblingTabItems(tabItem.nextSibling);
	}
}

/* tab (data) behavior */
function focusTab(tabElement)
{
	blurSiblingTabs(tabElement.parentNode.firstChild);
	tabElement.className += " on";
}

function findActiveTab(tabSet)
{
	// find the first div in a div (first tab in data div)
	var CurTab = tabSet.getElementsByTagName('DIV')[1];
	while(CurTab != null)
	{
		if(CurTab.className.indexOf('on') > -1)
		{
			return CurTab;
		}
		else
		{
				CurTab = CurTab.nextSibling;
		}
	}
	return null;
}

function resizeParent(tabElement)
{
	var maincont = tabElement.parentNode.parentNode;
}

function blurSiblingTabs(tabElement)
{
	if(tabElement != null)
	{
		if(tabElement.nodeType == 1)// elements only
		{
			tabElement.className = tabElement.className.replace(/\s*on/, '');
		}
		blurSiblingTabs(tabElement.nextSibling);
	}
}

/* behavior init methods */
function setTabsBehavior(tabdiv)
{	
	var TabItem = tabdiv.getElementsByTagName('LI')[0];
	while(TabItem != null)
	{
		SetTabItemBehavior(TabItem);
		TabItem = TabItem.nextSibling;
	}	
}

function SetTabItemBehavior(node)
{
	node.onmouseover = function() {node.className +=	' hover'}
	node.onmouseout  = function() {node.className =	node.className.replace(/\s*hover/, '')}
	node.onclick = function(){tabclick(node);}
}

function openFirstTabs(node)
{
	if(node.nodeType == 1 && node.nodeName == 'DIV' && node.className.indexOf('tabset') > -1)
	{
		if(node.getElementsByTagName('LI')[0]) {
			tabclick(node.getElementsByTagName('LI')[0]);
		}
	}
	for(var i=0; i<node.childNodes.length ; i++)
	{		
	 openFirstTabs(node.childNodes[i]);
	}	
}

function applyTabBehaviors(node)
{
	if(node.nodeType == 1 && node.nodeName == 'DIV' && node.className.indexOf('tabset') > -1)
	{
		setTabsBehavior(node);						
	}
	for(var i=0; i<node.childNodes.length ; i++)
	{		
	 applyTabBehaviors(node.childNodes[i]);
	}	
}

/* like click on tab */
function openTab(tabId)
{
	var tab = document.getElementById(tabId);
	if(tab)
	{
		// open the tab
		tabclick(tab);
		// open parent
		var parent = tab.parentElement;
		while(parent != null &&  parent.id.indexOf('_data') <0)
		{
			parent = parent.parentElement;
		}
		if(parent != null)
		{
			openTab(parent.id.replace('_data', ''));
		}
	}
}

function openLocationHashTab()
{
	var hash = location.hash;
	var tabId;
	
	if(hash != '')
	{
		tabId = tabId=hash.replace('#', '');
		var element = document.getElementById(tabId);			
		if (element != null)
		{				
			/* Check if the provided hash is not real anchor */
			if (element.tagName != 'A') openTab(tabId);					
		}			
	}
}
	
applyTabBehaviors(document);
openFirstTabs(document);
openLocationHashTab();