diff -Naur fancy_slide/fancy_slide.module fancy_slide/fancy_slide.module
--- fancy_slide/fancy_slide.module	2009-09-11 17:59:29.000000000 +0800
+++ fancy_slide/fancy_slide.module	2010-01-27 22:53:53.000000000 +0800
@@ -840,6 +849,7 @@
 function theme_fancy_slide_form($form) {
   $header = array(
     t('Name'),
+    t('ID'),
     t('Dimensions'),
     t('Type'),
     t('Source'),
@@ -851,6 +861,7 @@
   foreach ($slideshows as $key => $slideshow) {
     $row = array();
     $row[] = drupal_render($form['slidename'][$key]);
+    $row[] = $key;
     $row[] = drupal_render($form['dimensions'][$key]);
     $row[] = drupal_render($form['type'][$key]);
     $row[] = drupal_render($form['nodeinfo'][$key]);
@@ -875,3 +886,52 @@
   fancy_slide_render(1);
   return theme('table', $header, $rows);
 }
+
+/*
+ * Implementation of hook_filter_tips
+ */
+function fancy_slide_filter_tips($delta, $format, $long = false) {
+  if ($long) {
+    return t('<h2 id="fancy_slide_filter">Fancy Slide Filter</h2>To embed a slide show in a node enter:<blockquote><code>[fancyslide id=X]</code></blockquote>where &quot;X&quot; is the ID of the slide show, or enter:<blockquote><code>[fancyslide name="fancy slide name"]</code></blockquote>where &quot;fancy slide name&quot; is the Name of the slide show.  The IDs and Names of all your Slide Shows can be found at !fsadmin.', array('!fsadmin' => l(t('Fancy Side Admin'), 'admin/content/fancy-slide')));
+  }
+  else {
+    return t('Enter !fancy_slide_filter_help to place a slide show in a node', array("!fancy_slide_filter_help" => l('[fancyslide id=X] or [fancyslide name="name"]', "filter/tips/$format", array('query' => 'fancy_slide_filter'))));
+  }
+}
+
+/*
+ * Implementation of hook_filter
+ */
+function fancy_slide_filter($op, $delta = 0, $format = -1, $text = '') {
+  switch ($op) {
+    case 'list':
+      return array(0 => t('Fancy Slide filter'));
+    case 'description':
+      return t('Substitutes [fancyslide id=X] or [fancyslide name="name"] with code to embed slide show in node.');
+    case 'process':
+      //lookahead for paragraph around the slideshow since editors like fckeditor will add it,
+      if (preg_match_all('@(?:<p>)?\[fancyslide\s*(id|name)=(?:\"|&quot;)?(.*?)(?:\"|&quot;)?\](?:</p>)?@', $text, $match)) {
+         // $match[0][#] = complete match - [fancyslide ...]
+         // $match[1][#] = matched id or name
+         // $match[2][#] = matched number or string
+	 $matched_text = array();
+	 $quote_replace = array('\'','\"','&quot;');
+	 $counter = 0;
+         foreach($match[1] as $m) {
+	   $value = str_replace($quote_replace,'',$match[2][$counter]);
+	   if ($m == 'id') { $matched_text[$counter] = theme('fancy_slide', $value); }
+           elseif ($m == 'name') {
+             // we only want one just in case of duplicate names, so use limit
+             $sql = db_query_range("SELECT sid FROM {fancy_slide} WHERE LOWER(name) = LOWER('%s')",$value, 0, 1);
+             $row = db_fetch_object($sql);
+             $id = $row->sid;
+             $matched_text[$counter] = theme('fancy_slide', $id);
+           }
+	   $counter++;
+         }
+         return str_replace($match[0],$matched_text,$text);
+      }
+    default:
+	return $text;
+  }
+}
