   /************************************************************************************************************
   (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
   
   ************************************************************************************************************/     
   var textPadding = 12; // Padding at the left of tab text - bigger value gives you wider tabs
   var strictDocType = false;
   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 = 2;
      var previousObjectActive = false;
      while(aTab){
         if(aTab.tagName=='DIV'){
            if(previousObjectActive){
               previousObjectActive = false;
               startPos-=2;
            }
            if(aTab==thisObj){
               startPos-=2;
               previousObjectActive=true;
               setPadding(aTab,textPadding+1);
            }else{
               setPadding(aTab,textPadding);
            }
            
            aTab.style.left = startPos + 'px';
            countObjects++;
            startPos+=2;
         }        
         aTab = aTab.nextSibling;
      }
      
      return;
   }
   
   function tabClick()
   {
      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 = '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 + 'px';
            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';
         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');
         }        
      }
      

         
      
      
   }
   
   

