/************************************************************************************************************
This script is based from :

(C) www.dhtmlgoodies.com, October 2005

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Updated:
	
	March, 14th, 2006 - Create new tabs dynamically
	March, 15th, 2006 - Dynamically delete a tab
	
Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland
************************************************************************************************************
adapted to be compatible & ran with prototype
tab handling is completly modified
ajax removed
code rewritten
************************************************************************************************************/		
var textPadding = 3; // Padding at the left of tab text - bigger value gives you wider tabs
var strictDocType = true; 
var tabView_maxNumberOfTabs = 6;	// Maximum number of tabs

/* Don't change anything below here */
var HbTabSets = new Hash();
var activeTabIndex = new Hash();
var MSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false;

var regExp = new RegExp(".*MSIE ([0-9]\.[0-9]).*","g");
var navigatorVersion = navigator.userAgent.replace(regExp,'$1');

// var ajaxObjects = new Array();
var tabView_countTabs = new Hash();	// contains indexes
var tabView_totalTabs = new Hash(); // contains total number of tabs per set of tabs
var tabView_headerTabs = new Hash(); // contains hash which contain {id of tab view:content of the header tab}
var tabViewHeight = new Hash();
var closeImageHeight = 8;	// Pixel height of close buttons
var closeImageWidth = 8;	// Pixel height of close buttons
var TabImagePath = 'img/common/ihm/' ;


function setPadding(obj,padding){
	var span = obj.getElementsByTagName('SPAN')[0];
	span.style.paddingLeft = padding + 'px';	
	// span.style.paddingRight = padding + 'px';	
}

function showTab(TabSetId,tabIndex)
{
	var parentId_div = TabSetId + "_";

	// alert('show tabView' + parentId_div + tabIndex);

	if(!$('tabView' + parentId_div + tabIndex))
		return;
	
	if(activeTabIndex[TabSetId] >= 0)
	{
		if(activeTabIndex[TabSetId]==tabIndex)
			return;

		// switch off the previous tab
		var ThePrevTab = $('tabTab'+parentId_div + activeTabIndex[TabSetId]);
		ThePrevTab.className='tabInactive';
		var img = ThePrevTab.getElementsByTagName('IMG')[0];
		if(img.src.indexOf('tab_')==-1)img = ThePrevTab.getElementsByTagName('IMG')[1];
		img.src = TabImagePath + 'tab_right_inactive.gif';
		$('tabView' + parentId_div + activeTabIndex[TabSetId]).hide() ;
	}
	
	// switch on the new tab
	var TheNewTab = $('tabTab'+ parentId_div +tabIndex);
	TheNewTab.className='tabActive';
	var img = TheNewTab.getElementsByTagName('IMG')[0];
	if(img.src.indexOf('tab_')==-1)img = TheNewTab.getElementsByTagName('IMG')[1];
	img.src = TabImagePath + 'tab_right_active.gif';
	$('tabView' + parentId_div + tabIndex).show();
	////////////////////////////////////////////////////////////////////
	if(TabSetId == MainTabSet)
	{
		CurrentTab = 'tabView' + parentId_div + tabIndex ;
		if(H_TabToUpdate[CurrentTab])
		{
			UpdateCurrentTab() ;
			H_TabToUpdate[CurrentTab] = false ;
		}
	}
	////////////////////////////////////////////////////////////////////
	activeTabIndex[TabSetId] = tabIndex;

	// repositionning all the tabs in the set of tabs
	LocateTabHeadersCorrectly(TabSetId, TheNewTab) ;
}


function LocateTabHeadersCorrectly(TabSetId, TheNewTab)
{
	// this is the set of tab headers
	var parentObj = $(TabSetId).getElementsByClassName('dhtmlgoodies_tabPane')[0];
	//		var parentObj = TheNewTab.parentNode;
	var aTab = parentObj.getElementsByTagName('DIV')[0];
	var countObjects = 0;
	var startPos = 2;
	var previousObjectActive = false;
	while(aTab){
		if(aTab.tagName=='DIV'){
			if(previousObjectActive){
				previousObjectActive = false;
				startPos-=2;
			}
			if(aTab==TheNewTab){
				startPos-=2;
				previousObjectActive=true;
				setPadding(aTab,textPadding+1);
			}else{
				setPadding(aTab,textPadding);
			}
			
			aTab.style.left = startPos + 'px';
			countObjects++;
			startPos+=2;
		}			
		aTab = aTab.nextSibling;
	}
}


function tabClick()
{
	if(this == null)	return ;
	if(this.parentNode == null)	return ;
	if(this.parentNode.parentNode == null)	return ;
	
	var idArray = this.id.split('_');		
	showTab(this.parentNode.parentNode.id,idArray[idArray.length-1].replace(/[^0-9]/gi,''));
	
}

function rolloverTab()
{
	if(this.className.indexOf('tabInactive')>=0){
		this.className='inactiveTabOver';
		var img = this.getElementsByTagName('IMG')[0];
		if(img.src.indexOf('tab_')<=0)img = this.getElementsByTagName('IMG')[1];
		img.src = TabImagePath + 'tab_right_over.gif';
	}
	
}
function rolloutTab()
{
	if(this.className ==  'inactiveTabOver'){
		this.className='tabInactive';
		var img = this.getElementsByTagName('IMG')[0];
		if(img.src.indexOf('tab_')<=0)img = this.getElementsByTagName('IMG')[1];
		img.src = TabImagePath + 'tab_right_inactive.gif';
	}
	
}

function hoverTabViewCloseButton()
{
	this.src = this.src.replace('close.gif','close_over.gif');
}

function stopHoverTabViewCloseButton()
{
	this.src = this.src.replace('close_over.gif','close.gif');
}

function initTabs(TabSetId,tabTitles,activeTab,width,height,closeButtonArray)
{
	if(!closeButtonArray)closeButtonArray = new Array();
	
	HbTabSets[TabSetId] = $(TabSetId);
	width = width + '';
	if(width.indexOf('%')<0)	width= width + 'px';
	$(TabSetId).style.width = width;
				
	height = height + '';
	if(height.length>0)
	{
		if( (height.indexOf('%')<0) && (height != 'auto') )
			height= height + 'px';

		$(TabSetId).style.height = height;
	}

	tabViewHeight[TabSetId] = height;
	
	var tabDiv = document.createElement('DIV');		
	var firstDiv = $(TabSetId).getElementsByTagName('DIV')[0];	
	
	$(TabSetId).insertBefore(tabDiv,firstDiv);	
	tabDiv.className = 'dhtmlgoodies_tabPane';			
	tabView_countTabs[TabSetId] = 0;
	
	tabView_headerTabs[TabSetId] = new Hash() ;
	for(var no=0;no<tabTitles.length;no++)
		CreateNewTabHeader(TabSetId, '', tabTitles[no], closeButtonArray[no]) ;

	var tabs = $(TabSetId).getElementsByTagName('DIV');
	var divCounter = 0;
	for(var no=0;no<tabs.length;no++){
		if(tabs[no].className=='HbTab' && tabs[no].parentNode.id == TabSetId){
			if(height.length>0)tabs[no].style.height = height;
			tabs[no].style.display='none';
			tabs[no].id = 'tabView' + TabSetId + "_" + divCounter;
			divCounter++;
		}			
	}	
	// tabView_countTabs[TabSetId] += tabTitles.length;	
	tabView_totalTabs[TabSetId] = tabTitles.length ;
	showTab(TabSetId,activeTab);
}	

function CreateNewTabHeader(TabSetId, TagClass, TabHeaderContent, CloseButton)
{
	// this is the set of tab headers
	var tabDiv = $(TabSetId).getElementsByClassName('dhtmlgoodies_tabPane')[0];
	var tabIndex = tabView_countTabs[TabSetId] ;
	
	//////////////////////////////////
	tabView_headerTabs[TabSetId]['tabView' + TabSetId + "_" + tabIndex] = TabHeaderContent ;
	H_TabToUpdate['tabView' + TabSetId + "_" + tabIndex] = false ;
	// alert(tabView_headerTabs[TabSetId].inspect());
	//////////////////////////////////
	
	// this is the new tab header
	var aTab = document.createElement('DIV');
	aTab.id = 'tabTab' + TabSetId + "_" + tabIndex;
	aTab.onmouseover = rolloverTab;
	aTab.onmouseout = rolloutTab;
	aTab.onclick = tabClick;
	aTab.className='tabInactive';
	tabDiv.appendChild(aTab);

	// this is the span label in the tab header
	var span = document.createElement('SPAN');
	span.innerHTML = TabHeaderContent;
	var a_Col = TagClass.split('_') ;
	var H_Colors = $H({'1': '#aaa', '2': '#777', '3': '#fb0', '4': '#fa0', '5': '#f80', '6': '#f60', '7': '#f50', '8': '#f20', '9': '#f00', '10': '#f00'}) ;
	if(a_Col[3] != null)
	{
		// alert(a_Col[3] + " / " + H_Colors[ a_Col[3] ]) ;
		span.style.color = H_Colors[ a_Col[3] ] ;
	}
	span.style.position = 'relative';
	span.style.fontSize = '1.2em';
	span.style.fontWeight = 'bold';
	if(CloseButton)	span.style.paddingRight = '15px';
	aTab.appendChild(span);
	
	// handle the close button if needed
	if(CloseButton)
	{
		var closeButton = document.createElement('IMG');
		closeButton.src = TabImagePath + 'close.gif';
		closeButton.height = closeImageHeight + 'px';
		closeButton.width = closeImageHeight + 'px';
		closeButton.setAttribute('height',closeImageHeight);
		closeButton.setAttribute('width',closeImageHeight);
		closeButton.style.position='absolute';
		closeButton.style.top = '6px';
		closeButton.style.right = '0px';
		closeButton.onmouseover = hoverTabViewCloseButton;
		closeButton.onmouseout = stopHoverTabViewCloseButton;
		
		closeButton.onclick = function(){ deleteTab(TabSetId, tabIndex) };
		span.appendChild(closeButton);
	}
	
	// handle the thin image on the right of the tab header
	var img = document.createElement('IMG');
	img.valign = 'bottom';
	img.src = TabImagePath + 'tab_right_inactive.gif';
	// IE5.X FIX
	if((navigatorVersion && navigatorVersion<6) || (MSIE && !strictDocType)){
		img.style.styleFloat = 'none';
		img.style.position = 'relative';	
		img.style.top = '4px'
		span.style.paddingTop = '4px';
		aTab.style.cursor = 'hand';
	}	// End IE5.x FIX
	aTab.appendChild(img);

	// we now have a new tab header inserted, increment the number of tabs in the tabset
	tabView_countTabs[TabSetId]++ ;
}

/*************************************************
*
**/
function createNewTab(TabSetId, tagClass, tabTitle,tabContent, closeButton)
{
	// Maximum number of tabs reached - return
	if(tabView_totalTabs[TabSetId] >= tabView_maxNumberOfTabs)
		return;	
		
	// adding div for the new tab
	var div = document.createElement('DIV');
	div.className = 'HbTab';
	div.style.display='none';
	div.id = 'tabView' + TabSetId + "_" + tabView_countTabs[TabSetId];
	$(TabSetId).appendChild(div);
	
	// add structure
	TabData[div.id] = new SettingData();
	TabData[div.id].SetCountingDensityWeights(DefaultSettings.GetCountingWeight(), DefaultSettings.GetDensityWeight()) ;
	DefaultSettings.GetTags().each(function(pair) {
		TabData[div.id].Tags[pair.key] = pair.value ;
	});
	TabData[div.id].SetCompetitor1(TabData[TAB2].GetCompetitor1()) ;
	TabData[div.id].SetCompetitor2(TabData[TAB2].GetCompetitor2()) ;
	TabData[div.id].SetTagUrlNb(TabData[TAB1].GetTagUrlNb()) ;
	var a_TTCols = TabData[TAB1].GetTTCols();
	TabData[div.id].SetTTCols(a_TTCols.clone()) ;
	// TabData[div.id].SetMinCar(DefaultSettings.GetMinCar()) ;

	CreateNewTabHeader(TabSetId, tagClass, tabTitle, closeButton) ;

	showTab(TabSetId, tabView_countTabs[TabSetId]-1);

	tabView_totalTabs[TabSetId]++ ;
	
	// div to append tag parameter
	// alert("target="+target);
	var DivTagParam = document.createElement('DIV') ;
	Element.extend(DivTagParam) ;
	DivTagParam.addClassName("TagParam") ;
	$(div.id).appendChild(DivTagParam) ;

	// div to append kw stats
	var DivStats = document.createElement('DIV') ;
	Element.extend(DivStats);
	DivStats.id = div.id + '_KwStats' ;
	$(div.id).appendChild(DivStats) ;
	
	//
	H_MainTabTitles[div.id] = tabTitle ;
	var HbTabs = readCookie('hb_tabs_' + AuditId);
	var s_CookieTabContent = tabTitle + '!' + TabData[TAB2].GetCompetitor1() + '!' + TabData[TAB2].GetCompetitor2() ;
	if(HbTabs == null)
	{
		createCookie('hb_tabs_' + AuditId, s_CookieTabContent, false) ;
	}
	else
	{
		var a_Tabs = HbTabs.split('|');
		var tabTitleIdx = a_Tabs.indexOf(s_CookieTabContent) ;
		if(tabTitleIdx == -1)
			createCookie('hb_tabs_' + AuditId, HbTabs + '|' + s_CookieTabContent, false) ;
		else
		{
			a_Tabs[tabTitleIdx] = s_CookieTabContent ;
			s_NewCookieContent = '' ;
			a_Tabs.each(function(TabContent){
				s_NewCookieContent += TabContent + '|' ;
			});
			createCookie('hb_tabs_' + AuditId, s_NewCookieContent.substr(0, s_NewCookieContent.length-1) , false) ;
		}
	}
	//
	
	UpdateKwInfos(div.id) ;
}

function deleteTab(TabSetId,tabIndex)
{
	// alert('deleting '+TabSetId+'.'+tabIndex) ;
	var s_TabName = 'tabView' + TabSetId + '_' + tabIndex ;
	tabView_headerTabs[TabSetId].remove(s_TabName);
	if($('tabTab' + TabSetId + '_' + tabIndex) == null)
		return ;

	// remove tab header
	var TabHeader = $('tabTab' + TabSetId + '_' + tabIndex) ;
	TabHeader.parentNode.removeChild(TabHeader);

	// remove tab content
	var TabContent = $(s_TabName) ;
	TabContent.parentNode.removeChild(TabContent);
	
	//
	var HbTabs = readCookie('hb_tabs_' + AuditId);
	var a_Tabs = HbTabs.split('|');
	var a_NewTabs = a_Tabs.without( H_MainTabTitles[s_TabName] + '!' + TabData[s_TabName].GetCompetitor1() + '!' + TabData[s_TabName].GetCompetitor2() ) ;
	var s_Tmp = '';
	a_NewTabs.each(function(TabTitle){
		s_Tmp += TabTitle + '|' ;
	});
	if(s_Tmp.length > 0)
		createCookie('hb_tabs_' + AuditId, s_Tmp.substr(0, s_Tmp.length - 1), false) ;
	else
		eraseCookie('hb_tabs_' + AuditId) ;
	//

	if(activeTabIndex[TabSetId] == tabIndex)
		activeTabIndex[TabSetId] = -1;

	showTab(TabSetId,'0');
	tabView_totalTabs[TabSetId]-- ;
}