Index: includes/jcarousel.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/jcarousel/includes/Attic/jcarousel.views.inc,v
retrieving revision 1.1.2.6
diff -u -r1.1.2.6 jcarousel.views.inc
--- includes/jcarousel.views.inc	6 Feb 2011 04:51:11 -0000	1.1.2.6
+++ includes/jcarousel.views.inc	6 Feb 2011 04:54:01 -0000
@@ -70,10 +70,9 @@
           $view->set_items_per_page($last - $first);
           $view->set_offset($first);
 
-          // TODO: $view->pager doesn't even exist in Views 3, yet it seems to
-          // fix  the Views 3 handling. Find the "official" approach here.
-          $view->pager['offset'] = $first;
-          $view->pager['items_per_page'] = $last - $first;
+          // Redundant but apparently needed.
+          $view->items_per_page = $last - $first;
+          $view->offset = $first;
         }
 
         // Reuse the same DOM id so it matches that in Drupal.settings.
@@ -134,28 +133,46 @@
   // If using AJAX, adjust the view's positioning based on the current page.
   if ($view->use_ajax) {
     $options['ajax'] = TRUE;
-
-    $use_pager = $view->pager['use_pager'];
-    $view->pager['use_pager'] = TRUE;
-    $view->build($display_id);
-
     $options['size'] = $count;
-    $view->pager['use_pager'] = $use_pager;
+
+    // Views 2:
+    if (isset($view->pager)) {
+      // Enable and adjust the pager to get the correct page.
+      $use_pager = $view->pager['use_pager'];
+      $view->pager['use_pager'] = TRUE;
+      $view->build($display_id);
+      $view->pager['use_pager'] = $use_pager;
+
+      // Create generic variable names.
+      $pager_current_page = $view->pager['current_page'];
+      $pager_items_per_page = $view->pager['items_per_page'];
+      $pager_offset = $view->pager['offset'];
+    }
+    // Views 3:
+    else {
+      // Adjusting the query is not necessary.
+      $view->build($display_id);
+
+      // Create generic variable names.
+      $pager_current_page = $view->current_page;
+      $pager_items_per_page = $view->items_per_page;
+      $pager_offset = $view->offset;
+    }
 
     // If starting in the middle of a view, initialize the carousel at that
     // position. Strangely the carousel must pre-load empty LI items all the way
     // up until the active item, making this inefficient for large lists.
-    if ($view->pager['use_pager'] && $view->pager['current_page']) {
+    if ($pager_current_page) {
       // TODO: Pagers and carousels do not work well together. jCarousel should
       // give items the class "jcarousel-item-[offset]", but instead it always
       // starts with "1", making it impossible to define a prepopulated list
       // as the middle of an AJAX view.
-      $options['start'] = ($view->pager['current_page'] * $view->pager['items_per_page']) + ($view->pager['offset'] + 1);
-      $options['offset'] = ($view->pager['current_page'] * $view->pager['items_per_page']) + ($view->pager['offset'] + 1);
+      $options['start'] = ($pager_current_page * $pager_items_per_page) + ($pager_offset + 1);
+      $options['offset'] = ($pager_current_page * $pager_items_per_page) + ($pager_offset + 1);
     }
-    elseif ($view->pager['offset']) {
-      $options['start'] = $view->pager['offset'] + 1;
-      $options['offset'] = $view->pager['offset'] + 1;
+    elseif ($pager_offset) {
+      $options['start'] = $pager_offset + 1;
+      $options['offset'] = $pager_offset + 1;
     }
   }
 
@@ -181,9 +198,12 @@
   }
   $variables['jcarousel_classes'] = implode(' ', $variables['jcarousel_classes_array']);
 
+  // Views 2/3 compatibility.
+  $pager_offset = isset($view->pager['offset']) ? $view->pager['offset'] : $view->offset;
+
   // Give each item a class to identify where in the carousel it belongs.
   foreach ($variables['rows'] as $id => $row) {
-    $variables['classes'][$id] = 'jcarousel-item-' . ($id + 1 + $view->pager['offset']);
+    $variables['classes'][$id] = 'jcarousel-item-' . ($id + 1 + $pager_offset);
   }
 
 }
