/************************************************************************************************************

Tab view

Copyright (C) October 2005  DTHMLGoodies.com, Alf Magne Kalleland



This library is free software; you can redistribute it and/or

modify it under the terms of the GNU Lesser General Public

License as published by the Free Software Foundation; either

version 2.1 of the License, or (at your option) any later version.



This library is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

Lesser General Public License for more details.



You should have received a copy of the GNU Lesser General Public

License along with this library; if not, write to the Free Software

Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA



Dhtmlgoodies.com., hereby disclaims all copyright interest in this script

written by Alf Magne Kalleland.



Alf Magne Kalleland, 2009

Owner of DHTMLgoodies.com



************************************************************************************************************/



	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 dhtmlgoodies_tabObj = new Array();

	var activeTabIndex = new Array();

	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 Array();

	var tabViewHeight = new Array();

	var tabDivCounter = 0;

	var closeImageHeight = 8;	// Pixel height of close buttons

	var closeImageWidth = 8;	// Pixel height of close buttons





	function setPadding(obj,padding){

		var span = obj.getElementsByTagName('SPAN')[0];

		span.style.paddingLeft = padding + 'px';

		span.style.paddingRight = padding + 'px';

	}

	function showTab(parentId,tabIndex)

	{

		var parentId_div = parentId + "_";

		if(!document.getElementById('tabView' + parentId_div + tabIndex)){

			return;

		}

		if(activeTabIndex[parentId]>=0){

			if(activeTabIndex[parentId]==tabIndex){

				return;

			}



			var obj = document.getElementById('tabTab'+parentId_div + activeTabIndex[parentId]);



			obj.className='tabInactive';

			var img = obj.getElementsByTagName('IMG')[0];

			if(img.src.indexOf('tab_')==-1)img = obj.getElementsByTagName('IMG')[1];

			img.src = 'images/tab_right_inactive.gif';

			document.getElementById('tabView' + parentId_div + activeTabIndex[parentId]).style.display='none';

		}



		var thisObj = document.getElementById('tabTab'+ parentId_div +tabIndex);



		thisObj.className='tabActive';

		var img = thisObj.getElementsByTagName('IMG')[0];

		if(img.src.indexOf('tab_')==-1)img = thisObj.getElementsByTagName('IMG')[1];

		img.src = 'images/tab_right_active.gif';



		document.getElementById('tabView' + parentId_div + tabIndex).style.display='block';

		activeTabIndex[parentId] = tabIndex;





		var parentObj = thisObj.parentNode;

		var aTab = parentObj.getElementsByTagName('DIV')[0];

		countObjects = 0;

		var startPos = 0;

		var previousObjectActive = false;

		while(aTab){

			if(aTab.tagName=='DIV'){

				if(previousObjectActive){

					previousObjectActive = false;

					startPos-=0;

				}

				if(aTab==thisObj){

					startPos-=0;

					previousObjectActive=true;

					setPadding(aTab,textPadding+1);

				}else{

					setPadding(aTab,textPadding);

				}



				aTab.style.left = startPos + 'px';

				countObjects++;

				startPos+=0;

			}

			aTab = aTab.nextSibling;

		}



		return;

	}



	function tabClick()

	{

		var idArray = this.id.split('_');

		showTab(this.parentNode.parentNode.id,idArray[idArray.length-1].replace(/[^0-9]/gi,''));

		setEngType(this.id);

	}



	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 = 'images/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 = 'images/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(mainContainerID,tabTitles,activeTab,width,height,closeButtonArray,additionalTab)

	{

		if(!closeButtonArray)closeButtonArray = new Array();



		if(!additionalTab || additionalTab=='undefined'){

			dhtmlgoodies_tabObj[mainContainerID] = document.getElementById(mainContainerID);

			width = width + '';

			if(width.indexOf('%')<0)width= width + 'px';

			dhtmlgoodies_tabObj[mainContainerID].style.width = width;



			height = height + '';

			if(height.length>0){

				if(height.indexOf('%')<0)height= height + '%';

				dhtmlgoodies_tabObj[mainContainerID].style.height = height;

			}





			tabViewHeight[mainContainerID] = height;



			var tabDiv = document.createElement('DIV');

			var firstDiv = dhtmlgoodies_tabObj[mainContainerID].getElementsByTagName('DIV')[0];



			dhtmlgoodies_tabObj[mainContainerID].insertBefore(tabDiv,firstDiv);

			tabDiv.className = 'dhtmlgoodies_tabPane';

			tabView_countTabs[mainContainerID] = 0;



		}else{

			var tabDiv = dhtmlgoodies_tabObj[mainContainerID].getElementsByTagName('DIV')[0];

			var firstDiv = dhtmlgoodies_tabObj[mainContainerID].getElementsByTagName('DIV')[1];

			height = tabViewHeight[mainContainerID];

			activeTab = tabView_countTabs[mainContainerID];





		}







		for(var no=0;no<tabTitles.length;no++){

			var aTab = document.createElement('DIV');

			aTab.id = 'tabTab' + mainContainerID + "_" +  (no + tabView_countTabs[mainContainerID]);

			aTab.onmouseover = rolloverTab;

			aTab.onmouseout = rolloutTab;

			aTab.onclick = tabClick;

			aTab.className='tabInactive';

			//aTab.onclick='setEngType(this.id);';

			tabDiv.appendChild(aTab);

			var span = document.createElement('SPAN');

			span.innerHTML = tabTitles[no];

			span.style.position = 'relative';

			aTab.appendChild(span);



			if(closeButtonArray[no]){

				var closeButton = document.createElement('IMG');

				closeButton.src = 'images/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;



				span.innerHTML = span.innerHTML + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';



				var deleteTxt = span.innerHTML+'';



				closeButton.onclick = function(){ deleteTab(this.parentNode.innerHTML) };

				span.appendChild(closeButton);

			}



			var img = document.createElement('IMG');

			img.valign = 'bottom';

			img.src = 'images/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);

		}



		var tabs = dhtmlgoodies_tabObj[mainContainerID].getElementsByTagName('DIV');

		var divCounter = 0;

		for(var no=0;no<tabs.length;no++){

			if(tabs[no].className=='dhtmlgoodies_aTab' && tabs[no].parentNode.id == mainContainerID){

				if(height.length>0)tabs[no].style.height = height;

				tabs[no].style.display='none';

				tabs[no].id = 'tabView' + mainContainerID + "_" + divCounter;

				divCounter++;

			}

		}

		tabView_countTabs[mainContainerID] = tabView_countTabs[mainContainerID] + tabTitles.length;

		showTab(mainContainerID,activeTab);



		return activeTab;

	}



	function showAjaxTabContent(ajaxIndex,parentId,tabId)

	{

		var obj = document.getElementById('tabView'+parentId + '_' + tabId);

		obj.innerHTML = ajaxObjects[ajaxIndex].response;

	}



	function resetTabIds(parentId)

	{

		var tabTitleCounter = 0;

		var tabContentCounter = 0;





		var divs = dhtmlgoodies_tabObj[parentId].getElementsByTagName('DIV');





		for(var no=0;no<divs.length;no++){

			if(divs[no].className=='dhtmlgoodies_aTab'){

				divs[no].id = 'tabView' + parentId + '_' + tabTitleCounter;

				tabTitleCounter++;

			}

			if(divs[no].id.indexOf('tabTab')>=0){

				divs[no].id = 'tabTab' + parentId + '_' + tabContentCounter;

				tabContentCounter++;

			}





		}



		tabView_countTabs[parentId] = tabContentCounter;

	}





	function createNewTab(parentId,tabTitle,tabContent,tabContentUrl,closeButton)

	{

		if(tabView_countTabs[parentId]>=tabView_maxNumberOfTabs)return;	// Maximum number of tabs reached - return

		var div = document.createElement('DIV');

		div.className = 'dhtmlgoodies_aTab';

		dhtmlgoodies_tabObj[parentId].appendChild(div);



		var tabId = initTabs(parentId,Array(tabTitle),0,'','',Array(closeButton),true);

		if(tabContent)div.innerHTML = tabContent;

		if(tabContentUrl){

			var ajaxIndex = ajaxObjects.length;

			ajaxObjects[ajaxIndex] = new sack();

			ajaxObjects[ajaxIndex].requestFile = tabContentUrl;	// Specifying which file to get



			ajaxObjects[ajaxIndex].onCompletion = function(){ showAjaxTabContent(ajaxIndex,parentId,tabId); };	// Specify function that will be executed after file has been found

			ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function



		}



	}



	function getTabIndexByTitle(tabTitle)

	{

		var regExp = new RegExp("(.*?)&nbsp.*$","gi");

		tabTitle = tabTitle.replace(regExp,'$1');

		for(var prop in dhtmlgoodies_tabObj){

			var divs = dhtmlgoodies_tabObj[prop].getElementsByTagName('DIV');

			for(var no=0;no<divs.length;no++){

				if(divs[no].id.indexOf('tabTab')>=0){

					var span = divs[no].getElementsByTagName('SPAN')[0];

					var regExp2 = new RegExp("(.*?)&nbsp.*$","gi");

					var spanTitle = span.innerHTML.replace(regExp2,'$1');



					if(spanTitle == tabTitle){



						var tmpId = divs[no].id.split('_');

						return Array(prop,tmpId[tmpId.length-1].replace(/[^0-9]/g,'')/1);

					}

				}

			}

		}



		return -1;



	}



	/* Call this function if you want to display some content from external file in one of the tabs

	Arguments: Title of tab and relative path to external file */



	function addAjaxContentToTab(tabTitle,tabContentUrl)

	{

		var index = getTabIndexByTitle(tabTitle);

		if(index!=-1){

			var ajaxIndex = ajaxObjects.length;



			tabId = index[1];

			parentId = index[0];





			ajaxObjects[ajaxIndex] = new sack();

			ajaxObjects[ajaxIndex].requestFile = tabContentUrl;	// Specifying which file to get



			ajaxObjects[ajaxIndex].onCompletion = function(){ showAjaxTabContent(ajaxIndex,parentId,tabId); };	// Specify function that will be executed after file has been found

			ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function



		}

	}







	function deleteTab(tabLabel,tabIndex,parentId)

	{



		if(tabLabel){

			var index = getTabIndexByTitle(tabLabel);

			if(index!=-1){

				deleteTab(false,index[1],index[0]);

			}



		}else if(tabIndex>=0){

			if(document.getElementById('tabTab' + parentId + '_' + tabIndex)){

				var obj = document.getElementById('tabTab' + parentId + '_' + tabIndex);

				var id = obj.parentNode.parentNode.id;

				obj.parentNode.removeChild(obj);

				var obj2 = document.getElementById('tabView' + parentId + '_' + tabIndex);

				obj2.parentNode.removeChild(obj2);

				resetTabIds(parentId);

				activeTabIndex[parentId]=-1;

				showTab(parentId,'0');

			}

		}











	}




