/**
 * Determine the current section. The default associations are at the very top of this file.
 *
 * @see _section_data()
 */
function get_section($node = NULL) {
  // Figure out where we are. Path takes precedence then taxonomy then node types.
  static $output = '';
  static $path_checked = FALSE;
  if (defined('SECTION_DEBUG') && SECTION_DEBUG !== NULL) {
    $output = SECTION_DEBUG;
  }
  if (empty($output)) {
    // Get default associations.
    list($path_associate, $taxonomy_associate, $node_types_associate) = _pet_section_data();
    // Only need to check once.
    if (!$path_checked) {
      // Get the current section based on path.
      foreach ($path_associate as $path => $section) {
        // Check for numeric wild cards matches "*", i.e. node/*.
        if (strpos($path, '*') !== FALSE) {
          $path_pieces = explode('/', $path);
          $count_pieces = count($path_pieces);
          $new_path = '';
          foreach ($path_pieces as $i => $arg) {
            $arg = ($arg == '*') ? arg($i) : $arg;
            $new_path .= ($i < $count_pieces -1) ? "$arg/" : $arg;
          }
          $path = $new_path;
        }
        // Check for parent path matching "^". i.e. node^.
        if (strpos($_GET['q'], substr($path, 0, strpos($path, '^'))) === 0) {
          $path = $_GET['q'];
        }
        if ($_GET['q'] == $path) {
          $output = $section;
          break;
        }
      }
      $path_checked = TRUE;
    }
    if (empty($output) && isset($node->taxonomy)) {
      foreach ($node->taxonomy as $term) {
        if (isset($taxonomy_associate[$term->tid])) {
          $output = $taxonomy_associate[$term->tid];
          break;
        }
      }
    }
    if (empty($output) && isset($node) && isset($node_types_associate[$node->type])) {
      $output = $node_types_associate[$node->type];
    }
  }
  return $output;
}