Index: gallery_base.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/gallery/gallery_base.inc,v
retrieving revision 1.6.2.14
diff -u -r1.6.2.14 gallery_base.inc
--- gallery_base.inc	30 May 2007 14:49:27 -0000	1.6.2.14
+++ gallery_base.inc	31 May 2007 23:06:11 -0000
@@ -277,11 +277,31 @@
  * Implementation of gallery_set_css
  */
 function gallery_set_css($css) {
+  global $base_url;
+  static $css_memory = array();
+  
   if (count($css)) {
-    $css = preg_replace('/<link(.*?)href="([^"]*)"([^\/]*)\/>/i', '${2}', $css);
+    $css = preg_replace('/<link(.*?)href="([^"]*)"(.*?)\/>/i', '${2}', $css);
+    $css = preg_replace(array('#^'. $base_url .'#', '#^'. base_path() .'#', '#^/#'), '', $css);
     foreach ($css as $include) {
-      // Gallery's CSS will always be added first, what allows overriding in the module(s)
-      drupal_add_css(substr($include, strlen(base_path())), 'module', 'all', FALSE);
+      if (substr($include, 0, 6) == '<style') {
+        // drupal_add_css() does not support inline styles
+        if (!in_array(($crc = crc32($include)), $css_memory)) {
+          $css_memory[] = $crc;
+          drupal_set_html_head($include);
+        }
+      }
+      elseif (substr($include, 0, 4) == 'http') {
+        // drupal_add_css() does not support external paths
+        if (!in_array(($crc = crc32($include)), $css_memory)) {
+          $css_memory[] = $crc;
+          drupal_set_html_head('<style type="text/css" media="all">@import "'. $include .'";</style>' ."\n");
+        }
+      }
+      else {
+        // Gallery's css must always be added first to allow overriding from the module(s)
+        drupal_add_css($include, 'module', 'all', FALSE);
+      }
     }
   }
 }
@@ -291,14 +311,29 @@
  * (druapl_add_js() ensures proper cascading of included G2 javascript)  
  */
 function gallery_set_javascript($javascript) {
+  global $base_url;
+  static $js_memory = array();
+  
   if (!empty($javascript)) {
     $files = preg_grep('/<script(.*?)src=/i', $javascript);
+    // Inline Javascript
     $inline = array_diff($javascript, $files);
     $inline = preg_replace('/<script([^>]*)>([^<]*)<\/script>/i', '${2}', $inline);
     drupal_add_js(implode("\n", $inline), 'inline');
+    // Javascript files
     $files = preg_replace('/<script(.*?)src="([^"]*)"([^>]*)>(.*?)<\/script>/i', '${2}', $files);
+    $files = preg_replace(array('#^'. $base_url .'#', '#^'. base_path() .'#', '#^/#'), '', $files);
     foreach ($files as $include) {
-      drupal_add_js(substr($include, strlen(base_path())));
+      if (substr($include, 0, 4) == 'http') {
+        // drupal_add_js() does not support external paths
+        if (!in_array(($crc = crc32($include)), $js_memory)) {
+          $js_memory[] = $crc;
+          drupal_set_html_head('<script type="text/javascript" src="'. $include .'"></script>' ."\n");
+        }
+      }
+      else {
+        drupal_add_js($include);
+      }
     }
   }
 }
