function product_details_section(element, row) {
   if (element.className=="product_details_section_expand")
   {
      element.className = "product_details_section_collapse";
      document.getElementById("info_"+row).style.display = "";
   }
   else
   {
      element.className = "product_details_section_expand";
      document.getElementById("info_"+row).style.display = "none";
   }
}

function product_details_toggle_all(element) {
   if(element.className == 'product_details_section_expand_all') {
      element.className = 'product_details_section_collapse_all';
      $('#product_details span.product_details_section_expand').click();
   }
   else {
      element.className = 'product_details_section_expand_all';
      $('#product_details span.product_details_section_collapse').click();
   }
}


function dynoTabs(tabContainer) {
   var inst = this;
   var actions = {};
   var actionsClose = {};
   var options = {
      allowDefaultClickHandler: false,
      activeTabClass: 'tabActive',
      inactiveTabClass: 'tabInactive'
   };
   
   this.setOptions = function(newOptions) {
      for(var ii in newOptions) {
         options[ii] = newOptions[ii];
      }
   }
   
   this.assignAction = function(tab_id, action) {
      actions[tab_id] = action;
   }
   this.assignCloseAction = function(tab_id, action) {
      actionsClose[tab_id] = action;
   }
   this.executeTargetOpenAction = function($target) {
      inst.runActionFromArray(actions, $target);
   }
   this.executeTargetCloseAction = function($target) {
      inst.runActionFromArray(actionsClose, $target);
   }
   this.runActionFromArray = function(actionArray, $target) {
      for(var id in actionArray) {
         if($target.hasClass(id)) {
            if(typeof actionArray[id] == 'string')
               $(actionArray[id]).toggle();//string-type "action" defines a selector of elements to show/hide
            else {
               actionArray[id].call($target[0]);
            }
            return true;
         }
      }
      
      var classes = $target.attr('class').split(' ');
      for(var ii=0, cnt=classes.length; ii<cnt; ++ii) {
         if(/^tab_\w+$/.test(classes[ii])) {
            $('#' + classes[ii] + '_content').toggle();
            return true;
         }
      }
      
      return false;
   }
   this.tabClick = function(e) {
      var $tgClose = $(tabContainer+' > div.' + options.activeTabClass);
      $tgClose.addClass(options.inactiveTabClass).removeClass(options.activeTabClass);

      var $tg = $(e.target);
      if($tg.is('a')) $tg = $tg.parent('div');
      $tg.addClass(options.activeTabClass).removeClass(options.inactiveTabClass);
      
      inst.executeTargetCloseAction($tgClose);
      inst.executeTargetOpenAction($tg);
      
      if(!options.allowDefaultClickHandler)
         e.preventDefault();
   }
   
   $(document).ready(function() {
      $(tabContainer+' > div').click(inst.tabClick);
   });
   
   return true;
}