--- views/docs/docs.php	2008-10-02 15:54:56.000000000 -0700
+++ views/docs/docs.php	2008-10-24 00:50:49.000000000 -0700
@@ -211,6 +211,7 @@
     ),
     'items_per_page' => 10,
     'use_pager' => '1',
+    'use_top_pager' => '1',
     'pager_element' => 0,
     'title' => '',
     'header' => '',
@@ -242,6 +243,7 @@
       'items_per_page' => true,
       'offset' => true,
       'use_pager' => true,
+      'use_top_pager' => true,
       'pager_element' => true,
       'link_display' => true,
       'php_arg_code' => true,
@@ -298,6 +300,7 @@
       'items_per_page' => true,
       'offset' => true,
       'use_pager' => true,
+      'use_top_pager' => true,
       'pager_element' => true,
       'use_more' => true,
       'distinct' => true,
--- views/includes/convert.inc	2008-10-07 17:14:01.000000000 -0700
+++ views/includes/convert.inc	2008-10-24 00:50:49.000000000 -0700
@@ -147,6 +147,7 @@
   $handler->set_option('empty_format', $imported->page_empty_format);
 
   $handler->set_option('use_pager', $imported->use_pager);
+  $handler->set_option('use_top_pager', $imported->use_top_pager);
   $handler->set_option('items_per_page', $imported->nodes_per_page);
   $handler->set_option('pager_element', 0);
   $handler->set_option('offset', 0);
--- views/includes/plugins.inc	2008-10-14 11:58:01.000000000 -0700
+++ views/includes/plugins.inc	2008-10-24 00:50:49.000000000 -0700
@@ -30,6 +30,7 @@
         'no remove' => TRUE,
         'js' => array('misc/collapse.js', 'misc/textarea.js', 'misc/tabledrag.js', 'misc/autocomplete.js', "$path/dependent.js"),
         'use ajax' => TRUE,
+        'use top pager' => TRUE,
         'use pager' => TRUE,
         'use more' => TRUE,
         'accept attachments' => TRUE,
@@ -42,6 +43,7 @@
         'theme' => 'views_view',
         'uses hook menu' => TRUE,
         'use ajax' => TRUE,
+        'use top pager' => TRUE,
         'use pager' => TRUE,
         'accept attachments' => TRUE,
         'admin' => t('Page'),
@@ -54,6 +56,7 @@
         'theme' => 'views_view',
         'uses hook block' => TRUE,
         'use ajax' => TRUE,
+        'use top pager' => TRUE,
         'use pager' => TRUE,
         'use more' => TRUE,
         'accept attachments' => TRUE,
@@ -75,6 +78,7 @@
         'parent' => 'page', // so it knows to load the page plugin .inc file
         'uses hook menu' => TRUE,
         'use ajax' => FALSE,
+        'use top pager' => FALSE,
         'use pager' => FALSE,
         'accept attachments' => FALSE,
         'admin' => t('Feed'),
--- views/includes/view.inc	2008-10-16 10:06:25.000000000 -0700
+++ views/includes/view.inc	2008-10-24 00:50:49.000000000 -0700
@@ -32,6 +32,7 @@
   // pager variables
   var $pager = array(
     'use_pager' => FALSE,
+    'use_top_pager' => FALSE,
     'items_per_page' => 10,
     'element' => 0,
     'offset' => 0,
@@ -93,6 +94,7 @@
     $this->pager['items_per_page'] = $items_per_page;
     if (empty($items_per_page)) {
       $this->pager['use_pager'] = FALSE;
+      $this->pager['use_top_pager'] = FALSE;
     }
   }
 
@@ -103,8 +105,12 @@
     $this->pager['use_pager'] = $use_pager;
   }
 
+  function set_use_top_pager($use_pager) {
+    $this->pager['use_top_pager'] = $use_pager;
+  }
+
   /**
-   * The pager element id to use if use_apger is on
+   * The pager element id to use if use_pager is on
    */
   function set_pager_element($pager_element) {
     $this->pager['element'] = $pager_element;
@@ -693,11 +699,11 @@
         // support an offset. This is fine as we don't actually need pager
         // query; we've already been doing most of what it does, and we
         // just need to do a little more playing with globals.
-        if (!empty($this->pager['use_pager']) || !empty($this->get_total_rows)) {
+        if (!empty($this->pager['use_pager']) || !empty($this->pager['use_top_pager']) || !empty($this->get_total_rows)) {
           $this->total_rows = db_result(db_query($count_query, $args)) - $this->pager['offset'];
         }
 
-        if (!empty($this->pager['use_pager'])) {
+        if (!empty($this->pager['use_pager']) || !empty($this->pager['use_top_pager'])) {
           // dump information about what we already know into the globals
           global $pager_page_array, $pager_total, $pager_total_items;
           // total rows in query
--- views/js/ajax_view.js	2008-10-15 15:09:19.000000000 -0700
+++ views/js/ajax_view.js	2008-10-24 00:50:49.000000000 -0700
@@ -130,6 +130,38 @@
             });
         })
         .end()
+        // Process dropdown pager.
+        .find('ul.pager > li > select')
+        .each(function () {
+          $(this)
+            .change(function () {
+              var vData = Drupal.Views.parseQueryString($(this).attr('value'));
+              $.each(settings, function (key, setting) {
+                vData[key] = setting;
+              });
+
+              $(this).addClass('views-throbbing');
+              $.ajax({
+                url: ajax_path,
+                type: 'GET',
+                data: vData,
+                success: function(response) {
+                  $(this).removeClass('views-throbbing');
+                  // Call all callbacks.
+                  if (response.__callbacks) {
+                    $.each(response.__callbacks, function(i, callback) {
+                      eval(callback)(target, response);
+                    });
+                  }
+                },
+                error: function() { $(this).removeClass('views-throbbing'); alert(Drupal.t("An error occurred at ") + ajax_path); },
+                dataType: 'json'
+              });
+
+              return false;
+            });
+        })
+        .end()
         // Process tablesort links.
         .find('th.views-field a')
         .each(function () {
--- views/modules/comment.views_default.inc	2008-06-10 14:30:43.000000000 -0700
+++ views/modules/comment.views_default.inc	2008-10-24 00:50:49.000000000 -0700
@@ -122,6 +122,7 @@
   ));
   $handler->override_option('items_per_page', 25);
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('row_options', array(
     'inline' => array(
       'title' => 'title',
@@ -300,6 +301,7 @@
   $handler->override_option('title', 'Recent posts');
   $handler->override_option('items_per_page', '25');
   $handler->override_option('use_pager', TRUE);
+  $handler->override_option('use_top_pager', TRUE);
   $handler->override_option('style_plugin', 'table');
   $handler->override_option('style_options', array(
     'override' => 1,
--- views/modules/node.views_default.inc	2008-10-07 14:24:15.000000000 -0700
+++ views/modules/node.views_default.inc	2008-10-24 00:50:49.000000000 -0700
@@ -73,6 +73,7 @@
   $handler->override_option('empty_format', '1');
   $handler->override_option('use_ajax', '1');
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('row_plugin', 'node');
   $handler->override_option('row_options', array(
     'teaser' => 1,
@@ -195,6 +196,7 @@
   $handler->override_option('use_ajax', '1');
   $handler->override_option('items_per_page', 36);
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('style_plugin', 'table');
   $handler->override_option('style_options', array(
     'grouping' => '',
@@ -338,6 +340,7 @@
     'perm' => '',
   ));
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('row_plugin', 'node');
   $handler->override_option('row_options', array(
     'teaser' => TRUE,
--- views/modules/search.views_default.inc	2008-06-10 14:30:43.000000000 -0700
+++ views/modules/search.views_default.inc	2008-10-24 00:50:49.000000000 -0700
@@ -80,6 +80,7 @@
   $handler->override_option('empty_format', '1');
   $handler->override_option('items_per_page', 30);
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('style_plugin', 'list');
   $handler->override_option('style_options', array(
     'type' => 'ol',
--- views/modules/statistics.views_default.inc	2008-07-21 14:05:12.000000000 -0700
+++ views/modules/statistics.views_default.inc	2008-10-24 00:50:49.000000000 -0700
@@ -101,6 +101,7 @@
   $handler->override_option('title', 'Popular content');
   $handler->override_option('items_per_page', '25');
   $handler->override_option('use_pager', TRUE);
+  $handler->override_option('use_top_pager', TRUE);
   $handler->override_option('use_more', 1);
   $handler->override_option('style_plugin', 'table');
   $handler->override_option('style_options', array(
--- views/modules/taxonomy.views.inc	2008-10-01 10:20:58.000000000 -0700
+++ views/modules/taxonomy.views.inc	2008-10-24 00:50:49.000000000 -0700
@@ -155,6 +155,18 @@
     ),
   );
 
+  // Term teaser
+  $data['term_data']['teaser'] = array(
+    'title' => t('Term teaser'), // The item it appears as on the UI,
+    'help' => t('The teaser associated with a taxonomy term.'),
+    'field' => array(
+      'field' => 'teaser', // the real field
+      'group' => t('Taxonomy'), // The group it appears in on the UI,
+      'handler' => 'views_handler_field_markup',
+      'format' => FILTER_FORMAT_DEFAULT,
+    ),
+  );
+
   // Term vocabulary
   $data['term_data']['vid'] = array(
     'title' => t('Vocabulary'),
--- views/modules/taxonomy.views_default.inc	2008-06-10 14:30:43.000000000 -0700
+++ views/modules/taxonomy.views_default.inc	2008-10-24 00:50:49.000000000 -0700
@@ -120,6 +120,7 @@
     'perm' => '',
   ));
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('row_plugin', 'node');
   $handler->override_option('row_options', array(
     'teaser' => TRUE,
@@ -140,6 +141,7 @@
   $handler = $view->new_display('feed', 'Core feed', 'feed');
   $handler->override_option('items_per_page', 15);
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('row_plugin', 'node_rss');
   $handler->override_option('row_options', array(
     'item_length' => 'default',
@@ -162,6 +164,7 @@
   $handler = $view->new_display('feed', 'Views 1 feed', 'feed_1');
   $handler->override_option('items_per_page', 15);
   $handler->override_option('use_pager', '1');
+  $handler->override_option('use_top_pager', '1');
   $handler->override_option('row_plugin', 'node_rss');
   $handler->override_option('row_options', array(
     'item_length' => 'default',
--- views/plugins/views_plugin_display.inc	2008-10-14 12:51:56.000000000 -0700
+++ views/plugins/views_plugin_display.inc	2008-10-24 00:50:49.000000000 -0700
@@ -119,6 +119,13 @@
     return FALSE;
   }
 
+  function use_top_pager() {
+    if (!empty($this->definition['use top pager'])) {
+      return $this->get_option('use_top_pager');
+    }
+    return FALSE;
+  }
+
   /**
    * Does the display have a more link enabled?
    */
@@ -153,7 +160,8 @@
       'footer' => array('footer', 'footer_format', 'footer_empty'),
       'empty' => array('empty', 'empty_format'),
       'use_ajax' => array('use_ajax'),
-      'items_per_page' => array('items_per_page', 'offset', 'use_pager', 'pager_element'),
+      'items_per_page' => array('items_per_page', 'offset', 'use_top_pager', 'use_pager', 'pager_element'),
+      'use_top_pager' => array('items_per_page', 'offset', 'use_top_pager', 'pager_element'),
       'use_pager' => array('items_per_page', 'offset', 'use_pager', 'pager_element'),
       'use_more' => array('use_more'),
       'link_display' => array('link_display'),
@@ -225,6 +233,7 @@
           'use_ajax' => TRUE,
           'items_per_page' => TRUE,
           'offset' => TRUE,
+          'use_top_pager' => TRUE,
           'use_pager' => TRUE,
           'pager_element'  => TRUE,
           'use_more' => TRUE,
@@ -310,6 +319,9 @@
       'offset' => array(
         'default' => 0,
       ),
+      'use_top_pager' => array(
+        'default' => FALSE,
+      ),
       'use_pager' => array(
         'default' => FALSE,
       ),
@@ -635,11 +647,20 @@
       );
     }
 
+    if (!empty($this->definition['use top pager'])) {
+      $options['use_top_pager'] = array(
+        'category' => 'basic',
+        'title' => t('Use top pager'),
+        'value' => $this->get_option('use_top_pager') ? ((strlen($this->get_option('use_top_pager')) > 1) ? ($this->get_option('use_top_pager') === 'mini' ? t('Mini') : t('Yes (dropdown style)')) : t('Yes')) : t('No'),
+        'desc' => t("Change this display's top pager setting."),
+      );
+    }
+
     if (!empty($this->definition['use pager'])) {
       $options['use_pager'] = array(
         'category' => 'basic',
         'title' => t('Use pager'),
-        'value' => $this->get_option('use_pager') ? ($this->get_option('use_pager') === 'mini' ? t('Mini') : t('Yes')) : t('No'),
+        'value' => $this->get_option('use_pager') ? ((strlen($this->get_option('use_pager')) > 1) ? ($this->get_option('use_pager') === 'mini' ? t('Mini') : t('Yes (dropdown style)')) : t('Yes')) : t('No'),
         'desc' => t("Change this display's pager setting."),
       );
     }
@@ -647,7 +668,7 @@
     $items = intval($this->get_option('items_per_page'));
     $options['items_per_page'] = array(
       'category' => 'basic',
-      'title' => $this->use_pager() ? t('Items per page') : t('Items to display'),
+      'title' => ($this->use_pager() || $this->use_top_pager()) ? t('Items per page') : t('Items to display'),
       'value' => $items ? $items : t('Unlimited'),
       'desc' => t('Change how many items to display.'),
     );
@@ -804,11 +825,25 @@
           '#default_value' => $this->get_option('use_ajax') ? 1 : 0,
         );
         break;
+      case 'use_top_pager':
+        $form['#title'] .= t('Use a top pager for this view');
+        $form['use_top_pager'] = array(
+          '#type' => 'radios',
+          '#options' => array(TRUE => t('Full pager'), 'dropdown' => t('Full pager(dropdown style)'), 'mini' => t('Mini pager'), 0 => t('No')),
+          '#default_value' => $this->get_option('use_top_pager'),
+        );
+        $form['pager_element'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Pager element'),
+          '#description' => t("Unless you're experiencing problems with pagers related to this view, you should leave this at 0. If using multiple pagers on one page you may need to set this number to a higher value so as not to conflict within the ?page= array. Large values will add a lot of commas to your URLs, so avoid if possible."),
+          '#default_value' => intval($this->get_option('pager_element')),
+        );
+        break;
       case 'use_pager':
         $form['#title'] .= t('Use a pager for this view');
         $form['use_pager'] = array(
           '#type' => 'radios',
-          '#options' => array(TRUE => t('Full pager'), 'mini' => t('Mini pager'), 0 => t('No')),
+          '#options' => array(TRUE => t('Full pager'), 'dropdown' => t('Full pager(dropdown style)'), 'mini' => t('Mini pager'), 0 => t('No')),
           '#default_value' => $this->get_option('use_pager'),
         );
         $form['pager_element'] = array(
@@ -819,7 +854,7 @@
         );
         break;
       case 'items_per_page':
-        $form['#title'] .= $this->use_pager() ? t('Items per page') : t('Items to display');
+        $form['#title'] .= ($this->use_pager() || $this->use_top_pager()) ? t('Items per page') : t('Items to display');
 
         $form['items_per_page'] = array(
           '#type' => 'textfield',
@@ -1312,6 +1347,7 @@
         $this->set_option($section, (bool)$form_state['values'][$section]);
         break;
       case 'use_pager':
+      case 'use_top_pager':
         $this->set_option($section, $form_state['values'][$section]);
         $this->set_option('pager_element', intval($form_state['values']['pager_element']));
         break;
@@ -1589,6 +1625,7 @@
   function pre_execute() {
     $this->view->set_use_ajax($this->use_ajax());
     // Copy pager information from the display.
+    $this->view->set_use_top_pager($this->use_top_pager());
     $this->view->set_use_pager($this->use_pager());
     $this->view->set_pager_element($this->get_option('pager_element'));
     $this->view->set_items_per_page($this->get_option('items_per_page'));
--- views/theme/theme.inc	2008-10-16 10:06:25.000000000 -0700
+++ views/theme/theme.inc	2008-10-24 00:50:49.000000000 -0700
@@ -77,10 +77,15 @@
 
   $exposed_input = isset($view->exposed_data_raw) ? $view->exposed_data_raw : NULL;
   if (!empty($view->pager['use_pager'])) {
-    $pager_type = ($view->pager['use_pager'] === 'mini' ? 'views_mini_pager' : 'pager');
+    $pager_type = ($view->pager['use_pager'] === 'mini' ? 'views_mini_pager' : ($view->pager['use_pager'] === 'dropdown' ? 'views_dropdown_pager' : 'pager'));
     $pager_theme = views_theme_functions($pager_type, $view, $view->display_handler->display);
     $vars['pager']    = theme($pager_theme, $exposed_input, $view->pager['items_per_page'], $view->pager['element']);
   }
+  if (!empty($view->pager['use_top_pager'])) {
+    $pager_type = ($view->pager['use_top_pager'] === 'mini' ? 'views_mini_pager' : ($view->pager['use_top_pager'] === 'dropdown' ? 'views_dropdown_pager' : 'pager'));
+    $pager_theme = views_theme_functions($pager_type, $view, $view->display_handler->display);
+    $vars['top_pager']    = theme($pager_theme, $exposed_input, $view->pager['items_per_page'], $view->pager['element']);
+  }
 
   // if administrator, add some links. These used to be tabs, but this is better.
   if (user_access('administer views') && module_exists('views_ui') && empty($view->hide_admin_links) && !variable_get('views_no_hover_links', FALSE)) {
@@ -103,6 +108,23 @@
         'href' => "admin/build/views/clone/$view->name",
       ),
     );
+    
+    if ($view->name == 'category_from_url') {
+      $args = $view->args;
+      $term = preg_replace('/[-_]/',' ',$args['0']);
+      $possibilities = taxonomy_get_term_by_name($term);
+      foreach ($possibilities as $possibility) {
+        if ($possibility->vid == 3) {
+          $tid = $possibility->tid;
+        }
+      }
+      $vars['admin_links_raw'][] = 
+        array(
+          'title' => t('Edit Content'),
+          'alt' => t("Edit content of this taxonomy node"),
+          'href' => "admin/content/taxonomy/edit/term/".$tid."?destination=admin%2Fcontent%2Ftaxonomy%2F3",
+        );
+    }
 
     drupal_alter('views_admin_links', $vars['admin_links_raw']);
     $vars['admin_links'] = theme('links', $vars['admin_links_raw']);
@@ -543,6 +565,73 @@
   $vars['button'] = drupal_render($form);
 }
 
+function theme_views_dropdown_pager($tags = array(), $limit = 10, $element = 0, $parameters = array(), $quantity = 9) {
+  global $pager_page_array, $pager_total;
+  if ($pager_total[$element] > 1) {
+    $page = isset($_GET['page']) ? $_GET['page'] : '';
+
+    $pager_current = $pager_page_array[$element] + 1;
+    $pager_max = $pager_total[$element];
+
+    $li_previous = t('‹‹ Prev Page');
+    $li_next = t('Next Page ››');
+    $output = '<span class="pager-jump">Jump to: </span><select name="pager" class="form-select active" onchange="if (!Drupal.Views.Ajax) { window.open(this.options[this.selectedIndex].value,\'_self\'); return false; }" id="pager">';
+
+    for ($x = 1; $x <= $pager_max; $x++) {
+      if ($new_page = implode(',', pager_load_array($x - 1, $element, explode(',', $page)))) {
+        $parameters['page'] = $new_page;
+      } else {
+        if ($x > 1) $parameters['page'] = $x - 1;
+      }
+
+      $query = array();
+      if (count($parameters)) {
+        $params = array();
+        foreach ($parameters as $key => $value) {
+          $params[] = $key .'='. $value;
+        }
+        $query[] = implode('&', $params);
+      }
+      $querystring = pager_get_querystring();
+      if ($querystring != '') {
+        $query[] = $querystring;
+      }
+
+      $link = "/". $_GET['q'] . (count($query)?('?'. implode('&', $query)):'');
+      $output .= '<option value="'. $link . (($x == $pager_current)?'" selected="selected':''). '">Page '. $x .'</option>';
+
+      // While at it, build previous and next a hrefs
+      if ($x == $pager_current - 1)
+        $li_previous = '<a href="'. $link . '">'. $li_previous .'</a>';
+      else if ($x == $pager_current + 1)
+        $li_next = '<a href="'. $link . '">'. $li_next .'</a>';
+    }
+    $output .= '</select>';
+
+    $items[] = array(
+      'class' => 'pager-current',
+      'data' => t('Page @current of @max', array('@current' => $pager_current, '@max' => $pager_max)),
+    );
+    $items[] = array(
+      'class' => "pager-dropdown",
+      'data' => $output,
+    );
+    $items[] = array(
+      'class' => 'pager-previous',
+      'data' => $li_previous,
+    );
+    $items[] = array(
+      'class' => 'pager-divider',
+      'data' => '|',
+    );
+    $items[] = array(
+      'class' => 'pager-next',
+      'data' => $li_next,
+    );
+    return theme('item_list', $items, NULL, 'ul', array('class' => 'dropdownpager pager'));
+  }
+}
+
 function theme_views_mini_pager($tags = array(), $limit = 10, $element = 0, $parameters = array(), $quantity = 9) {
   global $pager_page_array, $pager_total;
 
--- views/theme/views-view.tpl.php	2008-09-22 13:50:58.000000000 -0700
+++ views/theme/views-view.tpl.php	2008-10-24 00:50:49.000000000 -0700
@@ -43,6 +43,10 @@
     </div>
   <?php endif; ?>
 
+  <?php if ($top_pager): ?>
+    <?php print $top_pager; ?>
+  <?php endif; ?>
+
   <?php if ($rows): ?>
     <div class="view-content">
       <?php print $rows; ?>
--- views/views.module	2008-10-16 10:21:36.000000000 -0700
+++ views/views.module	2008-10-24 00:50:49.000000000 -0700
@@ -35,6 +35,11 @@
     'pattern' => 'views_mini_pager__',
   );
 
+  // custom pager
+  $hooks['views_dropdown_pager'] = $base + array(
+    'arguments' => array('tags' => array(), 'limit' => 10, 'element' => 0, 'parameters' => array()),
+  );
+
   $arguments = array(
     'display' => array('view' => NULL),
     'style' => array('view' => NULL, 'options' => NULL, 'rows' => NULL, 'title' => NULL),
