--- ed_readmore.init.module	2007-12-05 03:57:38.000000000 -0600
+++ ed_readmore.module	2007-12-05 03:57:38.000000000 -0600
@@ -27,7 +27,7 @@ define('ED_READMORE_MODULE_VERSION', '$I
 define('ED_READMORE_READMORE_TWEAK_DEFAULT', TRUE);
 define('ED_READMORE_READMORE_INLINE_DEFAULT', TRUE);
 // use this for "fancy" default
-define('ED_READMORE_TEXT_DEFAULT', '&nbsp;read&nbsp;more&nbsp;&raquo;');
+define('ED_READMORE_TEXT_DEFAULT', 'read more &raquo;');
 //define('ED_READMORE_TEXT_DEFAULT', 'read more &raquo;');
 
 /**
@@ -38,14 +38,16 @@ define('ED_READMORE_TEXT_DEFAULT', '&nbs
  */
 
 function _ed_readmore_place_readmore_link($thing, $link, $inlineflag) {
-  $read_more = " <span class='read-more'>" . $link . "</span>";
+  $read_more = "<span class='read-more'>" . $link . "</span>";
   if ($inlineflag) {
+    // (only if is inline) it must be prefixes with a nonbreaking space: &nbsp;
+    $read_more = '&nbsp;' . $read_more;
     // deal with broken strrpos on php4
     if (_ed_readmore_is_php4()) {
       $find_last = '_ed_readmore_strrpos_string';
     }
     else {
-      $find_last = 'strrpos';
+      $find_last = 'strripos';
     }
     // int strrpos ( string haystack, string needle [, int offset] )
     // substr_replace ( mixed string, string replacement, int start [, int length] )
@@ -76,14 +78,21 @@ function _ed_readmore_place_readmore_lin
 function ed_readmore_nodeapi(&$node, $op, $teaser, $page) {
   $enabled = variable_get('ed_readmore_readmore_tweak', ED_READMORE_READMORE_TWEAK_DEFAULT);
   $inlineflag = variable_get('ed_readmore_readmore_inline', ED_READMORE_READMORE_INLINE_DEFAULT);
-  $readmore_url = l(variable_get('ed_readmore_text', t(ED_READMORE_TEXT_DEFAULT)), "node/$node->nid", NULL, NULL, NULL, TRUE, TRUE);
+  // prepare the link text
+  $link_text = variable_get('ed_readmore_text', t(ED_READMORE_TEXT_DEFAULT));
+  $link_text = t($link_text); // this was added to allow localization of the link text
+  $link_text = str_replace(' ', '&nbsp;', $link_text); // prevent line break into the readmore link
+  // $readmore_url is used for regular node teaser
+  $readmore_url = l($link_text, "node/$node->nid", array('title' => t('Read the rest of this posting.')), NULL, NULL, FALSE, TRUE); 
+  // $readmore_url_rss is used for RSS teaser
+  $readmore_url_rss = l($link_text, "node/$node->nid", array('title' => t('Read the rest of this posting.')), NULL, NULL, TRUE, TRUE); 
   if ($enabled) {
     if ($op == 'rss item') {
       $item_length = variable_get('feed_item_length', 'teaser'); // from node.module node_feed() code
       switch($item_length) {
         case 'teaser':
           if (strlen($node->teaser) < strlen($node->body)) {
-            $node->teaser = _ed_readmore_place_readmore_link($node->teaser, $readmore_url, $inlineflag);
+            $node->teaser = _ed_readmore_place_readmore_link($node->teaser, $readmore_url_rss, $inlineflag);
           }
           break;
       }
@@ -127,7 +136,7 @@ function _ed_readmore_strrpos_string($ha
   if(trim($haystack) != "" && trim($needle) != "" && $offset <= strlen($haystack)) {
     $last_pos = $offset;
     $found = false;
-    while(($curr_pos = strpos($haystack, $needle, $last_pos)) !== false) {
+    while(($curr_pos = strpos(strtolower($haystack), strtolower($needle), $last_pos)) !== false) {
       $found = true;
       $last_pos = $curr_pos + 1;
     }
