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, newOptions) {
  var that = 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;
  }
  
  function executeTargetOpenAction($target) {
    runActionFromArray(actions, $target);
  }
  
  function executeTargetCloseAction($target) {
    runActionFromArray(actionsClose, $target);
  }
  
  function runActionFromArray(actionArray, $target) {
    var callRes = null;
    
    for (var id in actionArray) {
      if (actionArray.hasOwnProperty(id) && $target.hasClass(id)) {
        if (typeof actionArray[id] == 'string') {
          //string-type "action" defines a selector of elements to show/hide
          $(actionArray[id]).toggle();
        } else {
          callRes = actionArray[id].call($target[0]);
        }
        return true;
      }
    }
    
    if ($target.length) {
      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;
  }
  
  function tabClick(e) {
    var $tgClose = $(tabContainer+' > div.' + options.activeTabClass);
    var $tg = $(e.target);
    if (!$tg.is('div')) $tg = $tg.parent('div');
    
    // trying to switch to itself? Cancel the event
    if ($tg.hasClass(options.activeTabClass)) {
      e.preventDefault();
      return;
    }
    
    $tgClose.addClass(options.inactiveTabClass).removeClass(options.activeTabClass);
    $tg.addClass(options.activeTabClass).removeClass(options.inactiveTabClass);
    
    executeTargetCloseAction($tgClose);
    executeTargetOpenAction($tg);
      
    if (!options.allowDefaultClickHandler) {
      e.preventDefault();
    }
  }

  if (newOptions) {
    this.setOptions(newOptions);
  }
  
  $(document).ready(function() {
    $(tabContainer).delegate(tabContainer + ' > div', 'click', tabClick);
  });
}
