diff --git a/wp-content/plugins/wp-recaptcha/mailhide.php b/wp-content/plugins/wp-recaptcha/mailhide.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d77e2ec4db05d254ffb05fab6e34c5256f3bac7
--- /dev/null
+++ b/wp-content/plugins/wp-recaptcha/mailhide.php
@@ -0,0 +1,349 @@
+<?php
+
+require_once('wp-plugin.php');
+
+if (!class_exists('MailHide')) {
+    class MailHide extends WPPlugin {
+        // member variables
+        private $mcrypt_loaded;
+        
+        function MailHide($options_name) {
+            $args = func_get_args();
+            call_user_func_array(array(&$this, "__construct"), $args);
+        }
+
+        function __construct($options_name) {
+            // instantiate super class (sets: options, environment, options_name)
+            parent::__construct($options_name);
+            
+            $this->register_default_options();
+            
+            // require the recaptcha library
+            $this->require_library();
+            
+            // verify mcrypt is loaded
+            $this->verify_mcrypt();
+            
+            // register the hooks
+            $this->register_actions();
+            $this->register_filters();
+            
+            // keep this in the arsenal just in case
+            // disable the make_clickable filter cause it screws things up
+            /*
+            if ($this->mailhide_enabled()) {
+               remove_filter('comment_text', 'make_clickable', 9);
+            }*/
+        }
+        
+        function register_actions() {
+            // load the plugin's textdomain for localization
+            add_action('init', array(&$this, 'load_textdomain'));
+            
+            // options
+            register_activation_hook(WPPlugin::path_to_plugin_directory() . '/wp-recaptcha.php', array(&$this, 'register_default_options')); // this way it only happens once, when the plugin is activated
+            add_action('admin_init', array(&$this, 'register_settings_group'));
+            add_action('admin_init', array(&$this, 'settings_section'));
+            
+            // admin notice
+            add_action('admin_notices', array(&$this, 'missing_mcrypt_notice'));
+            add_action('admin_notices', array(&$this, 'missing_keys_notice'));
+        }
+        
+        function register_filters() {
+            // add the filters only if mcrypt is loaded
+            if ($this->mcrypt_loaded) {
+               if ($this->options['use_in_posts'])
+                  add_filter('the_content', array(&$this, 'mailhide_emails'), 9000);
+                  
+               if ($this->options['use_in_comments'])
+                  add_filter('comment_text', array(&$this, 'mailhide_emails'), 9000);
+                  
+               // todo: this seems like it doesn't work: http://codex.wordpress.org/Plugin_API/Filter_Reference/the_content_rss
+               //   instead check for is_feed() on 'the_content' filter
+               //   the_excerpt_rss filter works fine
+               // concern: it seems like the feeds still show the email encoded in CDATA
+               if ($this->options['use_in_rss']) {
+                  add_filter('the_content_rss', array(&$this, 'mailhide_emails'), 9000);
+                  add_filter('the_excerpt_rss', array(&$this, 'mailhide_emails'), 9000); // this one is sometimes used instead
+               }
+               
+               // todo: atom requires the html to be escaped, rss does not. do so accordingly in the preg_replace_callbacks
+               // todo: also be sure to escape replace_link_with
+               //       - use htmlentities($var, ENT_QUOTES); for escaping?
+               if ($this->options['use_in_rss_comments'])
+                  add_filter('comment_text_rss', array(&$this, 'mailhide_emails'), 9000);
+            }
+        }
+        
+        function mailhide_enabled() {
+            return ($this->options['use_in_posts'] || $this->options['use_in_comments'] || $this->options['use_in_rss'] || $this->options['use_in_rss_comments']);
+        }
+        
+        function keys_missing() {
+            return (empty($this->options['public_key']) || empty($this->options['private_key']));
+        }
+        
+        function create_error_notice($message, $anchor = '') {
+            $options_url = admin_url('options-general.php?page=wp-recaptcha/recaptcha.php') . $anchor;
+            $error_message = sprintf(__($message . ' <a href="%s" title="WP-reCAPTCHA Options">Fix this</a>', 'recaptcha'), $options_url);
+            
+            echo '<div class="error"><p><strong>' . $error_message . '</strong></p></div>';
+        }
+        
+        function missing_mcrypt_notice() {
+            if ($this->mailhide_enabled() && !$this->mcrypt_loaded) {
+                $this->create_error_notice('You enabled MailHide but the mcrypt PHP extension does not seem to be loaded.', '#mailhide');
+            }
+        }
+        
+        // todo: make a check in mailhide_settings partial so that if the keys are missing, the appropriate box is highlighted with #FFFFE0 bg-color 1px solid #E6DB55 border
+        function missing_keys_notice() {
+            if ($this->mailhide_enabled() && $this->keys_missing()) {
+                $this->create_error_notice('You enabled MailHide, but some of the MailHide API Keys seem to be missing.', '#mailhide');
+            }
+        }
+        
+        function settings_section() {
+            add_settings_section('mailhide_options', '', array(&$this, 'show_settings_section'), 'recaptcha_options_page');
+        }
+        
+        function show_settings_section() {
+            include('mailhide_settings.php');
+        }
+        
+        function verify_mcrypt() {
+            $this->mcrypt_loaded = extension_loaded('mcrypt');
+        }
+        
+        // require the recaptcha library
+        function require_library() {
+            require_once(WPPlugin::path_to_plugin_directory() . '/recaptchalib.php');
+        }
+        
+        function load_textdomain() {
+            load_plugin_textdomain('recaptcha', false, 'languages');
+        }
+        
+        function register_default_options() {
+            if ($this->options)
+               return;
+           
+            $option_defaults = array();
+            
+            $old_options = WPPlugin::retrieve_options("recaptcha");
+           
+            if ($old_options) {
+               // keys
+               $option_defaults['public_key'] = $old_options['mailhide_pub']; // mailhide public key
+               $option_defaults['private_key'] = $old_options['mailhide_priv']; // mailhide private key
+
+               // placement
+               $option_defaults['use_in_posts'] = $old_options['use_mailhide_posts']; // mailhide for posts/pages
+               $option_defaults['use_in_comments'] = $old_options['use_mailhide_comments']; // use mailhide for comments
+               $option_defaults['use_in_rss'] = $old_options['use_mailhide_rss']; // use mailhide for the rss feed of the posts/pages
+               $option_defaults['use_in_rss_comments'] = $old_options['use_mailhide_rss_comments']; // use mailhide for the rss comments
+
+               // bypass levels
+               $option_defaults['bypass_for_registered_users'] = ($old_options['mh_bypass'] == "on") ? 1 : 0; // whether to sometimes skip the MailHide filter for registered users
+               $option_defaults['minimum_bypass_level'] = $old_options['mh_bypasslevel']; // who can see full emails normally (should be a valid WordPress capability slug)
+               
+               if ($option_defaults['minimum_bypass_level'] == "level_10") {
+                  $option_defaults['minimum_bypass_level'] = "activate_plugins";
+               }
+
+               // styling
+               $option_defaults['replace_link_with'] = $old_options['mh_replace_link']; // name the link something else
+               $option_defaults['replace_title_with'] = $old_options['mh_replace_title']; // title of the link
+            }
+            
+            else {
+               // keys
+               $option_defaults['public_key'] = ''; // mailhide public key
+               $option_defaults['private_key'] = ''; // mailhide private key
+
+               // placement
+               $option_defaults['use_in_posts'] = 0; // mailhide for posts/pages
+               $option_defaults['use_in_comments'] = 0; // use mailhide for comments
+               $option_defaults['use_in_rss'] = 0; // use mailhide for the rss feed of the posts/pages
+               $option_defaults['use_in_rss_comments'] = 0; // use mailhide for the rss comments
+
+               // bypass levels
+               $option_defaults['bypass_for_registered_users'] = 0; // whether to sometimes skip the MailHide filter for registered users
+               $option_defaults['minimum_bypass_level'] = 'read'; // who can see full emails normally (should be a valid WordPress capability slug)
+
+               // styling
+               $option_defaults['replace_link_with'] = ''; // name the link something else
+               $option_defaults['replace_title_with'] = ''; // title of the link
+            }
+            
+            // add the option based on what environment we're in
+            WPPlugin::add_options($this->options_name, $option_defaults);
+        }
+        
+        function register_settings_group() {
+            register_setting('mailhide_options_group', 'mailhide_options', array(&$this, 'validate_options'));
+        }
+        
+        function validate_dropdown($array, $key, $value) {
+            // make sure that the capability that was supplied is a valid capability from the drop-down list
+            if (in_array($value, $array))
+                return $value;
+            else // if not, load the old value
+                return $this->options[$key];
+        }
+        
+        function validate_options($input) {
+            // keys
+            $validated['public_key'] = trim($input['public_key']); // mailhide public key
+            $validated['private_key'] = trim($input['private_key']); // mailhide private key
+
+            // placement
+            $validated['use_in_posts'] = ($input['use_in_posts'] == 1 ? 1 : 0); // mailhide for posts/pages
+            $validated['use_in_comments'] = ($input['use_in_comments'] == 1 ? 1 : 0); // use mailhide for comments
+            $validated['use_in_rss'] = ($input['use_in_rss'] == 1 ? 1 : 0); // use mailhide for the rss feed of the posts/pages
+            $validated['use_in_rss_comments'] = ($input['use_in_rss_comments'] == 1 ? 1 : 0); // use mailhide for the rss comments
+
+            $capabilities = array('read', 'edit_posts', 'publish_posts', 'moderate_comments', 'activate_plugins');
+
+            // bypass levels
+            $validated['bypass_for_registered_users'] = ($input['bypass_for_registered_users'] == 1 ? 1: 0); // whether to sometimes skip the MailHide filter for registered users
+            $validated['minimum_bypass_level'] = $this->validate_dropdown($capabilities, 'minimum_bypass_level', $input['minimum_bypass_level']); // who can see full emails normally (should be a valid WordPress capability slug)
+
+            // styling
+            $validated['replace_link_with'] = $input['replace_link_with']; // name the link something else
+            $validated['replace_title_with'] = $input['replace_title_with']; // title of the link
+            
+            return $validated;
+        }
+        
+        function build_dropdown($name, $keyvalue, $checked_value) {
+            echo '<select name="' . $name . '" id="' . $name . '">' . "\n";
+            
+            foreach ($keyvalue as $key => $value) {
+                if ($value == $checked_value)
+                    $checked = ' selected="selected" ';
+                
+                echo '\t <option value="' . $value . '"' . $checked . ">$key</option> \n";
+                $checked = NULL;
+            }
+            
+            echo "</select> \n";
+        }
+        
+        function capabilities_dropdown() {
+            // define choices: Display text => permission slug
+            $capabilities = array(
+                __('all registered users', 'recaptcha') => 'read',
+                __('edit posts', 'recaptcha') => 'edit_posts',
+                __('publish posts', 'recaptcha') => 'publish_posts',
+                __('moderate comments', 'recaptcha') => 'moderate_comments',
+                __('activate plugins', 'recaptcha') => 'activate_plugins'
+            );
+            
+            $this->build_dropdown('mailhide_options[minimum_bypass_level]', $capabilities, $this->options['minimum_bypass_level']);
+        }
+        
+        function mailhide_emails($content) {
+            global $user_ID;
+            
+            // set the minimum capability needed to skip the MailHide if there is one
+            if ($this->options['bypass_for_registered_users'] && $this->options['minimum_bypass_level'])
+                $needed_capability = $this->options['minimum_bypass_level'];
+
+            // skip the MailHide display if the minimum capability is met
+            // todo: only 'use in comments' is checked, have to check each of them?
+            // todo: wait, is that necessary? the filter isn't even added if that field is false, removed
+            
+            if ($needed_capability && current_user_can($needed_capability)) {
+                // remove the nohides
+                $content = preg_replace('/\[\/?nohide\]/i','',$content);
+                return $content;
+            }
+
+            // Regular Expressions thanks to diabolic from EFNet #regex
+
+            // match hyperlinks with emails
+            $regex = '/(?!\[nohide\])<a[^>]*href="((?:mailto:)?([^@"]+@[^@"]+))"[^>]*>(.+?)<\/a>(?!\[\/nohide\])/i';
+            $content = preg_replace_callback($regex, array(&$this, "replace_hyperlinked"), $content);
+
+            // match emails
+            // this seems to no longer be necessary because wordpress automatically linkifies all plaintext emails
+            $regex = '/\b([\w.+-]+@[a-z\d.-]+\.[a-z]{2,6})\b(?!\s*\[\/nohide\]|(?:(?!<a[^>]*>).)*<\/a>)/i';
+            $content = preg_replace_callback($regex, array(&$this, "replace_plaintext"), $content);
+            
+            // remove the nohides
+            $content = preg_replace('/\[\/?nohide\]/i','',$content);
+            
+            return $content;
+        }
+        
+        // replace the hyperlinked emails i.e. <a href="haha@lol.com">this</a> or <a href="mailto:haha@lol.com">that</a>
+        function replace_hyperlinked($matches) {
+           $html = "";
+           $email = $matches[2];
+           $text = $matches[3];
+           
+           if ($email == $text) {
+              // employ the use of email parts instead
+              $html = recaptcha_mailhide_html($this->options['public_key'], $this->options['private_key'], $email);
+              
+              // style it
+              $html = '<span class="mh-email">' . $html . "</span>";
+           }
+           
+           else {
+               // get the url, the part inside the href. this is the email of course
+               $url = recaptcha_mailhide_url($this->options['public_key'], $this->options['private_key'], $email);
+
+              // construct a new hyperlink with the url hidden but the link text the same
+              $html = "<a href='" . $url . "' onclick=\"window.open('" . htmlentities ($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\">" . $text . "</a>";
+
+              // style it
+              $html = '<span class="mh-hyperlinked">' . $html . "</span>";
+           }
+
+           return $html;
+        }
+        
+        // replace the plain text emails i.e. haha@lol.com
+        function replace_plaintext($matches) {
+           if ($this->options['replace_link_with'] == "" && $this->options['replace_title_with'] == "") {
+              // find plain text emails and hide them
+              $html = recaptcha_mailhide_html($this->options['public_key'], $this->options['private_key'], $matches[0]);
+           }
+
+           else {
+              // replace both things
+              if ($this->options['replace_link_with'] != "" && $this->options['replace_title_with'] != "") {
+                 $url = recaptcha_mailhide_url($this->options['public_key'], $this->options['private_key'], $matches[0]);
+                 $html = "<a href='" . htmlentities($url, ENT_QUOTES) .
+                    "' onclick=\"window.open('" . htmlentities($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"" . $this->options['replace_title_with'] . "\">" . $this->options['replace_link_with'] . "</a>";
+              }
+
+              // only replace the link
+              else if ($this->options['replace_link_with'] != "" && $this->options['replace_title_with'] == "") {
+                 $url = recaptcha_mailhide_url($this->options['public_key'], $this->options['private_key'], $matches[0]);
+                 $html = "<a href='" . htmlentities($url, ENT_QUOTES) .
+                    "' onclick=\"window.open('" . htmlentities($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">" . $this->options['replace_link_with'] . "</a>";
+              }
+
+              // only replace the title
+              else if ($this->options['replace_link_with'] == "" && $this->options['replace_title_with'] != "") {
+                 $url = recaptcha_mailhide_url($this->options['public_key'], $this->options['private_key'], $matches[0]);
+                 $emailparts = _recaptcha_mailhide_email_parts ($matches[0]);
+
+                $html = htmlentities($emailparts[0], ENT_QUOTES) . "<a href='" . htmlentities($url, ENT_QUOTES) .
+                    "' onclick=\"window.open('" . htmlentities($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"" . $recaptcha_opt['replace_title_with'] . "\">...</a>@" . htmlentities($emailparts[0], ENT_QUOTES);
+              }
+           }
+
+           // style it
+           $html = '<span class="mh-email">' . $html . "</span>";
+
+           return $html;
+        }
+    } // end class declaration
+} // end class exists clause
+
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/wp-recaptcha/mailhide_settings.php b/wp-content/plugins/wp-recaptcha/mailhide_settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..76229d957e5a380475afd74cf5308c7f0087f1cc
--- /dev/null
+++ b/wp-content/plugins/wp-recaptcha/mailhide_settings.php
@@ -0,0 +1,101 @@
+<?php
+
+    if (defined('ALLOW_INCLUDE') === false)
+        die('no direct access');
+
+?>
+
+<a name="mailhide"></a>
+<h2><?php _e('MailHide Options', 'recaptcha'); ?></h2>
+<p><?php _e('One common misconception about MailHide is that it edits your email addresses on the database. This is false, your actual content is never actually modified. Instead, it is "filtered" such that it appears modified to the reader.', 'recaptcha'); ?></p>
+
+<form method="post" action="options.php">
+   <?php settings_fields('mailhide_options_group'); ?>
+
+   <h3><?php _e('Authentication', 'recaptcha'); ?></h3>
+   <p><?php _e('These keys are required before you are able to do anything else.', 'recaptcha'); ?> <?php _e('You can get the keys', 'recaptcha'); ?> <a href="http://mailhide.recaptcha.net/apikey" title="<?php _e('Get your reCAPTCHA API Keys', 'recaptcha'); ?>"><?php _e('here', 'recaptcha'); ?></a>.</p>
+   <p><?php _e('Be sure not to mix them up! The public and private keys are not interchangeable!'); ?></p>
+   
+   <table class="form-table">
+      <tr valign="top">
+         <th scope="row"><?php _e('Public Key', 'recaptcha'); ?></th>
+         <td>
+            <input type="text" name="mailhide_options[public_key]" size="40" value="<?php echo $this->options['public_key']; ?>" />
+         </td>
+      </tr>
+      <tr valign="top">
+         <th scope="row"><?php _e('Private Key', 'recaptcha'); ?></th>
+         <td>
+            <input type="text" name="mailhide_options[private_key]" size="40" value="<?php echo $this->options['private_key']; ?>" />
+         </td>
+      </tr>
+   </table>
+   
+   <h3><?php _e('General Options', 'recaptcha'); ?></h3>
+   <table class="form-table">
+      <tr valign="top">
+         <th scope="row"><?php _e('Use MailHide in', 'recaptcha'); ?></th>
+         <td>
+            <input type="checkbox" id="mailhide_options[use_in_posts]" name="mailhide_options[use_in_posts]" value="1" <?php checked('1', $this->options['use_in_posts']); ?> />
+            <label for="mailhide_options[use_in_posts]"><?php _e('Posts and Pages', 'recaptcha'); ?></label><br />
+            
+            <input type="checkbox" id="mailhide_options[use_in_comments]" name="mailhide_options[use_in_comments]" value="1" <?php checked('1', $this->options['use_in_comments']); ?> />
+            <label for="mailhide_options[use_in_comments]"><?php _e('Comments', 'recaptcha'); ?></label><br />
+            
+            <input type="checkbox" id="mailhide_options[use_in_rss]" name="mailhide_options[use_in_rss]" value="1" <?php checked('1', $this->options['use_in_rss']); ?> />
+            <label for="mailhide_options[use_in_rss]"><?php _e('RSS Feed of Posts and Pages', 'recaptcha'); ?></label><br />
+            
+            <input type="checkbox" id="mailhide_options[use_in_rss_comments]" name="mailhide_options[use_in_rss_comments]" value="1" <?php checked('1', $this->options['use_in_rss_comments']); ?> />
+            <label for="mailhide_options[use_in_rss_comments]"><?php _e('RSS Feed of Comments', 'recaptcha'); ?></label><br />
+         </td>
+      </tr>
+      
+      <tr valign="top">
+         <th scope="row"><?php _e('Target', 'recaptcha'); ?></th>
+         <td>
+            <input type="checkbox" id="mailhide_options[bypass_for_registered_users]" name="mailhide_options[bypass_for_registered_users]" value="1" <?php checked('1', $this->options['bypass_for_registered_users']); ?> />
+            <label for="mailhide_options[bypass_for_registered_users]"><?php _e('Show actual email addresses to Registered Users who can', 'recaptcha'); ?></label>
+            <?php $this->capabilities_dropdown(); ?>
+         </td>
+      </tr>
+   </table>
+   
+   <h3><?php _e('Presentation', 'recaptcha'); ?></h3>
+   <table class="form-table">
+      <tr valign="top">
+         <th scope="row"><?php _e('Replace Link With', 'recaptcha'); ?></th>
+         <td>
+            <input type="text" name="mailhide_options[replace_link_with]" size="70" value="<?php echo $this->options['replace_link_with']; ?>" />
+         </td>
+      </tr>
+      
+      <tr valign="top">
+         <th scope="row"><?php _e('Replace Title With', 'recaptcha'); ?></th>
+         <td>
+            <input type="text" name="mailhide_options[replace_title_with]" size="70" value="<?php echo $this->options['replace_title_with']; ?>" />
+         </td>
+      </tr>
+   </table>
+   
+   <h3><?php _e('Styling', 'recaptcha'); ?></h3>
+   <p>You can style hidden emails using a variety of classes. Style the classes in your theme's stylesheet and be sure to clear any caches you might have to see the results.</p>
+   
+   <ul>
+       <li><strong>.mh-email</strong> is assigned to the complete email</li>
+       <li><strong>.mh-first</strong> is assigned to the first part of the email</li>
+       <li><strong>.mh-middle</strong> is assigned to the middle of the email (the link)</li>
+       <li><strong>.mh-last</strong> is assigned to the last part of the email</li>
+   </ul>
+   
+   <p>The following is an example of the structure:</p>
+   
+   <code>
+       &lt;span class=&quot;mh-email&quot;&gt; <br \>
+       &nbsp;&nbsp;&nbsp; &lt;span class=&quot;mh-first&quot;&gt;jorg&lt;/span&gt; <br \>
+       &nbsp;&nbsp;&nbsp; &lt;a href=&quot;url&quot; class=&quot;mh-middle&quot;&gt;...&lt;/a&gt; <br \>
+       &nbsp;&nbsp;&nbsp; &lt;span class=&quot;mh-last&quot;&gt;@gmail.com&lt;/span&gt; <br \>
+       &lt;/span&gt;
+   </code>
+
+   <p class="submit"><input type="submit" class="button-primary" title="<?php _e('Save MailHide Options') ?>" value="<?php _e('Save MailHide Changes') ?> &raquo;" /></p>
+</form>
\ No newline at end of file
diff --git a/wp-content/plugins/wp-recaptcha/readme.txt b/wp-content/plugins/wp-recaptcha/readme.txt
index 86f9654d123a7011cf22d4920a57ffe27c068e4f..b1c601ea424808aa3eb85e0dc1dccab793ece35f 100644
--- a/wp-content/plugins/wp-recaptcha/readme.txt
+++ b/wp-content/plugins/wp-recaptcha/readme.txt
@@ -2,9 +2,9 @@
 Contributors: BlaenkDenum
 Donate link: http://www.blaenkdenum.com
 Tags: comments, registration, recaptcha, antispam, mailhide, captcha, wpmu
-Requires at least: 2.5
-Tested up to: 3.0.1
-Stable tag: 2.9.8.2
+Requires at least: 2.7
+Tested up to: 2.9.1
+Stable tag: 3.1.3
 
 Integrates reCAPTCHA anti-spam methods with WordPress including comment, registration, and email spam protection. WPMU Compatible.
 
@@ -12,28 +12,26 @@ Integrates reCAPTCHA anti-spam methods with WordPress including comment, registr
 
 = What is reCAPTCHA? =
 
-[reCAPTCHA](http://recaptcha.net/ "reCAPTCHA") is an anti-spam method originating from [Carnegie Mellon University](http://www.cmu.edu/index.shtml "Carnegie Mellon University") which uses [CAPTCHAs](http://recaptcha.net/captcha.html "CAPTCHA") in a [genius way](http://recaptcha.net/learnmore.html "How Does it Work? - reCAPTCHA"). Instead of randomly generating useless characters which users grow tired of continuosly typing in, risking the possibility that spammers will eventually write sophisticated spam bots which use [OCR](http://en.wikipedia.org/wiki/Optical_character_recognition "Optical Character Recognition - Wikipedia") libraries to read the characters, reCAPTCHA uses a different approach.
+[reCAPTCHA](http://recaptcha.net/ "reCAPTCHA") is an anti-spam method originating from [Carnegie Mellon University](http://www.cmu.edu/index.shtml "Carnegie Mellon University"), then acquired by [Google](http://www.google.com/recaptcha) which uses [CAPTCHAs](http://recaptcha.net/captcha.html "CAPTCHA") in a [genius way](http://recaptcha.net/learnmore.html "How Does it Work? - reCAPTCHA"). Instead of randomly generating useless characters which users grow tired of continuosly typing in, risking the possibility that spammers will eventually write sophisticated spam bots which use [OCR](http://en.wikipedia.org/wiki/Optical_character_recognition "Optical Character Recognition - Wikipedia") libraries to read the characters, reCAPTCHA uses a different approach.
 
-While the world is in the process of digitizing books, sometimes certain words cannot be read. reCAPTCHA uses a combination of these words, further distorts them, and then constructs a CAPTCHA image. After a ceratin percentage of users solve the 'uknown' word the same way it is assumed that it is the correct spelling of the word. This helps digitize books, giving users a ***reason*** to solve reCAPTCHA forms. Because the industry level scanners and OCR software which are used to digitize the books can't read the words with which the CAPTCHAs are constructed, it is safe to assume that in-house spam-bot OCR techniques will not be able to bypass the CAPTCHA either.
+The world is in the process of digitizing books by use of automated machines which employ the use of Optical Character Recognition software. Sometimes the certain words cannot be read by the software. reCAPTCHA uses a combination of these words, further distorts them, and then constructs a CAPTCHA image. After a certain percentage of users solve the 'unknown' word the same way, it is assumed that it is the correct spelling of the word. This helps digitize books, giving users a ***reason*** to solve reCAPTCHA forms. Because the industry level scanners and OCR software which are used to digitize the books can't read the words with which the CAPTCHAs are constructed, it is safe to assume that in-house spam-bot OCR techniques will not be able to bypass the resulting CAPTCHA, which is a further distortion of the unreadable word.
 
-reCAPTCHA has earned a very prestigious reputation among the various CAPTCHA systems available and is used by such sites as [Facebook](http://www.facebook.com), [Twitter](http://www.twitter.com), [StumbleUpon](http://www.stumbleupon.com), and a few U.S. Government Websites such as the [TV Converter Box Coupon Program Website](https://www.dtv2009.gov/ "TV Converter Box Coupon Program Website").
+reCAPTCHA is probably the most popular and widely accepted CAPTCHA systems by both end-users and site-owners. It is used by such sites prominent sites as [Facebook](http://www.facebook.com), [Twitter](http://www.twitter.com), to the Average Joe's little blog out there on the corner of the Internet.
+
+It is accessible by everyone. If the user has trouble reading the CAPTCHA challenge, he or she has the option of requesting a new one. If this does not help, there is also an audio challenge which users may use.
 
 This plugin is [WordPress MU](http://mu.wordpress.org/) compatible.
 
-For more information please view the [plugin page](http://www.blaenkdenum.com/wp-recaptcha/ "WP-reCAPTCHA - Blaenk Denum")..
+For more information please view the [plugin page](http://www.blaenkdenum.com/wp-recaptcha/ "WP-reCAPTCHA - Blaenk Denum").
 
 == Installation ==
 
-To install in regular WordPress:
+To install in regular WordPress and [WordPress MultiSite](http://codex.wordpress.org/Create_A_Network):
 
 1. Upload the `wp-recaptcha` folder to the `/wp-content/plugins/` directory
 1. Activate the plugin through the `Plugins` menu in WordPress
 1. Get the reCAPTCHA keys [here](http://recaptcha.net/api/getkey?domain=www.blaenkdenum.com&app=wordpress "reCAPTCHA API keys") and/or the MailHide keys [here](http://mailhide.recaptcha.net/apikey "MailHide keys")
 
-To install in WordPress MU (Optional Activation by Users):
-
-1. Follow the instructions for regular WordPress above
-
 To install in WordPress MU (Forced Activation/Site-Wide):
 
 1. Upload the `wp-recaptcha` folder to the `/wp-content/mu-plugins` directory
@@ -51,6 +49,22 @@ To install in WordPress MU (Forced Activation/Site-Wide):
 
 == ChangeLog ==
 
+= Version 3.1.3 =
+* Added a collision aversion prefix to the Plugin class. bbouton from github alerted me to a collision between WP-reCAPTCHA's plugin class and the JW Player Plugin's Plugin class.
+= Version 3.1.2 =
+* Fixed option migration. The plugin was actually written to be made to import the old options, but the hook that functionality was registered to does not fire when the wordpress interface updates a plugin, only when a plugin is updated manually. Now the plugin will import or register default options as long as the options don't already exist.
+* Fixed a case where recaptcha theme would not change. This happened because of the above problem, creating a situation in which the tab index field could be empty, and being empty this then caused a problem with the recaptcha options when they were output to the page. If you're running version 3.0 of the plugin, go ahead and add a number to the tab index (e.g. 5 for comments, 30 for registration), if not, this plugin should automatically fix it next time you change save the settings.
+* Modified the options page submit buttons to more explicitly show that they are specific to their own respective sections, that is, one button ONLY saves the changes for one reCAPTCHA, and the other ONLY saves the changes for MailHide.
+= Version 3.0 =
+* Rewrote the entire plugin in an object-oriented manner with separation of concerns in mind to increase maintainability and extensibility
+* Implemented the ability to import the options from the option set of older versions of the plugin, such as 2.9.8.2 and less
+* Redesigned the options page for the plugin, now using newer wordpress options/form functionality with support for input-validation
+* Options for recaptcha and mailhide are independent of each other
+* Added support for localization, using gettext
+* Fixed the issue where comments would not be saved if the reCAPTCHA was entered incorrectly (or not entered at all). requires javascript
+* Fixed an issue where saved comments (from bad reCAPTCHA response) would replace double quotes with backslashes
+* Fixed an issue in wordpress 3 and above in which mailhide would not work due to interference with a new filter, make_clickable, which auto-links emails and URLs
+* Fixed a role-check issue in wordpress 3 and above. level_10 (and all levels for that matter) have been deprecated. now using activate_plugins instead.
 = Version 2.9.8.2 =
 * Fixed a bug with WordPress 3.0 Multi-Site
 = Version 2.9.8 =
@@ -85,7 +99,7 @@ To install in WordPress MU (Forced Activation/Site-Wide):
 * Administration interface is now integrated with 2.5's look and feel. Thanks to [Jeremy Clarke](http://simianuprising.com/ "Jeremy Clarke").
 * Users can now have more control over who sees the reCAPTCHA form and who can see emails in their true form (If MailHide is enabled). Thanks to [Jeremy Clarke](http://simianuprising.com/ "Jeremy Clarke").
 * Fixed a very stupid (**One character deal**) fatal error on most Windows Servers which don't support short tags (short_open_tag). I'm speaking of the so called 'Unexpected $end' error.
-* Accomodated for the fact that in +2.6 the wp-content folder can be anywhere.
+* Accommodated for the fact that in +2.6 the wp-content folder can be anywhere.
 
 == Frequently Asked Questions ==
 
@@ -95,10 +109,10 @@ There are four common issues that make reCAPTCHA appear to be broken:
 1. **Moderation Emails**: reCAPTCHA marks comments as spam, so even though the comments don't actually get posted, you will be notified of what is supposedly new spam. It is recommended to turn off moderation emails with reCAPTCHA.
 1. **Akismet Spam Queue**: Again, because reCAPTCHA marks comments with a wrongly entered CAPTCHA as spam, they are added to the spam queue. These comments however weren't posted to the blog so reCAPTCHA is still doing it's job. It is recommended to either ignore the Spam Queue and clear it regularly or disable Akismet completely. reCAPTCHA takes care of all of the spam created by bots, which is the usual type of spam. The only other type of spam that would get through is human spam, where humans are hired to manually solve CAPTCHAs. If you still get spam while only having reCAPTCHA enabled, you could be a victim of the latter practice. If this is the case, then turning on Akismet will most likely solve your problem. Again, just because it shows up in the Spam Queue does NOT mean that spam is being posted to your blog, it's more of a 'comments that have been caught as spam by reCAPTCHA' queue.
 1. **Trackbacks and Pingbacks**: reCAPTCHA can't do anything about pingbacks and trackbacks. You can disable pingbacks and trackbacks in Options > Discussion > Allow notifications from other Weblogs (Pingbacks and trackbacks).
-1. **Human Spammers**: Believe it or not, there are people who are paid (or maybe slave labor?) to solve CAPTCHAs all over the internet and spam. This is the last and rarest reason for which it might appear that reCAPTCHA is not working, but it does happen. On this plugin's [home page](http://www.blaenkdenum.com/wp-recaptcha/ Blaenk Denum - WP-reCAPTCHA), these people sometimes attempt to post spam to try and make it seem as if reCAPTCHA is not working. A combination of reCAPTCHA and Akismet might help to solve this problem, and if spam still gets through for this reason, it would be very minimal and easy to manually take care of.
+1. **Human Spammers**: Believe it or not, there are people who are paid (or maybe slave labor?) to solve CAPTCHAs all over the internet and spam. This is the last and rarest reason for which it might appear that reCAPTCHA is not working, but it does happen. On this plugin's [page](http://www.blaenkdenum.com/wp-recaptcha/ "WP-reCAPTCHA - Blaenk Denum"), these people sometimes attempt to post spam to try and make it seem as if reCAPTCHA is not working. A combination of reCAPTCHA and Akismet might help to solve this problem, and if spam still gets through for this reason, it would be very minimal and easy to manually take care of.
 
-= Why am I getting �Warning: pack() [function.pack]: Type H: illegal hex digit�? =
-You have the keys in the wrong place. Remember, the reCAPTCHA keys are different from the MailHide keys. And the Public keys are different from the Private keys as well. You can�t mix them around. Go through your keys and make sure you have them each in the correct box.
+= Why am I getting Warning: pack() [function.pack]: Type H: illegal hex digit?
+You have the keys in the wrong place. Remember, the reCAPTCHA keys are different from the MailHide keys. And the Public keys are different from the Private keys as well. You can't mix them around. Go through your keys and make sure you have them each in the correct box.
 
 = Aren't you increasing the time users spend solving CAPTCHAs by requiring them to type two words instead of one? =
 Actually, no. Most CAPTCHAs on the Web ask users to enter strings of random characters, which are slower to type than English words. reCAPTCHA requires no more time to solve than most other CAPTCHAs.
diff --git a/wp-content/plugins/wp-recaptcha/recaptcha.php b/wp-content/plugins/wp-recaptcha/recaptcha.php
new file mode 100644
index 0000000000000000000000000000000000000000..c89fb602bc896ced5dda8a70a0638e35162d22e4
--- /dev/null
+++ b/wp-content/plugins/wp-recaptcha/recaptcha.php
@@ -0,0 +1,594 @@
+<?php
+
+require_once('wp-plugin.php');
+
+if (!class_exists('reCAPTCHA')) {
+    class reCAPTCHA extends WPPlugin {
+        // member variables
+        private $saved_error;
+        
+        // php 4 constructor
+        function reCAPTCHA($options_name) {
+            $args = func_get_args();
+            call_user_func_array(array(&$this, "__construct"), $args);
+        }
+        
+        // php 5 constructor
+        function __construct($options_name) {
+            parent::__construct($options_name);
+            
+            $this->register_default_options();
+            
+            // require the recaptcha library
+            $this->require_library();
+            
+            // register the hooks
+            $this->register_actions();
+            $this->register_filters();
+        }
+        
+        function register_actions() {
+            // load the plugin's textdomain for localization
+            add_action('init', array(&$this, 'load_textdomain'));
+
+            // styling
+            add_action('wp_head', array(&$this, 'register_stylesheets')); // make unnecessary: instead, inform of classes for styling
+            add_action('admin_head', array(&$this, 'register_stylesheets')); // make unnecessary: shouldn't require styling in the options page
+            
+            if ($this->options['show_in_registration'])
+                add_action('login_head', array(&$this, 'registration_style')); // make unnecessary: instead use jQuery and add to the footer?
+
+            // options
+            register_activation_hook(WPPlugin::path_to_plugin_directory() . '/wp-recaptcha.php', array(&$this, 'register_default_options')); // this way it only happens once, when the plugin is activated
+            add_action('admin_init', array(&$this, 'register_settings_group'));
+
+            // only register the hooks if the user wants recaptcha on the registration page
+            if ($this->options['show_in_registration']) {
+                // recaptcha form display
+                if ($this->is_multi_blog())
+                    add_action('signup_extra_fields', array(&$this, 'show_recaptcha_in_registration'));
+                else
+                    add_action('register_form', array(&$this, 'show_recaptcha_in_registration'));
+            }
+
+            // only register the hooks if the user wants recaptcha on the comments page
+            if ($this->options['show_in_comments']) {
+                add_action('comment_form', array(&$this, 'show_recaptcha_in_comments'));
+                add_action('wp_footer', array(&$this, 'save_comment_script')); // preserve the comment that was entered
+
+                // recaptcha comment processing (look into doing all of this with AJAX, optionally)
+                add_action('wp_head', array(&$this, 'saved_comment'), 0);
+                add_action('preprocess_comment', array(&$this, 'check_comment'), 0);
+                add_action('comment_post_redirect', array(&$this, 'relative_redirect'), 0, 2);
+            }
+
+            // administration (menus, pages, notifications, etc.)
+            add_filter("plugin_action_links", array(&$this, 'show_settings_link'), 10, 2);
+
+            add_action('admin_menu', array(&$this, 'add_settings_page'));
+            
+            // admin notices
+            add_action('admin_notices', array(&$this, 'missing_keys_notice'));
+        }
+        
+        function register_filters() {
+            // only register the hooks if the user wants recaptcha on the registration page
+            if ($this->options['show_in_registration']) {
+                // recaptcha validation
+                if ($this->is_multi_blog())
+                    add_filter('wpmu_validate_user_signup', array(&$this, 'validate_recaptcha_response_wpmu'));
+                else
+                    add_filter('registration_errors', array(&$this, 'validate_recaptcha_response'));
+            }
+        }
+        
+        function load_textdomain() {
+            load_plugin_textdomain('recaptcha', false, 'languages');
+        }
+        
+        // set the default options
+        function register_default_options() {
+            if ($this->options)
+               return;
+           
+            $option_defaults = array();
+           
+            $old_options = WPPlugin::retrieve_options("recaptcha");
+           
+            if ($old_options) {
+               $option_defaults['public_key'] = $old_options['pubkey']; // the public key for reCAPTCHA
+               $option_defaults['private_key'] = $old_options['privkey']; // the private key for reCAPTCHA
+
+               // placement
+               $option_defaults['show_in_comments'] = $old_options['re_comments']; // whether or not to show reCAPTCHA on the comment post
+               $option_defaults['show_in_registration'] = $old_options['re_registration']; // whether or not to show reCAPTCHA on the registration page
+
+               // bypass levels
+               $option_defaults['bypass_for_registered_users'] = ($old_options['re_bypass'] == "on") ? 1 : 0; // whether to skip reCAPTCHAs for registered users
+               $option_defaults['minimum_bypass_level'] = $old_options['re_bypasslevel']; // who doesn't have to do the reCAPTCHA (should be a valid WordPress capability slug)
+
+               if ($option_defaults['minimum_bypass_level'] == "level_10") {
+                  $option_defaults['minimum_bypass_level'] = "activate_plugins";
+               }
+
+               // styling
+               $option_defaults['comments_theme'] = $old_options['re_theme']; // the default theme for reCAPTCHA on the comment post
+               $option_defaults['registration_theme'] = $old_options['re_theme_reg']; // the default theme for reCAPTCHA on the registration form
+               $option_defaults['recaptcha_language'] = $old_options['re_lang']; // the default language for reCAPTCHA
+               $option_defaults['xhtml_compliance'] = $old_options['re_xhtml']; // whether or not to be XHTML 1.0 Strict compliant
+               $option_defaults['comments_tab_index'] = $old_options['re_tabindex']; // the default tabindex for reCAPTCHA
+               $option_defaults['registration_tab_index'] = 30; // the default tabindex for reCAPTCHA
+
+               // error handling
+               $option_defaults['no_response_error'] = $old_options['error_blank']; // message for no CAPTCHA response
+               $option_defaults['incorrect_response_error'] = $old_options['error_incorrect']; // message for incorrect CAPTCHA response
+            }
+           
+            else {
+               // keys
+               $option_defaults['public_key'] = ''; // the public key for reCAPTCHA
+               $option_defaults['private_key'] = ''; // the private key for reCAPTCHA
+
+               // placement
+               $option_defaults['show_in_comments'] = 1; // whether or not to show reCAPTCHA on the comment post
+               $option_defaults['show_in_registration'] = 1; // whether or not to show reCAPTCHA on the registration page
+
+               // bypass levels
+               $option_defaults['bypass_for_registered_users'] = 1; // whether to skip reCAPTCHAs for registered users
+               $option_defaults['minimum_bypass_level'] = 'read'; // who doesn't have to do the reCAPTCHA (should be a valid WordPress capability slug)
+
+               // styling
+               $option_defaults['comments_theme'] = 'red'; // the default theme for reCAPTCHA on the comment post
+               $option_defaults['registration_theme'] = 'red'; // the default theme for reCAPTCHA on the registration form
+               $option_defaults['recaptcha_language'] = 'en'; // the default language for reCAPTCHA
+               $option_defaults['xhtml_compliance'] = 0; // whether or not to be XHTML 1.0 Strict compliant
+               $option_defaults['comments_tab_index'] = 5; // the default tabindex for reCAPTCHA
+               $option_defaults['registration_tab_index'] = 30; // the default tabindex for reCAPTCHA
+
+               // error handling
+               $option_defaults['no_response_error'] = '<strong>ERROR</strong>: Please fill in the reCAPTCHA form.'; // message for no CAPTCHA response
+               $option_defaults['incorrect_response_error'] = '<strong>ERROR</strong>: That reCAPTCHA response was incorrect.'; // message for incorrect CAPTCHA response
+            }
+            
+            // add the option based on what environment we're in
+            WPPlugin::add_options($this->options_name, $option_defaults);
+        }
+        
+        // require the recaptcha library
+        function require_library() {
+            require_once($this->path_to_plugin_directory() . '/recaptchalib.php');
+        }
+        
+        // register the settings
+        function register_settings_group() {
+            register_setting("recaptcha_options_group", 'recaptcha_options', array(&$this, 'validate_options'));
+        }
+        
+        // todo: make unnecessary
+        function register_stylesheets() {
+            $path = WPPlugin::url_to_plugin_directory() . '/recaptcha.css';
+                
+            echo '<link rel="stylesheet" type="text/css" href="' . $path . '" />';
+        }
+        
+        // stylesheet information
+        // todo: this 'hack' isn't nice, try to figure out a workaround
+        function registration_style() {
+            $width = 0; // the width of the recaptcha form
+
+            // every theme is 358 pixels wide except for the clean theme, so we have to programmatically handle that
+            if ($this->options['registration_theme'] == 'clean')
+                $width = 485;
+            else
+                $width = 360;
+
+            echo <<<REGISTRATION
+                <script type="text/javascript">
+                window.onload = function() {
+                    document.getElementById('login').style.width = '{$width}px';
+                    document.getElementById('reg_passmail').style.marginTop = '10px';
+                    document.getElementById('recaptcha_widget_div').style.marginBottom = '10px';
+                };
+                </script>
+REGISTRATION;
+        }
+        
+        function recaptcha_enabled() {
+            return ($this->options['show_in_comments'] || $this->options['show_in_registration']);
+        }
+        
+        function keys_missing() {
+            return (empty($this->options['public_key']) || empty($this->options['private_key']));
+        }
+        
+        function create_error_notice($message, $anchor = '') {
+            $options_url = admin_url('options-general.php?page=wp-recaptcha/recaptcha.php') . $anchor;
+            $error_message = sprintf(__($message . ' <a href="%s" title="WP-reCAPTCHA Options">Fix this</a>', 'recaptcha'), $options_url);
+            
+            echo '<div class="error"><p><strong>' . $error_message . '</strong></p></div>';
+        }
+        
+        function missing_keys_notice() {
+            if ($this->recaptcha_enabled() && $this->keys_missing()) {
+                $this->create_error_notice('You enabled reCAPTCHA, but some of the reCAPTCHA API Keys seem to be missing.');
+            }
+        }
+        
+        function validate_dropdown($array, $key, $value) {
+            // make sure that the capability that was supplied is a valid capability from the drop-down list
+            if (in_array($value, $array))
+                return $value;
+            else // if not, load the old value
+                return $this->options[$key];
+        }
+        
+        function validate_options($input) {
+            // todo: make sure that 'incorrect_response_error' is not empty, prevent from being empty in the validation phase
+            
+            // trim the spaces out of the key, as they are usually present when copied and pasted
+            // todo: keys seem to usually be 40 characters in length, verify and if confirmed, add to validation process
+            $validated['public_key'] = trim($input['public_key']);
+            $validated['private_key'] = trim($input['private_key']);
+            
+            $validated['show_in_comments'] = ($input['show_in_comments'] == 1 ? 1 : 0);
+            $validated['bypass_for_registered_users'] = ($input['bypass_for_registered_users'] == 1 ? 1: 0);
+            
+            $capabilities = array ('read', 'edit_posts', 'publish_posts', 'moderate_comments', 'activate_plugins');
+            $themes = array ('red', 'white', 'blackglass', 'clean');
+            
+            $recaptcha_languages = array ('en', 'nl', 'fr', 'de', 'pt', 'ru', 'es', 'tr');
+            
+            $validated['minimum_bypass_level'] = $this->validate_dropdown($capabilities, 'minimum_bypass_level', $input['minimum_bypass_level']);
+            $validated['comments_theme'] = $this->validate_dropdown($themes, 'comments_theme', $input['comments_theme']);
+            
+            $validated['comments_tab_index'] = $input['comments_tab_index'] ? $input["comments_tab_index"] : 5; // use the intval filter
+            
+            $validated['show_in_registration'] = ($input['show_in_registration'] == 1 ? 1 : 0);
+            $validated['registration_theme'] = $this->validate_dropdown($themes, 'registration_theme', $input['registration_theme']);
+            $validated['registration_tab_index'] = $input['registration_tab_index'] ? $input["registration_tab_index"] : 30; // use the intval filter
+            
+            $validated['recaptcha_language'] = $this->validate_dropdown($recaptcha_languages, 'recaptcha_language', $input['recaptcha_language']);
+            $validated['xhtml_compliance'] = ($input['xhtml_compliance'] == 1 ? 1 : 0);
+            
+            $validated['no_response_error'] = $input['no_response_error'];
+            $validated['incorrect_response_error'] = $input['incorrect_response_error'];
+            
+            return $validated;
+        }
+        
+        // display recaptcha
+        function show_recaptcha_in_registration($errors) {
+            $format = <<<FORMAT
+            <script type='text/javascript'>
+            var RecaptchaOptions = { theme : '{$this->options['registration_theme']}', lang : '{$this->options['recaptcha_language']}' , tabindex : {$this->options['registration_tab_index']} };
+            </script>
+FORMAT;
+
+            $comment_string = <<<COMMENT_FORM
+            <script type='text/javascript'>   
+            document.getElementById('recaptcha_table').style.direction = 'ltr';
+            </script>
+COMMENT_FORM;
+
+            // todo: is this check necessary? look at the latest recaptchalib.php
+            if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on")
+                $use_ssl = true;
+            else
+                $use_ssl = false;
+
+            // if it's for wordpress mu, show the errors
+            if ($this->is_multi_blog()) {
+                $error = $errors->get_error_message('captcha');
+                echo '<label for="verification">Verification:</label>';
+                echo ($error ? '<p class="error">'.$error.'</p>' : '');
+                echo $format . $this->get_recaptcha_html($_GET['rerror'], $use_ssl);
+            }
+            
+            // for regular wordpress
+            else {
+                echo $format . $this->get_recaptcha_html($_GET['rerror'], $use_ssl);
+            }
+        }
+        
+        function validate_recaptcha_response($errors) {
+            // empty so throw the empty response error
+            if (empty($_POST['recaptcha_response_field']) || $_POST['recaptcha_response_field'] == '') {
+                $errors->add('blank_captcha', $this->options['no_response_error']);
+                return $errors;
+            }
+
+            $response = recaptcha_check_answer($this->options['private_key'], $_SERVER['REMOTE_ADDR'], $_POST['recaptcha_challenge_field'], $_POST['recaptcha_response_field']);
+
+            // response is bad, add incorrect response error
+            if (!$response->is_valid)
+                if ($response->error == 'incorrect-captcha-sol')
+                    $errors->add('captcha_wrong', $this->options['incorrect_response_error']);
+
+           return $errors;
+        }
+        
+        function validate_recaptcha_response_wpmu($result) {
+            // must make a check here, otherwise the wp-admin/user-new.php script will keep trying to call
+            // this function despite not having called do_action('signup_extra_fields'), so the recaptcha
+            // field was never shown. this way it won't validate if it's called in the admin interface
+            
+            if (!$this->is_authority()) {
+                // blogname in 2.6, blog_id prior to that
+                // todo: why is this done?
+                if (isset($_POST['blog_id']) || isset($_POST['blogname']))
+                    return $result;
+                    
+                // no text entered
+                if (empty($_POST['recaptcha_response_field']) || $_POST['recaptcha_response_field'] == '') {
+                    $result['errors']->add('blank_captcha', $this->options['no_response_error']);
+                    return $result;
+                }
+                
+                $response = recaptcha_check_answer($this->options['private_key'], $_SERVER['REMOTEADDR'], $_POST['recaptcha_challenge_field'], $_POST['recaptcha_response_field']);
+                
+                // response is bad, add incorrect response error
+                // todo: why echo the error here? wpmu specific?
+                if (!$response->is_valid)
+                    if ($response->error == 'incorrect-captcha-sol') {
+                        $result['errors']->add('captcha_wrong', $this->options['incorrect_response_error']);
+                        echo '<div class="error">' . $this->options['incorrect_response_error'] . '</div>';
+                    }
+                    
+                return $result;
+            }
+        }
+        
+        // utility methods
+        function hash_comment($id) {
+            define ("RECAPTCHA_WP_HASH_SALT", "b7e0638d85f5d7f3694f68e944136d62");
+            
+            if (function_exists('wp_hash'))
+                return wp_hash(RECAPTCHA_WP_HASH_SALT . $id);
+            else
+                return md5(RECAPTCHA_WP_HASH_SALT . $this->options['private_key'] . $id);
+        }
+        
+        function get_recaptcha_html($recaptcha_error, $use_ssl=false) {
+            return recaptcha_get_html($this->options['public_key'], $recaptcha_error, $use_ssl, $this->options['xhtml_compliance']);
+        }
+        
+        function show_recaptcha_in_comments() {
+            global $user_ID;
+
+            // set the minimum capability needed to skip the captcha if there is one
+            if (isset($this->options['bypass_for_registered_users']) && $this->options['bypass_for_registered_users'] && $this->options['minimum_bypass_level'])
+                $needed_capability = $this->options['minimum_bypass_level'];
+
+            // skip the reCAPTCHA display if the minimum capability is met
+            if ((isset($needed_capability) && $needed_capability && current_user_can($needed_capability)) || !$this->options['show_in_comments'])
+                return;
+
+            else {
+                // Did the user fail to match the CAPTCHA? If so, let them know
+                if ((isset($_GET['rerror']) && $_GET['rerror'] == 'incorrect-captcha-sol'))
+                    echo '<p class="recaptcha-error">' . $this->options['incorrect_response_error'] . "</p>";
+
+                //modify the comment form for the reCAPTCHA widget
+                $recaptcha_js_opts = <<<OPTS
+                <script type='text/javascript'>
+                    var RecaptchaOptions = { theme : '{$this->options['comments_theme']}', lang : '{$this->options['recaptcha_language']}' , tabindex : {$this->options['comments_tab_index']} };
+                </script>
+OPTS;
+
+                // todo: replace this with jquery: http://digwp.com/2009/06/including-jquery-in-wordpress-the-right-way/
+                // todo: use math to increment+1 the submit button based on what the tab_index option is
+                if ($this->options['xhtml_compliance']) {
+                    $comment_string = <<<COMMENT_FORM
+                        <div id="recaptcha-submit-btn-area">&nbsp;</div>
+COMMENT_FORM;
+                }
+
+                else {
+                    $comment_string = <<<COMMENT_FORM
+                        <div id="recaptcha-submit-btn-area">&nbsp;</div>
+                        <noscript>
+                         <style type='text/css'>#submit {display:none;}</style>
+                         <input name="submit" type="submit" id="submit-alt" tabindex="6" value="Submit Comment"/> 
+                        </noscript>
+COMMENT_FORM;
+                }
+
+                $use_ssl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on");
+
+                echo $recaptcha_js_opts . $this->get_recaptcha_html(isset($_GET['rerror']) ? $_GET['rerror'] : null, $use_ssl) . $comment_string;
+           }
+        }
+        
+        // this is what does the submit-button re-ordering
+        function save_comment_script() {
+            $javascript = <<<JS
+                <script type="text/javascript">
+                var sub = document.getElementById('submit');
+                document.getElementById('recaptcha-submit-btn-area').appendChild (sub);
+                document.getElementById('submit').tabIndex = 6;
+                if ( typeof _recaptcha_wordpress_savedcomment != 'undefined') {
+                        document.getElementById('comment').value = _recaptcha_wordpress_savedcomment;
+                }
+                document.getElementById('recaptcha_table').style.direction = 'ltr';
+                </script>
+JS;
+            echo $javascript;
+        }
+        
+        // todo: this doesn't seem necessary
+        function show_captcha_for_comment() {
+            global $user_ID;
+            return true;
+        }
+        
+        function check_comment($comment_data) {
+            global $user_ID;
+            
+            if ($this->options['bypass_for_registered_users'] && $this->options['minimum_bypass_level'])
+                $needed_capability = $this->options['minimum_bypass_level'];
+            
+            if (($needed_capability && current_user_can($needed_capability)) || !$this->options['show_in_comments'])
+                return $comment_data;
+            
+            if ($this->show_captcha_for_comment()) {
+                // do not check trackbacks/pingbacks
+                if ($comment_data['comment_type'] == '') {
+                    $challenge = $_POST['recaptcha_challenge_field'];
+                    $response = $_POST['recaptcha_response_field'];
+                    
+                    $recaptcha_response = recaptcha_check_answer($this->options['private_key'], $_SERVER['REMOTE_ADDR'], $challenge, $response);
+                    
+                    if ($recaptcha_response->is_valid)
+                        return $comment_data;
+                        
+                    else {
+                        $this->saved_error = $recaptcha_response->error;
+                        
+                        // http://codex.wordpress.org/Plugin_API/Filter_Reference#Database_Writes_2
+                        add_filter('pre_comment_approved', create_function('$a', 'return \'spam\';'));
+                        return $comment_data;
+                    }
+                }
+            }
+            
+            return $comment_data;
+        }
+        
+        function relative_redirect($location, $comment) {
+            if ($this->saved_error != '') {
+                // replace #comment- at the end of $location with #commentform
+                
+                $location = substr($location, 0, strpos($location, '#')) .
+                    ((strpos($location, "?") === false) ? "?" : "&") .
+                    'rcommentid=' . $comment->comment_ID .
+                    '&rerror=' . $this->saved_error .
+                    '&rchash=' . $this->hash_comment($comment->comment_ID) .
+                    '#commentform';
+            }
+            
+            return $location;
+        }
+        
+        function saved_comment() {
+            if (!is_single() && !is_page())
+                return;
+            
+            $comment_id = $_REQUEST['rcommentid'];
+            $comment_hash = $_REQUEST['rchash'];
+            
+            if (empty($comment_id) || empty($comment_hash))
+               return;
+            
+            if ($comment_hash == $this->hash_comment($comment_id)) {
+               $comment = get_comment($comment_id);
+
+               // todo: removed double quote from list of 'dangerous characters'
+               $com = preg_replace('/([\\/\(\)\+\;\'])/e','\'%\'.dechex(ord(\'$1\'))', $comment->comment_content);
+                
+               $com = preg_replace('/\\r\\n/m', '\\\n', $com);
+                
+               echo "
+                <script type='text/javascript'>
+                var _recaptcha_wordpress_savedcomment =  '" . $com  ."';
+                _recaptcha_wordpress_savedcomment = unescape(_recaptcha_wordpress_savedcomment);
+                </script>
+                ";
+
+                wp_delete_comment($comment->comment_ID);
+            }
+        }
+        
+        // todo: is this still needed?
+        // this is used for the api keys url in the administration interface
+        function blog_domain() {
+            $uri = parse_url(get_option('siteurl'));
+            return $uri['host'];
+        }
+        
+        // add a settings link to the plugin in the plugin list
+        function show_settings_link($links, $file) {
+            if ($file == plugin_basename($this->path_to_plugin_directory() . '/wp-recaptcha.php')) {
+               $settings_title = __('Settings for this Plugin', 'recaptcha');
+               $settings = __('Settings', 'recaptcha');
+               $settings_link = '<a href="options-general.php?page=wp-recaptcha/recaptcha.php" title="' . $settings_title . '">' . $settings . '</a>';
+               array_unshift($links, $settings_link);
+            }
+            
+            return $links;
+        }
+        
+        // add the settings page
+        function add_settings_page() {
+            // add the options page
+            if ($this->environment == Environment::WordPressMU && $this->is_authority())
+                add_submenu_page('wpmu-admin.php', 'WP-reCAPTCHA', 'WP-reCAPTCHA', 'manage_options', __FILE__, array(&$this, 'show_settings_page'));
+
+            if ($this->environment == Environment::WordPressMS && $this->is_authority())
+                add_submenu_page('ms-admin.php', 'WP-reCAPTCHA', 'WP-reCAPTCHA', 'manage_options', __FILE__, array(&$this, 'show_settings_page'));
+            
+            add_options_page('WP-reCAPTCHA', 'WP-reCAPTCHA', 'manage_options', __FILE__, array(&$this, 'show_settings_page'));
+        }
+        
+        // store the xhtml in a separate file and use include on it
+        function show_settings_page() {
+            include("settings.php");
+        }
+        
+        function build_dropdown($name, $keyvalue, $checked_value) {
+            echo '<select name="' . $name . '" id="' . $name . '">' . "\n";
+            
+            foreach ($keyvalue as $key => $value) {
+                $checked = ($value == $checked_value) ? ' selected="selected" ' : '';
+                
+                echo '\t <option value="' . $value . '"' . $checked . ">$key</option> \n";
+                $checked = NULL;
+            }
+            
+            echo "</select> \n";
+        }
+        
+        function capabilities_dropdown() {
+            // define choices: Display text => permission slug
+            $capabilities = array (
+                __('all registered users', 'recaptcha') => 'read',
+                __('edit posts', 'recaptcha') => 'edit_posts',
+                __('publish posts', 'recaptcha') => 'publish_posts',
+                __('moderate comments', 'recaptcha') => 'moderate_comments',
+                __('activate plugins', 'recaptcha') => 'activate_plugins'
+            );
+            
+            $this->build_dropdown('recaptcha_options[minimum_bypass_level]', $capabilities, $this->options['minimum_bypass_level']);
+        }
+        
+        function theme_dropdown($which) {
+            $themes = array (
+                __('Red', 'recaptcha') => 'red',
+                __('White', 'recaptcha') => 'white',
+                __('Black Glass', 'recaptcha') => 'blackglass',
+                __('Clean', 'recaptcha') => 'clean'
+            );
+            
+            if ($which == 'comments')
+                $this->build_dropdown('recaptcha_options[comments_theme]', $themes, $this->options['comments_theme']);
+            else if ($which == 'registration')
+                $this->build_dropdown('recaptcha_options[registration_theme]', $themes, $this->options['registration_theme']);
+        }
+        
+        function recaptcha_language_dropdown() {
+            $languages = array (
+                __('English', 'recaptcha') => 'en',
+                __('Dutch', 'recaptcha') => 'nl',
+                __('French', 'recaptcha') => 'fr',
+                __('German', 'recaptcha') => 'de',
+                __('Portuguese', 'recaptcha') => 'pt',
+                __('Russian', 'recaptcha') => 'ru',
+                __('Spanish', 'recaptcha') => 'es',
+                __('Turkish', 'recaptcha') => 'tr'
+            );
+            
+            $this->build_dropdown('recaptcha_options[recaptcha_language]', $languages, $this->options['recaptcha_language']);
+        }
+    } // end class declaration
+} // end of class exists clause
+
+?>
diff --git a/wp-content/plugins/wp-recaptcha/recaptchalib.php b/wp-content/plugins/wp-recaptcha/recaptchalib.php
index cb3d9b1264567e324c188f7ee567a569c411cbf9..32c4f4d75826d3be5409cbbc626083fe826cf3d5 100644
--- a/wp-content/plugins/wp-recaptcha/recaptchalib.php
+++ b/wp-content/plugins/wp-recaptcha/recaptchalib.php
@@ -4,7 +4,7 @@
  *    - Documentation and latest version
  *          http://recaptcha.net/plugins/php/
  *    - Get a reCAPTCHA API Key
- *          http://recaptcha.net/api/getkey
+ *          https://www.google.com/recaptcha/admin/create
  *    - Discussion group
  *          http://groups.google.com/group/recaptcha
  *
@@ -35,25 +35,27 @@
 /**
  * The reCAPTCHA server URL's
  */
-define("RECAPTCHA_API_SERVER", "http://api.recaptcha.net");
-define("RECAPTCHA_API_SECURE_SERVER", "https://api-secure.recaptcha.net");
-define("RECAPTCHA_VERIFY_SERVER", "api-verify.recaptcha.net");
+define("RECAPTCHA_API_SERVER", "http://www.google.com/recaptcha/api");
+define("RECAPTCHA_API_SECURE_SERVER", "https://www.google.com/recaptcha/api");
+define("RECAPTCHA_VERIFY_SERVER", "www.google.com");
 
 /**
  * Encodes the given data into a query string format
  * @param $data - array of string elements to be encoded
  * @return string - encoded request
  */
-function _recaptcha_qsencode($data) {
-  $req = "";
-  foreach ($data as $key => $value)
-    $req .= $key . '=' . urlencode(stripslashes($value)) . '&';
-
-  // Cut the last '&'
-  $req=substr($req,0,strlen($req)-1);
-  return $req;
+function _recaptcha_qsencode ($data) {
+        $req = "";
+        foreach ( $data as $key => $value )
+                $req .= $key . '=' . urlencode( stripslashes($value) ) . '&';
+
+        // Cut the last '&'
+        $req=substr($req,0,strlen($req)-1);
+        return $req;
 }
 
+
+
 /**
  * Submits an HTTP POST to a reCAPTCHA server
  * @param string $host
@@ -63,30 +65,30 @@ function _recaptcha_qsencode($data) {
  * @return array response
  */
 function _recaptcha_http_post($host, $path, $data, $port = 80) {
-  $req = _recaptcha_qsencode ($data);
-
-  $http_request  = "POST $path HTTP/1.0\r\n";
-  $http_request .= "Host: $host\r\n";
-  $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
-  $http_request .= "Content-Length: " . strlen($req) . "\r\n";
-  $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
-  $http_request .= "\r\n";
-  $http_request .= $req;
-
-  $response = '';
-  if(false == ($fs = @fsockopen($host, $port, $errno, $errstr, 10))) {
-     die('Could not open socket');
-  }
-
-  fwrite($fs, $http_request);
-
-  while (!feof($fs))
-     $response .= fgets($fs, 1160); // One TCP-IP packet
-     
-  fclose($fs);
-  $response = explode("\r\n\r\n", $response, 2);
-
-  return $response;
+
+        $req = _recaptcha_qsencode ($data);
+
+        $http_request  = "POST $path HTTP/1.0\r\n";
+        $http_request .= "Host: $host\r\n";
+        $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
+        $http_request .= "Content-Length: " . strlen($req) . "\r\n";
+        $http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
+        $http_request .= "\r\n";
+        $http_request .= $req;
+
+        $response = '';
+        if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) {
+                die ('Could not open socket');
+        }
+
+        fwrite($fs, $http_request);
+
+        while ( !feof($fs) )
+                $response .= fgets($fs, 1160); // One TCP-IP packet
+        fclose($fs);
+        $response = explode("\r\n\r\n", $response, 2);
+
+        return $response;
 }
 
 
@@ -101,54 +103,43 @@ function _recaptcha_http_post($host, $path, $data, $port = 80) {
 
  * @return string - The HTML to be embedded in the user's form.
  */
-function recaptcha_get_html($pubkey, $error = null, $use_ssl = false, $xhtml_compliant = false)
+function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false)
 {
 	if ($pubkey == null || $pubkey == '') {
-		die ("To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");
+		die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
 	}
 	
 	if ($use_ssl) {
-      $server = RECAPTCHA_API_SECURE_SERVER;
-   } else {
-      $server = RECAPTCHA_API_SERVER;
-   }
-
-  $errorpart = "";
-  if ($error) {
-     $errorpart = "&amp;error=" . $error;
-  }
-  
-  if ($xhtml_compliant) {
-     return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>
-
-<noscript>
-<div>
-<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
-<input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
-</div>
-</noscript>';
-  }
-  
-  else {
-     return  '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>
-
-<noscript>
-<iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br/>
-<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
-<input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
-</noscript>';
-  }
-  return $output;
+                $server = RECAPTCHA_API_SECURE_SERVER;
+        } else {
+                $server = RECAPTCHA_API_SERVER;
+        }
+
+        $errorpart = "";
+        if ($error) {
+           $errorpart = "&amp;error=" . $error;
+        }
+        return '<script type="text/javascript" src="'. $server . '/challenge?k=' . $pubkey . $errorpart . '"></script>
+
+	<noscript>
+  		<iframe src="'. $server . '/noscript?k=' . $pubkey . $errorpart . '" height="300" width="500" frameborder="0"></iframe><br/>
+  		<textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
+  		<input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
+	</noscript>';
 }
 
+
+
+
 /**
  * A ReCaptchaResponse is returned from recaptcha_check_answer()
  */
 class ReCaptchaResponse {
-   var $is_valid;
-   var $error;
+        var $is_valid;
+        var $error;
 }
 
+
 /**
   * Calls an HTTP POST function to verify if the user's guess was correct
   * @param string $privkey
@@ -158,44 +149,47 @@ class ReCaptchaResponse {
   * @param array $extra_params an array of extra variables to post to the server
   * @return ReCaptchaResponse
   */
-function recaptcha_check_answer($privkey, $remoteip, $challenge, $response, $extra_params = array())
+function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array())
 {
 	if ($privkey == null || $privkey == '') {
-		die ("To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");
+		die ("To use reCAPTCHA you must get an API key from <a href='https://www.google.com/recaptcha/admin/create'>https://www.google.com/recaptcha/admin/create</a>");
 	}
 
 	if ($remoteip == null || $remoteip == '') {
 		die ("For security reasons, you must pass the remote ip to reCAPTCHA");
 	}
-  
-   //discard spam submissions
-   if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) {
-          $recaptcha_response = new ReCaptchaResponse();
-          $recaptcha_response->is_valid = false;
-          $recaptcha_response->error = 'incorrect-captcha-sol';
-          return $recaptcha_response;
-   }
-   
-   $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/verify",
-      array (
-             'privatekey' => $privkey,
-             'remoteip' => $remoteip,
-             'challenge' => $challenge,
-             'response' => $response
-             ) + $extra_params
-      );
-
-   $answers = explode ("\n", $response [1]);
-   $recaptcha_response = new ReCaptchaResponse();
-
-   if (trim ($answers [0]) == 'true') {
-      $recaptcha_response->is_valid = true;
-   }
-   else {
-      $recaptcha_response->is_valid = false;
-      $recaptcha_response->error = $answers [1];
-   }
-   return $recaptcha_response;
+
+	
+	
+        //discard spam submissions
+        if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) {
+                $recaptcha_response = new ReCaptchaResponse();
+                $recaptcha_response->is_valid = false;
+                $recaptcha_response->error = 'incorrect-captcha-sol';
+                return $recaptcha_response;
+        }
+
+        $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify",
+                                          array (
+                                                 'privatekey' => $privkey,
+                                                 'remoteip' => $remoteip,
+                                                 'challenge' => $challenge,
+                                                 'response' => $response
+                                                 ) + $extra_params
+                                          );
+
+        $answers = explode ("\n", $response [1]);
+        $recaptcha_response = new ReCaptchaResponse();
+
+        if (trim ($answers [0]) == 'true') {
+                $recaptcha_response->is_valid = true;
+        }
+        else {
+                $recaptcha_response->is_valid = false;
+                $recaptcha_response->error = $answers [1];
+        }
+        return $recaptcha_response;
+
 }
 
 /**
@@ -205,8 +199,8 @@ function recaptcha_check_answer($privkey, $remoteip, $challenge, $response, $ext
  * @param string $domain The domain where the page is hosted
  * @param string $appname The name of your application
  */
-function recaptcha_get_signup_url($domain = null, $appname = null) {
-	return "http://recaptcha.net/api/getkey?" .  _recaptcha_qsencode (array ('domain' => $domain, 'app' => $appname));
+function recaptcha_get_signup_url ($domain = null, $appname = null) {
+	return "https://www.google.com/recaptcha/admin/create?" .  _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname));
 }
 
 function _recaptcha_aes_pad($val) {
@@ -221,14 +215,14 @@ function _recaptcha_aes_encrypt($val,$ky) {
 	if (! function_exists ("mcrypt_encrypt")) {
 		die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed.");
 	}
-	$mode = MCRYPT_MODE_CBC;   
-	$enc = MCRYPT_RIJNDAEL_128;
-	$val = _recaptcha_aes_pad($val);
+	$mode=MCRYPT_MODE_CBC;   
+	$enc=MCRYPT_RIJNDAEL_128;
+	$val=_recaptcha_aes_pad($val);
 	return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
 }
 
 
-function _recaptcha_mailhide_urlbase64($x) {
+function _recaptcha_mailhide_urlbase64 ($x) {
 	return strtr(base64_encode ($x), '+/', '-_');
 }
 
@@ -236,14 +230,14 @@ function _recaptcha_mailhide_urlbase64($x) {
 function recaptcha_mailhide_url($pubkey, $privkey, $email) {
 	if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) {
 		die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " .
-		     "you can do so at <a href='http://mailhide.recaptcha.net/apikey'>http://mailhide.recaptcha.net/apikey</a>");
+		     "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>");
 	}
 	
 
 	$ky = pack('H*', $privkey);
 	$cryptmail = _recaptcha_aes_encrypt ($email, $ky);
 	
-	return "http://mailhide.recaptcha.net/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);
+	return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail);
 }
 
 /**
@@ -251,7 +245,7 @@ function recaptcha_mailhide_url($pubkey, $privkey, $email) {
  * eg, given johndoe@example,com return ["john", "example.com"].
  * the email is then displayed as john...@example.com
  */
-function _recaptcha_mailhide_email_parts($email) {
+function _recaptcha_mailhide_email_parts ($email) {
 	$arr = preg_split("/@/", $email );
 
 	if (strlen ($arr[0]) <= 4) {
@@ -268,14 +262,16 @@ function _recaptcha_mailhide_email_parts($email) {
  * Gets html to display an email address given a public an private key.
  * to get a key, go to:
  *
- * http://mailhide.recaptcha.net/apikey
+ * http://www.google.com/recaptcha/mailhide/apikey
  */
 function recaptcha_mailhide_html($pubkey, $privkey, $email) {
 	$emailparts = _recaptcha_mailhide_email_parts ($email);
 	$url = recaptcha_mailhide_url ($pubkey, $privkey, $email);
 	
-	return htmlentities($emailparts[0], ENT_QUOTES) . "<a href='" . htmlentities ($url, ENT_QUOTES) .
-		"' onclick=\"window.open('" . htmlentities ($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1], ENT_QUOTES);
+	return htmlentities($emailparts[0]) . "<a href='" . htmlentities ($url) .
+		"' onclick=\"window.open('" . htmlentities ($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities ($emailparts [1]);
 
 }
+
+
 ?>
diff --git a/wp-content/plugins/wp-recaptcha/screenshot-1.png b/wp-content/plugins/wp-recaptcha/screenshot-1.png
index 1392bc92eaef3e278eeedefdc0a1394b00021103..4db34f71c2b9399d41fb586a2f2e236938351ac4 100644
Binary files a/wp-content/plugins/wp-recaptcha/screenshot-1.png and b/wp-content/plugins/wp-recaptcha/screenshot-1.png differ
diff --git a/wp-content/plugins/wp-recaptcha/screenshot-2.png b/wp-content/plugins/wp-recaptcha/screenshot-2.png
index 6b28596fc39a22b0c595fd360d7c80c9d08883d9..acaf1b3dffe5c1284e6c28b363b9130f923f1a92 100644
Binary files a/wp-content/plugins/wp-recaptcha/screenshot-2.png and b/wp-content/plugins/wp-recaptcha/screenshot-2.png differ
diff --git a/wp-content/plugins/wp-recaptcha/settings.php b/wp-content/plugins/wp-recaptcha/settings.php
new file mode 100644
index 0000000000000000000000000000000000000000..f47bb8e45017f8b4abfe5da7fbb52834dc7a600c
--- /dev/null
+++ b/wp-content/plugins/wp-recaptcha/settings.php
@@ -0,0 +1,136 @@
+<?php
+
+    if (defined('ALLOW_INCLUDE') === false)
+        die('no direct access');
+
+?>
+
+<div class="wrap">
+   <a name="recaptcha"></a>
+   <h2><?php _e('reCAPTCHA Options', 'recaptcha'); ?></h2>
+   <p><?php _e('reCAPTCHA is a free, accessible CAPTCHA service that helps to digitize books while blocking spam on your blog.', 'recaptcha'); ?></p>
+   
+   <form method="post" action="options.php">
+      <?php settings_fields('recaptcha_options_group'); ?>
+
+      <h3><?php _e('Authentication', 'recaptcha'); ?></h3>
+      <p><?php _e('These keys are required before you are able to do anything else.', 'recaptcha'); ?> <?php _e('You can get the keys', 'recaptcha'); ?> <a href="<?php echo recaptcha_get_signup_url($this->blog_domain(), 'wordpress');?>" title="<?php _e('Get your reCAPTCHA API Keys', 'recaptcha'); ?>"><?php _e('here', 'recaptcha'); ?></a>.</p>
+      <p><?php _e('Be sure not to mix them up! The public and private keys are not interchangeable!'); ?></p>
+      
+      <table class="form-table">
+         <tr valign="top">
+            <th scope="row"><?php _e('Public Key', 'recaptcha'); ?></th>
+            <td>
+               <input type="text" name="recaptcha_options[public_key]" size="40" value="<?php echo $this->options['public_key']; ?>" />
+            </td>
+         </tr>
+         <tr valign="top">
+            <th scope="row"><?php _e('Private Key', 'recaptcha'); ?></th>
+            <td>
+               <input type="text" name="recaptcha_options[private_key]" size="40" value="<?php echo $this->options['private_key']; ?>" />
+            </td>
+         </tr>
+      </table>
+      
+      <h3><?php _e('Comment Options', 'recaptcha'); ?></h3>
+      <table class="form-table">
+         <tr valign="top">
+            <th scope="row"><?php _e('Activation', 'recaptcha'); ?></th>
+            <td>
+               <input type="checkbox" id ="recaptcha_options[show_in_comments]" name="recaptcha_options[show_in_comments]" value="1" <?php checked('1', $this->options['show_in_comments']); ?> />
+               <label for="recaptcha_options[show_in_comments]"><?php _e('Enable for comments form', 'recaptcha'); ?></label>
+            </td>
+         </tr>
+         
+         <tr valign="top">
+            <th scope="row"><?php _e('Target', 'recaptcha'); ?></th>
+            <td>
+               <input type="checkbox" id="recaptcha_options[bypass_for_registered_users]" name="recaptcha_options[bypass_for_registered_users]" value="1" <?php checked('1', $this->options['bypass_for_registered_users']); ?> />
+               <label for="recaptcha_options[bypass_for_registered_users]"><?php _e('Hide for Registered Users who can', 'recaptcha'); ?></label>
+               <?php $this->capabilities_dropdown(); ?>
+            </td>
+         </tr>
+
+         <tr valign="top">
+            <th scope="row"><?php _e('Presentation', 'recaptcha'); ?></th>
+            <td>
+               <label for="recaptcha_options[comments_theme]"><?php _e('Theme:', 'recaptcha'); ?></label>
+               <?php $this->theme_dropdown('comments'); ?>
+            </td>
+         </tr>
+
+         <tr valign="top">
+            <th scope="row"><?php _e('Tab Index', 'recaptcha'); ?></th>
+            <td>
+               <input type="text" name="recaptcha_options[comments_tab_index]" size="10" value="<?php echo $this->options['comments_tab_index']; ?>" />
+            </td>
+         </tr>
+      </table>
+      
+      <h3><?php _e('Registration Options', 'recaptcha'); ?></h3>
+      <table class="form-table">
+         <tr valign="top">
+            <th scope="row"><?php _e('Activation', 'recaptcha'); ?></th>
+            <td>
+               <input type="checkbox" id ="recaptcha_options[show_in_registration]" name="recaptcha_options[show_in_registration]" value="1" <?php checked('1', $this->options['show_in_registration']); ?> />
+               <label for="recaptcha_options[show_in_registration]"><?php _e('Enable for registration form', 'recaptcha'); ?></label>
+            </td>
+         </tr>
+         
+         <tr valign="top">
+            <th scope="row"><?php _e('Presentation', 'recaptcha'); ?></th>
+            <td>
+               <label for="recaptcha_options[registration_theme]"><?php _e('Theme:', 'recaptcha'); ?></label>
+               <?php $this->theme_dropdown('registration'); ?>
+            </td>
+         </tr>
+         
+         <tr valign="top">
+            <th scope="row"><?php _e('Tab Index', 'recaptcha'); ?></th>
+            <td>
+               <input type="text" name="recaptcha_options[registration_tab_index]" size="10" value="<?php echo $this->options['registration_tab_index']; ?>" />
+            </td>
+         </tr>
+      </table>
+      
+      <h3><?php _e('General Options', 'recaptcha'); ?></h3>
+      <table class="form-table">
+         <tr valign="top">
+            <th scope="row"><?php _e('reCAPTCHA Form', 'recaptcha'); ?></th>
+            <td>
+               <label for="recaptcha_options[recaptcha_language]"><?php _e('Language:', 'recaptcha'); ?></label>
+               <?php $this->recaptcha_language_dropdown(); ?>
+            </td>
+         </tr>
+         
+         <tr valign="top">
+            <th scope="row"><?php _e('Standards Compliance', 'recaptcha'); ?></th>
+            <td>
+               <input type="checkbox" id ="recaptcha_options[xhtml_compliance]" name="recaptcha_options[xhtml_compliance]" value="1" <?php checked('1', $this->options['xhtml_compliance']); ?> />
+               <label for="recaptcha_options[xhtml_compliance]"><?php _e('Produce XHTML 1.0 Strict Compliant Code', 'recaptcha'); ?></label>
+            </td>
+         </tr>
+      </table>
+      
+      <h3><?php _e('Error Messages', 'recaptcha'); ?></h3>
+      <table class="form-table">
+         <tr valign="top">
+            <th scope="row"><?php _e('reCAPTCHA Ignored', 'recaptcha'); ?></th>
+            <td>
+               <input type="text" name="recaptcha_options[no_response_error]" size="70" value="<?php echo $this->options['no_response_error']; ?>" />
+            </td>
+         </tr>
+         
+         <tr valign="top">
+            <th scope="row"><?php _e('Incorrect Guess', 'recaptcha'); ?></th>
+            <td>
+               <input type="text" name="recaptcha_options[incorrect_response_error]" size="70" value="<?php echo $this->options['incorrect_response_error']; ?>" />
+            </td>
+         </tr>
+      </table>
+
+      <p class="submit"><input type="submit" class="button-primary" title="<?php _e('Save reCAPTCHA Options') ?>" value="<?php _e('Save reCAPTCHA Changes') ?> &raquo;" /></p>
+   </form>
+   
+   <?php do_settings_sections('recaptcha_options_page'); ?>
+</div>
\ No newline at end of file
diff --git a/wp-content/plugins/wp-recaptcha/uninstall.php b/wp-content/plugins/wp-recaptcha/uninstall.php
new file mode 100644
index 0000000000000000000000000000000000000000..b13fc02899dfb6bd5de84bc03f5b1aa9a23ca0ac
--- /dev/null
+++ b/wp-content/plugins/wp-recaptcha/uninstall.php
@@ -0,0 +1,18 @@
+<?php
+// this is the uninstall handler
+// include unregister_setting, delete_option, and other uninstall behavior here
+
+require_once('wp-plugin.php');
+
+function uninstall_options($name) {
+    unregister_setting("${name}_group", $name);
+    WPPlugin::remove_options($name);
+}
+
+// recaptcha
+uninstall_options('recaptcha_options');
+
+// mailhide
+uninstall_options('mailhide_options');
+
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/wp-recaptcha/wp-plugin.php b/wp-content/plugins/wp-recaptcha/wp-plugin.php
new file mode 100644
index 0000000000000000000000000000000000000000..0c0261a139dc71e6bbce3e93674177961d0239a7
--- /dev/null
+++ b/wp-content/plugins/wp-recaptcha/wp-plugin.php
@@ -0,0 +1,132 @@
+<?php
+
+// just making sure the constant is defined
+if (!defined('WP_CONTENT_DIR'))
+    define('WP_CONTENT_DIR', ABSPATH . 'wp-content');
+ 
+
+if (!class_exists('Environment')) {
+    class Environment {
+        const WordPress = 1; // regular wordpress
+        const WordPressMU = 2; // wordpress mu
+        const WordPressMS = 3; // wordpress multi-site
+    }
+}
+
+if (!class_exists('WPPlugin')) {
+    abstract class WPPlugin {
+        protected $environment; // what environment are we in
+        protected $options_name; // the name of the options associated with this plugin
+        
+        protected $options;
+        
+        function WPPlugin($options_name) {
+            $args = func_get_args();
+            call_user_func_array(array(&$this, "__construct"), $args);
+        }
+        
+        function __construct($options_name) {
+            $this->environment = WPPlugin::determine_environment();
+            $this->options_name = $options_name;
+            
+            $this->options = WPPlugin::retrieve_options($this->options_name);
+        }
+        
+        // sub-classes determine what actions and filters to hook
+        abstract protected function register_actions();
+        abstract protected function register_filters();
+        
+        // environment checking
+        static function determine_environment() {
+            global $wpmu_version;
+            
+            if (function_exists('is_multisite'))
+                if (is_multisite())
+                    return Environment::WordPressMS;
+            
+            if (!empty($wpmu_version))
+                return Environment::WordPressMU;
+                
+            return Environment::WordPress;
+        }
+        
+        // path finding
+        static function plugins_directory() {
+            if (WPPlugin::determine_environment() == Environment::WordPressMU)
+                return WP_CONTENT_DIR . '/mu-plugins';
+            else
+                return WP_CONTENT_DIR . '/plugins';
+        }
+        
+        static function plugins_url() {
+           if (WPPlugin::determine_environment() == Environment::WordPressMU)
+               return get_option('siteurl') . '/wp-content/mu-plugins';
+           else
+               return get_option('siteurl') . '/wp-content/plugins';
+        }
+        
+        static function path_to_plugin_directory() {
+            $current_directory = basename(dirname(__FILE__));
+            
+            return WPPlugin::plugins_directory() . "/${current_directory}";
+        }
+        
+        static function url_to_plugin_directory() {
+           $current_directory = basename(dirname(__FILE__));
+           
+           return WPPlugin::plugins_url() . "/${current_directory}";
+        }
+        
+        static function path_to_plugin($file_path) {
+            $file_name = basename($file_path); // /etc/blah/file.txt => file.txt
+            
+            if (WPPlugin::determine_environment() == Environment::WordPressMU)
+                return WPPlugin::plugins_directory() . "/${file_name}";
+            else
+                return WPPlugin::path_to_plugin_directory() . "/${file_name}";
+        }
+        
+        // options
+        abstract protected function register_default_options();
+        
+        // option retrieval
+        static function retrieve_options($options_name) {
+            if (WPPlugin::determine_environment() == Environment::WordPressMU || WPPlugin::determine_environment() == Environment::WordPressMS)
+                return get_site_option($options_name);
+            else
+                return get_option($options_name);
+        }
+        
+        static function remove_options($options_name) {
+            if (WPPlugin::determine_environment() == Environment::WordPressMU || WPPlugin::determine_environment() == Environment::WordPressMS)
+                return delete_site_option($options_name);
+            else
+                return delete_option($options_name);
+        }
+        
+        static function add_options($options_name, $options) {
+            if (WPPlugin::determine_environment() == Environment::WordPressMU || WPPlugin::determine_environment() == Environment::WordPressMS)
+                return add_site_option($options_name, $options);
+            else
+                return add_option($options_name, $options);
+        }
+        
+        protected function is_multi_blog() {
+            return $this->environment != Environment::WordPress;
+        }
+        
+        // calls the appropriate 'authority' checking function depending on the environment
+        protected function is_authority() {
+            if ($this->environment == Environment::WordPress)
+                return is_admin();
+            
+            if ($this->environment == Environment::WordPressMU)
+                return is_site_admin();
+            
+            if ($this->environment == Environment::WordPressMS)
+                return is_super_admin();
+        }
+    }
+}
+
+?>
\ No newline at end of file
diff --git a/wp-content/plugins/wp-recaptcha/wp-recaptcha.php b/wp-content/plugins/wp-recaptcha/wp-recaptcha.php
index c8965a9a08c874ec666156698559904ef32e5286..e23984bd72cd9640166d29a426841a89406f980f 100644
--- a/wp-content/plugins/wp-recaptcha/wp-recaptcha.php
+++ b/wp-content/plugins/wp-recaptcha/wp-recaptcha.php
@@ -3,1005 +3,20 @@
 Plugin Name: WP-reCAPTCHA
 Plugin URI: http://www.blaenkdenum.com/wp-recaptcha/
 Description: Integrates reCAPTCHA anti-spam solutions with wordpress
-Version: 2.9.8.2
+Version: 3.1.3
 Author: Jorge Peña
 Email: support@recaptcha.net
 Author URI: http://www.blaenkdenum.com
 */
 
-// Plugin was initially created by Ben Maurer and Mike Crawford
-// Permissions/2.5 transition help from Jeremy Clarke @ http://globalvoicesonline.org
-// WordPress 3.0 Multi site update from Tom Lynch @ http://unknowndomain.co.uk
+// this is the 'driver' file that instantiates the objects and registers every hook
 
-// WORDPRESS TYPE DETECTION
+define('ALLOW_INCLUDE', true);
 
-// WordPress MU settings - DON'T EDIT
-//    0 - Regular WordPress installation
-//    1 - WordPress MU Forced Activated
-//    2 - WordPress MU Optional Activation
-//	  3 - WordPress MS Network Activated
+require_once('recaptcha.php');
+require_once('mailhide.php');
 
-$wpmu = 0;
+$recaptcha = new reCAPTCHA('recaptcha_options');
+$mailhide = new MailHide('mailhide_options');
 
-if (basename(dirname(__FILE__)) == "mu-plugins") // forced activated
-   $wpmu = 1;
-else if (basename(dirname(__FILE__)) == "plugins" && function_exists('is_site_admin')) // optionally activated
-   $wpmu = 2;
-
-if (function_exists('is_multisite'))
-	if (is_multisite())
-		$wpmu = 3;
-
-if ($wpmu == 1 || $wpmu == 3)
-   $recaptcha_opt = get_site_option('recaptcha'); // get the options from the database
-else
-   $recaptcha_opt = get_option('recaptcha'); // get the options from the database
-
-// END WORDPRESS TYPE DETECTION
-   
-if ($wpmu == 1)
-   require_once(dirname(__FILE__) . '/wp-recaptcha/recaptchalib.php');
-else
-   require_once(dirname(__FILE__) . '/recaptchalib.php');
-
-// doesn't need to be secret, just shouldn't be used by any other code.
-define ("RECAPTCHA_WP_HASH_SALT", "b7e0638d85f5d7f3694f68e944136d62");
-
-/* =============================================================================
-   CSS - This links the pages to the stylesheet to be properly styled
-   ============================================================================= */
-
-function re_css() {
-   global $recaptcha_opt, $wpmu;
-   
-   if (!defined('WP_CONTENT_URL'))
-      define('WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
-   
-   $path = WP_CONTENT_URL . '/plugins/wp-recaptcha/recaptcha.css';
-   
-   if ($wpmu == 1)
-		$path = WP_CONTENT_URL . '/mu-plugins/wp-recaptcha/recaptcha.css';
-   
-   echo '<link rel="stylesheet" type="text/css" href="' . $path . '" />';
-}
-
-function registration_css() {
-   global $recaptcha_opt;
-   
-   if ($recaptcha_opt['re_registration']) {
-		$width = 0;
-		
-		if ($recaptcha_opt['re_theme_reg'] == 'red' ||
-          $recaptcha_opt['re_theme_reg'] == 'white' ||
-          $recaptcha_opt['re_theme_reg'] == 'blackglass')
-          $width = 358;
-		else if ($recaptcha_opt['re_theme_reg'] == 'clean')
-          $width = 485;
-		
-		echo <<<REGISTRATION
-		<style type="text/css">
-		#login {
-				width: {$width}px !important;
-		}
-		
-		#login a {
-				text-align: center;
-		}
-		
-		#nav {
-				text-align: center;
-		}
-		form .submit {
-            margin-top: 10px;
-      }
-		</style>
-REGISTRATION;
-   }
-}
-
-add_action('wp_head', 're_css'); // include the stylesheet in typical pages to style hidden emails
-add_action('admin_head', 're_css'); // include stylesheet to style options page
-add_action('login_head', 'registration_css'); // include the login div styling, embedded
-
-/* =============================================================================
-   End CSS
-   ============================================================================= */
-
-// If the plugin is deactivated, delete the preferences
-function delete_preferences() {
-   global $wpmu;
-
-   if ($wpmu != 1)
-		delete_option('recaptcha');
-}
-
-register_deactivation_hook(__FILE__, 'delete_preferences');
-
-/* =============================================================================
-   reCAPTCHA on Registration Form - Thanks to Ben C.'s recapture plugin
-   ============================================================================= */
-   
-// Display the reCAPTCHA on the registration form
-function display_recaptcha($errors) {
-	global $recaptcha_opt, $wpmu;
-   
-   if ($recaptcha_opt['re_registration']) {
-		$format = <<<END
-		<script type='text/javascript'>
-		var RecaptchaOptions = { theme : '{$recaptcha_opt['re_theme_reg']}', lang : '{$recaptcha_opt['re_lang']}' , tabindex : 30 };
-		</script>
-END;
-		
-		$comment_string = <<<COMMENT_FORM
-		<script type='text/javascript'>   
-		document.getElementById('recaptcha_table').style.direction = 'ltr';
-		</script>
-COMMENT_FORM;
-
-		if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on")
-         $use_ssl = true;
-		else
-         $use_ssl = false;
-		
-		if ($wpmu == 1) {
-   		$error = $errors->get_error_message('captcha'); ?>
-   		<label for="verification">Verification:</label>
-         <?php echo($error ? '<p class="error">'.$error.'</p>' : '') ?>
-         <?php echo $format . recaptcha_wp_get_html($_GET['rerror'], $use_ssl); ?>
-   		<?php }
-		
-		else {
-         echo '<hr style="clear: both; margin-bottom: 1.5em; border: 0; border-top: 1px solid #999; height: 1px;" />';
-         echo $format . recaptcha_wp_get_html($_GET['rerror'], $use_ssl);
-      }
-   }
-}
-
-// Hook the display_recaptcha function into WordPress
-if ($wpmu != 1 && $wpmu != 3)
-   add_action('register_form', 'display_recaptcha');
-else
-   add_action('signup_extra_fields', 'display_recaptcha');
-
-// Check the captcha
-function check_recaptcha() {
-	global $recaptcha_opt, $errors;
-	
-   if (empty($_POST['recaptcha_response_field']))
-		$errors['blank_captcha'] = $recaptcha_opt['error_blank'];
-   
-   else {
-   	$response = recaptcha_check_answer($recaptcha_opt['privkey'],
-		$_SERVER['REMOTE_ADDR'],
-		$_POST['recaptcha_challenge_field'],
-		$_POST['recaptcha_response_field']);
-
-   	if (!$response->is_valid)
-   		if ($response->error == 'incorrect-captcha-sol')
-   				$errors['captcha_wrong'] = $recaptcha_opt['error_incorrect'];
-   }
-}
-
-// Check the captcha
-function check_recaptcha_new($errors) {
-	global $recaptcha_opt;
-	
-   if (empty($_POST['recaptcha_response_field']) || $_POST['recaptcha_response_field'] == '') {
-		$errors->add('blank_captcha', $recaptcha_opt['error_blank']);
-		return $errors;
-   }
-   
-	$response = recaptcha_check_answer($recaptcha_opt['privkey'],
-      $_SERVER['REMOTE_ADDR'],
-      $_POST['recaptcha_challenge_field'],
-      $_POST['recaptcha_response_field'] );
-
-	if (!$response->is_valid)
-		if ($response->error == 'incorrect-captcha-sol')
-			$errors->add('captcha_wrong', $recaptcha_opt['error_incorrect']);
-   
-   return $errors;
-}
-
-// Check the recaptcha on WordPress MU
-function check_recaptcha_wpmu($result) {
-   global $_POST, $recaptcha_opt;
-   
-   // must make a check here, otherwise the wp-admin/user-new.php script will keep trying to call
-   // this function despite not having called do_action('signup_extra_fields'), so the recaptcha
-   // field was never shown. this way it won't validate if it's called in the admin interface
-   if (!is_admin()) {
-         // It's blogname in 2.6, blog_id prior to that
-      if (isset($_POST['blog_id']) || isset($_POST['blogname']))
-      	return $result;
-
-      // no text entered
-      if (empty($_POST['recaptcha_response_field']) || $_POST['recaptcha_response_field'] == '') {
-      	$result['errors']->add('blank_captcha', $recaptcha_opt['error_blank']);
-      	return $result;
-      }
-
-      $response = recaptcha_check_answer($recaptcha_opt['privkey'],
-         $_SERVER['REMOTE_ADDR'],
-         $_POST['recaptcha_challenge_field'],
-         $_POST['recaptcha_response_field'] );
-
-      // incorrect CAPTCHA
-      if (!$response->is_valid)
-      	if ($response->error == 'incorrect-captcha-sol') {
-      		$result['errors']->add('captcha_wrong', $recaptcha_opt['error_incorrect']);
-            echo "<div class=\"error\">". $recaptcha_opt['error_incorrect'] . "</div>";
-      	}
-   }
-   
-   return $result;
-}
-
-if ($recaptcha_opt['re_registration']) {
-   if ($wpmu == 1 || $wpmu == 3)
-		add_filter('wpmu_validate_user_signup', 'check_recaptcha_wpmu');
-   
-   else if ($wpmu == 0) {
-		// Hook the check_recaptcha function into WordPress
-		if (version_compare(get_bloginfo('version'), '2.5' ) >= 0)
-         add_filter('registration_errors', 'check_recaptcha_new');
-		else
-         add_filter('registration_errors', 'check_recaptcha');
-   }
-}
-/* =============================================================================
-   End reCAPTCHA on Registration Form
-   ============================================================================= */
-
-/* =============================================================================
-   reCAPTCHA Plugin Default Options
-   ============================================================================= */
-
-$option_defaults = array (
-   'pubkey'	=> '', // the public key for reCAPTCHA
-   'privkey'	=> '', // the private key for reCAPTCHA
-   'use_mailhide_posts' => '0', // mailhide for posts/pages
-   'use_mailhide_comments' => '0', // use mailhide for comments
-   'use_mailhide_rss' => '0', // use mailhide for the rss feed of the posts/pages
-   'use_mailhide_rss_comments' => '0', // use mailhide for the rss comments
-   're_bypass' => '', // whether to sometimes skip reCAPTCHAs for registered users
-   're_bypasslevel' => '', // who doesn't have to do the reCAPTCHA (should be a valid WordPress capability slug)
-   'mh_bypass' => '', // whether to sometimes skip the MailHide filter for registered users
-   'mh_bypasslevel' => '', // who can see full emails normally (should be a valid WordPress capability slug)
-   'mailhide_pub' => '', // mailhide public key
-   'mailhide_priv' => '', // mailhide private key
-   're_theme' => 'red', // the default theme for reCAPTCHA on the comment post
-   're_theme_reg' => 'red', // the default theme for reCAPTCHA on the registration form
-   're_lang' => 'en', // the default language for reCAPTCHA
-   're_tabindex' => '5', // the default tabindex for reCAPTCHA
-   're_comments' => '1', // whether or not to show reCAPTCHA on the comment post
-   're_registration' => '1', // whether or not to show reCAPTCHA on the registratoin page
-   're_xhtml' => '0', // whether or not to be XHTML 1.0 Strict compliant
-   'mh_replace_link' => '', // name the link something else
-   'mh_replace_title' => '', // title of the link
-   'error_blank' => '<strong>ERROR</strong>: Please fill in the reCAPTCHA form.', // the message to display when the user enters no CAPTCHA response
-   'error_incorrect' => '<strong>ERROR</strong>: That reCAPTCHA response was incorrect.', // the message to display when the user enters the incorrect CAPTCHA response
-);
-
-// install the defaults
-if ($wpmu != 1)
-   add_option('recaptcha', $option_defaults, 'reCAPTCHA Default Options', 'yes');
-
-/* =============================================================================
-   End reCAPTCHA Plugin Default Options
-   ============================================================================= */
-
-/* =============================================================================
-   MailHide - This scans for addresses and hides them using the MailHide API
-   ============================================================================= */
-
-// The main mailhide filter
-function mh_insert_email($content = '') {
-   global $recaptcha_opt;
-  
-   // set the minimum capability needed to skip the MailHide if there is one
-   if ($recaptcha_opt['mh_bypass'] && $recaptcha_opt['mh_bypasslevel'])
-      $needed_capability = $recaptcha_opt['mh_bypasslevel'];
-        
-	// skip the MailHide display if the minimum capability is met
-	if (($needed_capability && current_user_can($needed_capability)) || !$recaptcha_opt['re_comments']) {
-      // remove the nohides
-      $content = preg_replace('/\[\/?nohide\]/i','',$content);
-		return $content;
-   }
-
-   // Regular Expressions thanks to diabolic from EFNet #regex
-   
-   // match hyperlinks with emails
-   $regex = '%(?<!\[nohide\])<a[^>]*href="((?:mailto:)?([^@"]+@[^@"]+))"[^>]*>(.+?)<\/a>(?!\[/nohide\])%i';
-   $content = preg_replace_callback($regex, "mh_replace_hyperlink", $content);
-   
-   // match emails
-   $regex = '%\b([\w.+-]+@[a-z\d.-]+\.[a-z]{2,6})\b(?!\s*\[\/nohide\]|(?:(?!<a[^>]*>).)*<\/a>)%i';
-   $content = preg_replace_callback($regex, "mh_replace", $content);
-   
-   // remove the nohides
-   $content = preg_replace('/\[\/?nohide\]/i','',$content);
-   return $content;
-}
-
-// replace the hyperlinked emails i.e. <a href="haha@lol.com">this</a> or <a href="mailto:haha@lol.com">that</a>
-function mh_replace_hyperlink($matches) {
-   global $recaptcha_opt;
-   
-   // set the minimum capability needed to skip the MailHide if there is one
-   if ($recaptcha_opt['mh_bypass'] && $recaptcha_opt['mh_bypasslevel'])
-      $needed_capability = $recaptcha_opt['mh_bypasslevel'];
-        
-	// skip the MailHide display if the minimum capability is met
-	if (($needed_capability && current_user_can($needed_capability)) || !$recaptcha_opt['re_comments']) {
-      // remove the nohides
-      $content = preg_replace('/\[\/?nohide\]/i','',$content);
-		return $content;
-   }
-   
-   // get the url, the part inside the href. this is the email of course
-   $url = recaptcha_mailhide_url($recaptcha_opt['mailhide_pub'], $recaptcha_opt['mailhide_priv'], $matches[2]);
-   
-   // construct a new hyperlink with the url hidden but the link text the same
-   $html = "<a href='" . $url . "' onclick=\"window.open('" . htmlentities ($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\">" . $matches[3] . "</a>";
-   
-   // style it
-   $html = '<span class="mh-hyperlinked">' . $html . "</span>";
-   
-   return $html;
-}
-
-// replace the plain text emails i.e. haha@lol.com
-function mh_replace($matches) {
-   global $recaptcha_opt;
-   
-   # var_dump($matches);
-   
-   if ($recaptcha_opt['mh_replace_link'] == "" && $recaptcha_opt['mh_replace_title'] == "") {
-      // find plain text emails and hide them
-      $html = recaptcha_mailhide_html($recaptcha_opt['mailhide_pub'], $recaptcha_opt['mailhide_priv'], $matches[0]);
-   }
-   
-   else {
-      // replace both things
-      if ($recaptcha_opt['mh_replace_link'] != "" && $recaptcha_opt['mh_replace_title'] != "") {
-         $url = recaptcha_mailhide_url($recaptcha_opt['mailhide_pub'], $recaptcha_opt['mailhide_priv'], $matches[0]);
-         $html = "<a href='" . htmlentities($url, ENT_QUOTES) .
-      		"' onclick=\"window.open('" . htmlentities($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"" . $recaptcha_opt['mh_replace_title'] . "\">" . $recaptcha_opt['mh_replace_link'] . "</a>";
-      }
-      
-      // only replace the link
-      else if ($recaptcha_opt['mh_replace_link'] != "" && $recaptcha_opt['mh_replace_title'] == "") {
-         $url = recaptcha_mailhide_url($recaptcha_opt['mailhide_pub'], $recaptcha_opt['mailhide_priv'], $matches[0]);
-         $html = "<a href='" . htmlentities($url, ENT_QUOTES) .
-      		"' onclick=\"window.open('" . htmlentities($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">" . $recaptcha_opt['mh_replace_link'] . "</a>";
-      }
-      
-      // only replace the title
-      else if ($recaptcha_opt['mh_replace_link'] == "" && $recaptcha_opt['mh_replace_title'] != "") {
-         $url = recaptcha_mailhide_url($recaptcha_opt['mailhide_pub'], $recaptcha_opt['mailhide_priv'], $matches[0]);
-         $emailparts = _recaptcha_mailhide_email_parts ($matches[0]);
-      	
-      	$html = htmlentities($emailparts[0], ENT_QUOTES) . "<a href='" . htmlentities($url, ENT_QUOTES) .
-      		"' onclick=\"window.open('" . htmlentities($url, ENT_QUOTES) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"" . $recaptcha_opt['mh_replace_title'] . "\">...</a>@" . htmlentities($emailparts[0], ENT_QUOTES);
-      }
-   }
-   
-   // style it
-   $html = '<span class="mh-plaintext">' . $html . "</span>";
-   
-   return $html;
-}
-
-// add the filters only if mcrypt is loaded
-if (extension_loaded('mcrypt')) {
-   if ($recaptcha_opt['use_mailhide_posts'])
-      add_filter('the_content', 'mh_insert_email');
-   if ($recaptcha_opt['use_mailhide_comments'])
-      add_filter('get_comment_text', 'mh_insert_email');
-   if ($recaptcha_opt['use_mailhide_rss'])
-      add_filter('the_content_rss', 'mh_insert_email');
-   if ($recaptcha_opt['use_mailhide_rss_comments'])
-      add_filter('comment_text_rss', 'mh_insert_email');
-}
-
-/* =============================================================================
-   End MailHide
-   ============================================================================= */
-
-/* =============================================================================
-   reCAPTCHA - The reCAPTCHA comment spam protection section
-   ============================================================================= */
-function recaptcha_wp_hash_comment($id)
-{
-	global $recaptcha_opt;
-   
-	if (function_exists('wp_hash'))
-		return wp_hash(RECAPTCHA_WP_HASH_COMMENT . $id);
-	else
-		return md5(RECAPTCHA_WP_HASH_COMMENT . $recaptcha_opt['privkey'] . $id);
-}
-
-function recaptcha_wp_get_html ($recaptcha_error, $use_ssl=false) {
-	global $recaptcha_opt;
-   
-	return recaptcha_get_html($recaptcha_opt['pubkey'], $recaptcha_error, $use_ssl, $recaptcha_opt['re_xhtml']);
-}
-
-/**
- *  Embeds the reCAPTCHA widget into the comment form.
- * 
- */	
-function recaptcha_comment_form() {
-   global $user_ID, $recaptcha_opt;
-
-   // set the minimum capability needed to skip the captcha if there is one
-   if ($recaptcha_opt['re_bypass'] && $recaptcha_opt['re_bypasslevel'])
-      $needed_capability = $recaptcha_opt['re_bypasslevel'];
-
-	// skip the reCAPTCHA display if the minimum capability is met
-	if (($needed_capability && current_user_can($needed_capability)) || !$recaptcha_opt['re_comments'])
-		return;
-   
-   else {
-		// Did the user fail to match the CAPTCHA? If so, let them know
-		if ($_GET['rerror'] == 'incorrect-captcha-sol')
-		echo "<p class=\"recaptcha-error\">" . $recaptcha_opt['error_incorrect'] . "</p>";
-   
-		//modify the comment form for the reCAPTCHA widget
-		$recaptcha_js_opts = <<<OPTS
-		<script type='text/javascript'>
-				var RecaptchaOptions = { theme : '{$recaptcha_opt['re_theme']}', lang : '{$recaptcha_opt['re_lang']}' , tabindex : {$recaptcha_opt['re_tabindex']} };
-		</script>
-OPTS;
-
-		if ($recaptcha_opt['re_xhtml']) {
-		$comment_string = <<<COMMENT_FORM
-				<div id="recaptcha-submit-btn-area"><br /></div>
-				<script type='text/javascript'>
-				var sub = document.getElementById('submit');
-				sub.parentNode.removeChild(sub);
-				document.getElementById('recaptcha-submit-btn-area').appendChild (sub);
-				document.getElementById('submit').tabIndex = 6;
-				if ( typeof _recaptcha_wordpress_savedcomment != 'undefined') {
-						document.getElementById('comment').value = _recaptcha_wordpress_savedcomment;
-				}
-				document.getElementById('recaptcha_table').style.direction = 'ltr';
-				</script>
-COMMENT_FORM;
-		}
-		
-		else {
-		$comment_string = <<<COMMENT_FORM
-				<div id="recaptcha-submit-btn-area"></div> 
-				<script type='text/javascript'>
-				var sub = document.getElementById('submit');
-				sub.parentNode.removeChild(sub);
-				document.getElementById('recaptcha-submit-btn-area').appendChild (sub);
-				document.getElementById('submit').tabIndex = 6;
-				if ( typeof _recaptcha_wordpress_savedcomment != 'undefined') {
-						document.getElementById('comment').value = _recaptcha_wordpress_savedcomment;
-				}
-				document.getElementById('recaptcha_table').style.direction = 'ltr';
-				</script>
-				<noscript>
-				 <style type='text/css'>#submit {display:none;}</style>
-				 <input name="submit" type="submit" id="submit-alt" tabindex="6" value="Submit Comment"/> 
-				</noscript>
-COMMENT_FORM;
-		}
-
-		if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on")
-         $use_ssl = true;
-		else
-         $use_ssl = false;
-		
-		echo $recaptcha_js_opts .  recaptcha_wp_get_html($_GET['rerror'], $use_ssl) . $comment_string;
-   }
-}
-
-add_action('comment_form', 'recaptcha_comment_form');
-
-function recaptcha_wp_show_captcha_for_comment() {
-   global $user_ID;
-   return true;
-}
-
-$recaptcha_saved_error = '';
-
-/**
- * Checks if the reCAPTCHA guess was correct and sets an error session variable if not
- * @param array $comment_data
- * @return array $comment_data
- */
-function recaptcha_wp_check_comment($comment_data) {
-	global $user_ID, $recaptcha_opt;
-	global $recaptcha_saved_error;
-   	
-   // set the minimum capability needed to skip the captcha if there is one
-   if ($recaptcha_opt['re_bypass'] && $recaptcha_opt['re_bypasslevel'])
-      $needed_capability = $recaptcha_opt['re_bypasslevel'];
-        
-	// skip the filtering if the minimum capability is met
-	if (($needed_capability && current_user_can($needed_capability)) || !$recaptcha_opt['re_comments'])
-		return $comment_data;
-   
-	if (recaptcha_wp_show_captcha_for_comment()) {
-		if ( $comment_data['comment_type'] == '' ) { // Do not check trackbacks/pingbacks
-			$challenge = $_POST['recaptcha_challenge_field'];
-			$response = $_POST['recaptcha_response_field'];
-
-			$recaptcha_response = recaptcha_check_answer ($recaptcha_opt ['privkey'], $_SERVER['REMOTE_ADDR'], $challenge, $response);
-			if ($recaptcha_response->is_valid)
-				return $comment_data;
-			else {
-				$recaptcha_saved_error = $recaptcha_response->error;
-				add_filter('pre_comment_approved', create_function('$a', 'return \'spam\';'));
-				return $comment_data;
-			}
-		}
-	}
-	return $comment_data;
-}
-
-/*
- * If the reCAPTCHA guess was incorrect from recaptcha_wp_check_comment, then redirect back to the comment form 
- * @param string $location
- * @param OBJECT $comment
- * @return string $location
- */
-function recaptcha_wp_relative_redirect($location, $comment) {
-	global $recaptcha_saved_error;
-	if($recaptcha_saved_error != '') { 
-		//replace the '#comment-' chars on the end of $location with '#commentform'.
-
-		$location = substr($location, 0,strrpos($location, '#')) .
-			((strrpos($location, "?") === false) ? "?" : "&") .
-			'rcommentid=' . $comment->comment_ID . 
-			'&rerror=' . $recaptcha_saved_error .
-			'&rchash=' . recaptcha_wp_hash_comment ($comment->comment_ID) . 
-			'#commentform';
-	}
-	return $location;
-}
-
-/*
- * If the reCAPTCHA guess was incorrect from recaptcha_wp_check_comment, then insert their saved comment text
- * back in the comment form. 
- * @param boolean $approved
- * @return boolean $approved
- */
-function recaptcha_wp_saved_comment() {
-   if (!is_single() && !is_page())
-      return;
-
-   if ($_GET['rcommentid'] && $_GET['rchash'] == recaptcha_wp_hash_comment ($_GET['rcommentid'])) {
-      $comment = get_comment($_GET['rcommentid']);
-
-      $com = preg_replace('/([\\/\(\)\+\;\'\"])/e','\'%\'.dechex(ord(\'$1\'))', $comment->comment_content);
-      $com = preg_replace('/\\r\\n/m', '\\\n', $com);
-
-      echo "
-      <script type='text/javascript'>
-      var _recaptcha_wordpress_savedcomment =  '" . $com  ."';
-
-      _recaptcha_wordpress_savedcomment = unescape(_recaptcha_wordpress_savedcomment);
-      </script>
-      ";
-
-      wp_delete_comment($comment->comment_ID);
-   }
-}
-
-function recaptcha_wp_blog_domain () {
-	$uri = parse_url(get_settings('siteurl'));
-	return $uri['host'];
-}
-
-add_filter('wp_head', 'recaptcha_wp_saved_comment',0);
-add_filter('preprocess_comment', 'recaptcha_wp_check_comment',0);
-add_filter('comment_post_redirect', 'recaptcha_wp_relative_redirect',0,2);
-
-function recaptcha_wp_add_options_to_admin() {
-   global $wpmu;
-
-	if ($wpmu == 3 && is_super_admin()) {
-		add_submenu_page('ms-admin.php', 'reCAPTCHA', 'reCAPTCHA', 'manage_options', __FILE__, 'recaptcha_wp_options_subpanel');
-		add_options_page('reCAPTCHA', 'reCAPTCHA', 'manage_options', __FILE__, 'recaptcha_wp_options_subpanel');
-	}
-	else if ($wpmu == 1 && is_site_admin()) {
-		add_submenu_page('wpmu-admin.php', 'reCAPTCHA', 'reCAPTCHA', 'manage_options', __FILE__, 'recaptcha_wp_options_subpanel');
-		add_options_page('reCAPTCHA', 'reCAPTCHA', 'manage_options', __FILE__, 'recaptcha_wp_options_subpanel');
-	}
-	else if ($wpmu != 1) {
-		add_options_page('reCAPTCHA', 'reCAPTCHA', 'manage_options', __FILE__, 'recaptcha_wp_options_subpanel');
-	}
-}
-
-function recaptcha_wp_options_subpanel() {
-   global $wpmu;
-	// Default values for the options array
-	$optionarray_def = array(
-		'pubkey'	=> '',
-		'privkey' 	=> '',
-		'use_mailhide_posts' => '',
-		'use_mailhide_comments' => '',
-		'use_mailhide_rss' => '',
-		'use_mailhide_rss_comments' => '',
-		're_bypasslevel' => '3',
-		'mh_bypasslevel' => '3',
-		'mailhide_pub' => '',
-		'mailhide_priv' => '',
-		're_theme' => 'red',
-		're_theme_reg' => 'red',
-		're_lang' => 'en',
-		're_tabindex' => '5',
-		're_comments' => '1',
-		're_registration' => '1',
-		're_xhtml' => '0',
-      'mh_replace_link' => '',
-      'mh_replace_title' => '',
-      'error_blank' => '<strong>ERROR</strong>: Please fill in the reCAPTCHA form.',
-      'error_incorrect' => '<strong>ERROR</strong>: That reCAPTCHA response was incorrect.',
-		);
-
-	if ($wpmu != 1)
-		add_option('recaptcha', $optionarray_def, 'reCAPTCHA Options');
-
-	/* Check form submission and update options if no error occurred */
-	if (isset($_POST['submit'])) {
-		$optionarray_update = array (
-		'pubkey'	=> trim($_POST['recaptcha_opt_pubkey']),
-		'privkey'	=> trim($_POST['recaptcha_opt_privkey']),
-		'use_mailhide_posts' => $_POST['use_mailhide_posts'],
-		'use_mailhide_comments' => $_POST['use_mailhide_comments'],
-		'use_mailhide_rss' => $_POST['use_mailhide_rss'],
-		'use_mailhide_rss_comments' => $_POST['use_mailhide_rss_comments'],
-		're_bypass' => $_POST['re_bypass'],
-		're_bypasslevel' => $_POST['re_bypasslevel'],
-		'mailhide_pub' => trim($_POST['mailhide_pub']),
-		'mailhide_priv' => trim($_POST['mailhide_priv']),
-		'mh_bypass' => $_POST['mh_bypass'],
-		'mh_bypasslevel' => $_POST['mh_bypasslevel'],
-		're_theme' => $_POST['re_theme'],
-		're_theme_reg' => $_POST['re_theme_reg'],
-		're_lang' => $_POST['re_lang'],
-		're_tabindex' => $_POST['re_tabindex'],
-		're_comments' => $_POST['re_comments'],
-		're_registration' => $_POST['re_registration'],
-		're_xhtml' => $_POST['re_xhtml'],
-      'mh_replace_link' => $_POST['mh_replace_link'],
-      'mh_replace_title' => $_POST['mh_replace_title'],
-      'error_blank' => $_POST['error_blank'],
-      'error_incorrect' => $_POST['error_incorrect'],
-		);
-	// save updated options
-	if ($wpmu == 1 || $wpmu == 3)
-		update_site_option('recaptcha', $optionarray_update);
-	else
-		update_option('recaptcha', $optionarray_update);
-}
-
-	/* Get options */
-	if ($wpmu == 1 || $wpmu == 3)
-		$optionarray_def = get_site_option('recaptcha');
-   else
-		$optionarray_def = get_option('recaptcha');
-
-/* =============================================================================
-   reCAPTCHA Admin Page and Functions
-   ============================================================================= */
-   
-/*
- * Display an HTML <select> listing the capability options for disabling security 
- * for registered users. 
- * @param string $select_name slug to use in <select> id and name
- * @param string $checked_value selected value for dropdown, slug form.
- * @return NULL
- */
- 
-function recaptcha_dropdown_capabilities($select_name, $checked_value="") {
-	// define choices: Display text => permission slug
-	$capability_choices = array (
-	 	'All registered users' => 'read',
-	 	'Edit posts' => 'edit_posts',
-	 	'Publish Posts' => 'publish_posts',
-	 	'Moderate Comments' => 'moderate_comments',
-	 	'Administer site' => 'level_10'
-	 	);
-	// print the <select> and loop through <options>
-	echo '<select name="' . $select_name . '" id="' . $select_name . '">' . "\n";
-	foreach ($capability_choices as $text => $capability) :
-		if ($capability == $checked_value) $checked = ' selected="selected" ';
-		echo '\t <option value="' . $capability . '"' . $checked . ">$text</option> \n";
-		$checked = NULL;
-	endforeach;
-	echo "</select> \n";
- } // end recaptcha_dropdown_capabilities()
-   
-?>
-
-<!-- ############################## BEGIN: ADMIN OPTIONS ################### -->
-<div class="wrap">
-	<h2>reCAPTCHA Options</h2>
-	<h3>About reCAPTCHA</h3>
-	<p>reCAPTCHA is a free, accessible CAPTCHA service that helps to digitize books while blocking spam on your blog.</p>
-	
-	<p>reCAPTCHA asks commenters to retype two words scanned from a book to prove that they are a human. This verifies that they are not a spambot while also correcting the automatic scans of old books. So you get less spam, and the world gets accurately digitized books. Everybody wins! For details, visit the <a href="http://recaptcha.net/">reCAPTCHA website</a>.</p>
-   <p><strong>NOTE</strong>: If you are using some form of Cache plugin you will probably need to flush/clear your cache for changes to take effect.</p>
-   
-	<form name="form1" method="post" action="<?php echo $_SERVER['REDIRECT_SCRIPT_URI'] . '?page=' . plugin_basename(__FILE__); ?>&updated=true">
-		<div class="submit">
-			<input type="submit" name="submit" value="<?php _e('Update Options') ?> &raquo;" />
-		</div>
-	
-	<!-- ****************** Operands ****************** -->
-   <table class="form-table">
-   <tr valign="top">
-		<th scope="row">reCAPTCHA Keys</th>
-		<td>
-			reCAPTCHA requires an API key, consisting of a "public" and a "private" key. You can sign up for a <a href="<?php echo recaptcha_get_signup_url (recaptcha_wp_blog_domain (), 'wordpress');?>" target="0">free reCAPTCHA key</a>.
-			<br />
-			<p class="re-keys">
-				<!-- reCAPTCHA public key -->
-				<label class="which-key" for="recaptcha_opt_pubkey">Public Key:</label>
-				<input name="recaptcha_opt_pubkey" id="recaptcha_opt_pubkey" size="40" value="<?php  echo $optionarray_def['pubkey']; ?>" />
-				<br />
-				<!-- reCAPTCHA private key -->
-				<label class="which-key" for="recaptcha_opt_privkey">Private Key:</label>
-				<input name="recaptcha_opt_privkey" id="recaptcha_opt_privkey" size="40" value="<?php  echo $optionarray_def['privkey']; ?>" />
-			</p>
-	    </td>
-    </tr>
-  	<tr valign="top">
-		<th scope="row">Comment Options</th>
-		<td>
-			<!-- Show reCAPTCHA on the comment post -->
-			<big><input type="checkbox" name="re_comments" id="re_comments" value="1" <?php if($optionarray_def['re_comments'] == true){echo 'checked="checked"';} ?> /> <label for="re_comments">Enable reCAPTCHA for comments.</label></big>
-			<br />
-			<!-- Don't show reCAPTCHA to admins -->
-			<div class="theme-select">
-			<input type="checkbox" id="re_bypass" name="re_bypass" <?php if($optionarray_def['re_bypass'] == true){echo 'checked="checked"';} ?>/>
-			<label name="re_bypass" for="re_bypass">Hide reCAPTCHA for <strong>registered</strong> users who can:</label>
-			<?php recaptcha_dropdown_capabilities('re_bypasslevel', $optionarray_def['re_bypasslevel']); // <select> of capabilities ?>
-			</div>
-
-			<!-- The theme selection -->
-			<div class="theme-select">
-			<label for="re_theme">Theme:</label>
-			<select name="re_theme" id="re_theme">
-			<option value="red" <?php if($optionarray_def['re_theme'] == 'red'){echo 'selected="selected"';} ?>>Red</option>
-			<option value="white" <?php if($optionarray_def['re_theme'] == 'white'){echo 'selected="selected"';} ?>>White</option>
-			<option value="blackglass" <?php if($optionarray_def['re_theme'] == 'blackglass'){echo 'selected="selected"';} ?>>Black Glass</option>
-			<option value="clean" <?php if($optionarray_def['re_theme'] == 'clean'){echo 'selected="selected"';} ?>>Clean</option>
-			</select>
-			</div>
-			<!-- Tab Index -->
-			<label for="re_tabindex">Tab Index (<em>e.g. WP: <strong>5</strong>, WPMU: <strong>3</strong></em>):</label>
-			<input name="re_tabindex" id="re_tabindex" size="5" value="<?php  echo $optionarray_def['re_tabindex']; ?>" />
-			<br />
-			<?php global $wpmu; if ($wpmu == 1 || $wpmu == 0 || $wpmu == 3) { ?>
-		</td>
-	</tr>
-	<tr valign="top">
-		<th scope="row">Registration Options</th>
-		<td>
-			<!-- Show reCAPTCHA on the registration page -->
-			<big><input type="checkbox" name="re_registration" id="re_registration" value="1" <?php if($optionarray_def['re_registration'] == true){echo 'checked="checked"';} ?> /> <label for="re_registration">Enable reCAPTCHA on registration form.</label></big>
-			<br />
-			<!-- The theme selection -->
-			<div class="theme-select">
-				<label for="re_theme_reg">Theme:</label>
-				<select name="re_theme_reg" id="re_theme_reg">
-				<option value="red" <?php if($optionarray_def['re_theme_reg'] == 'red'){echo 'selected="selected"';} ?>>Red</option>
-				<option value="white" <?php if($optionarray_def['re_theme_reg'] == 'white'){echo 'selected="selected"';} ?>>White</option>
-				<option value="blackglass" <?php if($optionarray_def['re_theme_reg'] == 'blackglass'){echo 'selected="selected"';} ?>>Black Glass</option>
-				<option value="clean" <?php if($optionarray_def['re_theme_reg'] == 'clean'){echo 'selected="selected"';} ?>>Clean</option>
-				</select>
-			</div>
-			<?php } ?>
-		</td>
-	</tr>
-   <tr valign="top">
-      <th scope="row">Error Messages</th>
-         <td>
-            <p>The following are the messages to display when the user does not enter a CAPTCHA response or enters the incorrect CAPTCHA response.</p>
-            <!-- Error Messages -->
-            <p class="re-keys">
-               <!-- Blank -->
-      			<label class="which-key" for="error_blank">No response entered:</label>
-      			<input name="error_blank" id="error_blank" size="80" value="<?php echo $optionarray_def['error_blank']; ?>" />
-      			<br />
-      			<!-- Incorrect -->
-      			<label class="which-key" for="error_incorrect">Incorrect response entered:</label>
-      			<input name="error_incorrect" id="error_incorrect" size="80" value="<?php echo $optionarray_def['error_incorrect']; ?>" />
-      		</p>
-         </td>
-      </th>
-   </tr>
-	 <tr valign="top">
-			<th scope="row">General Settings</th>
-			<td>
-				<!-- The language selection -->
-				<div class="lang-select">
-				<label for="re_lang">Language:</label>
-				<select name="re_lang" id="re_lang">
-				<option value="en" <?php if($optionarray_def['re_lang'] == 'en'){echo 'selected="selected"';} ?>>English</option>
-				<option value="nl" <?php if($optionarray_def['re_lang'] == 'nl'){echo 'selected="selected"';} ?>>Dutch</option>
-				<option value="fr" <?php if($optionarray_def['re_lang'] == 'fr'){echo 'selected="selected"';} ?>>French</option>
-				<option value="de" <?php if($optionarray_def['re_lang'] == 'de'){echo 'selected="selected"';} ?>>German</option>
-				<option value="pt" <?php if($optionarray_def['re_lang'] == 'pt'){echo 'selected="selected"';} ?>>Portuguese</option>
-				<option value="ru" <?php if($optionarray_def['re_lang'] == 'ru'){echo 'selected="selected"';} ?>>Russian</option>
-				<option value="es" <?php if($optionarray_def['re_lang'] == 'es'){echo 'selected="selected"';} ?>>Spanish</option>
-				<option value="tr" <?php if($optionarray_def['re_lang'] == 'tr'){echo 'selected="selected"';} ?>>Turkish</option>
-				</select>
-				</label>
-		    	</div>
-		    	<!-- Whether or not to be XHTML 1.0 Strict compliant -->
-				<input type="checkbox" name="re_xhtml" id="re_xhtml" value="1" <?php if($optionarray_def['re_xhtml'] == true){echo 'checked="checked"';} ?> /> <label for="re_xhtml">Be XHTML 1.0 Strict compliant. <strong>Note</strong>: Bad for users who don't have Javascript enabled in their browser (Majority do).</label>
-				<br />
-			</td>
-		</tr>
-	</table>
-	
-	<h3>About MailHide</h3>
-	<p><a href="http://mailhide.recaptcha.net/" title="mailhide email obfuscation">MailHide</a> uses reCAPTCHA to protect email adresses displayed on your blog from being harvested for spam.</p>
-	<p>Activating MailHide will automatically hide all emails in posts and comments from spam bots. For example, support@recaptcha.net would become supp<a href="http://mailhide.recaptcha.net/d?k=01a8k2oW96qNZ4JhiFx5zDRg==&amp;c=yifPREOOvfzA0o3dbnnwP8fy91UD8RL4SspHDIKHVRE=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01a8k2oW96qNZ4JhiFx5zDRg==&amp;c=yifPREOOvfzA0o3dbnnwP8fy91UD8RL4SspHDIKHVRE=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">...</a>@recaptcha.net. There are also options below for choosing the text to show for hidden emails.</p>
-	<p>MailHide also requires a public and private key which you can generate using the <a href="http://mailhide.recaptcha.net/apikey">key generation service</a>.</p>
-	<table class="form-table">
-	<tr valign="top">
-	<th scope="row">MailHide Keys</th>
-	<td>
-		<!-- MailHide Enabler -->
-		<big>Enable MailHide email obfuscation for:</big><br />
-		   <input type="checkbox" name="use_mailhide_posts" id="use_mailhide_posts" value="1" <?php if($optionarray_def['use_mailhide_posts'] == true){echo 'checked="checked"';} ?> /><label for="use_mailhide_posts">Posts/Pages</label><br />
-		   <input type="checkbox" name="use_mailhide_comments" id="use_mailhide_comments" value="1" <?php if($optionarray_def['use_mailhide_comments'] == true){echo 'checked="checked"';} ?> /><label for="use_mailhide_comments">Comments</label><br />
-		   <input type="checkbox" name="use_mailhide_rss" id="use_mailhide_rss" value="1" <?php if($optionarray_def['use_mailhide_rss'] == true){echo 'checked="checked"';} ?> /><label for="use_mailhide_rss">RSS Feed of Posts/Pages</label><br />
-		   <input type="checkbox" name="use_mailhide_rss_comments" id="use_mailhide_rss_comments" value="1" <?php if($optionarray_def['use_mailhide_rss_comments'] == true){echo 'checked="checked"';} ?> /><label for="use_mailhide_rss_comments">RSS Feed of Comments</label><br />
-		<!-- Public Key -->
-		<p class="re-keys">
-			<label class="which-key" for="mailhide_pub">Public Key:</label>
-			<input name="mailhide_pub" id="mailhide_pub" size="40" value="<?php echo $optionarray_def['mailhide_pub']; ?>" />
-			<br />
-			<!-- Private Key -->
-			<label class="which-key" for="mailhide_priv">Private Key:</label>
-			<input name="mailhide_priv" id="mailhide_priv" size="40" value="<?php echo $optionarray_def['mailhide_priv']; ?>" />
-		</p>
-   </td>
-   </tr>
-   <tr valign="top">
-   <th scope="row">Visibility Options</th>
-   <td>
-		<!-- Don't show mailhide to users who can... -->
-		<div class="theme-select">
-			<input type="checkbox" id="mh_bypass" name="mh_bypass" <?php if($optionarray_def['mh_bypass'] == true){echo 'checked="checked"';} ?>/>
-			<label for="mh_bypass">Show full email adresses to <strong>registered</strong> users who can:</label>
-			<?php recaptcha_dropdown_capabilities('mh_bypasslevel', $optionarray_def['mh_bypasslevel']); // <select> of capabilities ?>
-		</div>
-      <!-- Email Replacement Text -->
-      <p class="re-keys">
-         <p>The following allows you to show the replaced links differently. Usually, you get something like this, supp<a href="http://mailhide.recaptcha.net/d?k=01a8k2oW96qNZ4JhiFx5zDRg==&amp;c=yifPREOOvfzA0o3dbnnwP8fy91UD8RL4SspHDIKHVRE=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01a8k2oW96qNZ4JhiFx5zDRg==&amp;c=yifPREOOvfzA0o3dbnnwP8fy91UD8RL4SspHDIKHVRE=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">...</a>@recaptcha.net , where the email is broken up into two pieces and then a link with dots is placed in the middle. The <strong>Email Replacement Text</strong> value lets you choose what to name the link and then the <strong>Reveal Link Title</strong> value determines the text that is shown when the link is hovered over.</p>
-         <p>For example, if the <strong>Email Replacement Text</strong> option is set to <strong>HIDDEN EMAIL</strong> and the <strong>Reveal Link Title</strong> option is set to <strong>Click here to reveal this address</strong>, then ALL emails will be hidden like this: <a href="http://mailhide.recaptcha.net/d?k=01a8k2oW96qNZ4JhiFx5zDRg==&amp;c=yifPREOOvfzA0o3dbnnwP8fy91UD8RL4SspHDIKHVRE=" onclick="window.open('http://mailhide.recaptcha.net/d?k=01a8k2oW96qNZ4JhiFx5zDRg==&amp;c=yifPREOOvfzA0o3dbnnwP8fy91UD8RL4SspHDIKHVRE=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;" title="Click here to reveal this address">HIDDEN EMAIL</a></p>
-         <p>If you want to maintain the default method of hiding emails then leave both boxes blank.</p>
-         <label class="whch-key" for="mh_replace_link">EMail Replacement Text:</label>
-         <input name="mh_replace_link" id="mh_replace_link" size="40" value="<?php echo $optionarray_def['mh_replace_link']; ?>" />
-         <br />
-         <label class="which-key" for="mh_replace_title">Reveal Link Title:</label>
-         <input name="mh_replace_title" id="mh_replace_title" size="40" value="<?php echo $optionarray_def['mh_replace_title']; ?>" />
-      </p>
-   </td>
-   </tr>
-   <tr valign="top">
-   <th scope="row">Other Information</th>
-   <td>
-		<!-- MailHide CSS -->
-		<p>CSS: You can style the hidden emails and much more in the <strong>recaptcha.css</strong> stylesheet in wp-recaptcha's plugin folder.</p>
-		<p>You can bypass email hiding for an address by enclosing it within <strong>[nohide][/nohide]</strong>, ex. [nohide]some@email.com[/nohide].</p>
-	</td>
-	</tr>
-	</table>
-	<div class="submit">
-		<input type="submit" name="submit" value="<?php _e('Update Options') ?> &raquo;" />
-	</div>
-
-	</form>
-   <p class="copyright">&copy; Copyright 2008&nbsp;&nbsp;<a href="http://recaptcha.net">reCAPTCHA</a></p>
-</div> <!-- [wrap] -->
-<!-- ############################## END: ADMIN OPTIONS ##################### -->
-
-<?php
-}
-
-/* =============================================================================
-   Apply the admin menu
-============================================================================= */
-
-add_action('admin_menu', 'recaptcha_wp_add_options_to_admin');
-
-// If no reCAPTCHA API keys have been entered
-if ( !($recaptcha_opt ['pubkey'] && $recaptcha_opt['privkey'] ) && !isset($_POST['submit']) ) {
-   function recaptcha_warning() {
-		global $wpmu;
-		
-		$path = plugin_basename(__FILE__);
-		$top = 0;
-		if ($wp_version <= 2.5)
-		$top = 12.7;
-		else
-		$top = 7;
-		echo "
-		<div id='recaptcha-warning' class='updated fade-ff0000'><p><strong>reCAPTCHA is not active</strong> You must <a href='options-general.php?page=" . $path . "'>enter your reCAPTCHA API key</a> for it to work</p></div>
-		<style type='text/css'>
-		#adminmenu { margin-bottom: 5em; }
-		#recaptcha-warning { position: absolute; top: {$top}em; }
-		</style>
-		";
-   }
-   
-   if (($wpmu == 1 && is_site_admin()) || $wpmu != 1)
-		add_action('admin_footer', 'recaptcha_warning');
-   
-   return;
-}
-
-$mailhide_enabled = ($recaptcha_opt['use_mailhide_posts'] || $recaptcha_opt['use_mailhide_comments'] || $recaptcha_opt['use_mailhide_rss'] || $recaptcha_opt['use_mailhide_rss_comments']);
-
-// If the mcrypt PHP module isn't loaded then display an alert
-if (($mailhide_enabled && !extension_loaded('mcrypt')) && !isset($_POST['submit'])) {
-   function mcrypt_warning() {
-		global $wpmu;
-		
-		$path = plugin_basename(__FILE__);
-		$top = 0;
-		if ($wp_version <= 2.5)
-		$top = 12.7;
-		else
-		$top = 7;
-		echo "
-		<div id='recaptcha-warning' class='updated fade-ff0000'><p><strong>MailHide is not active</strong> You must have the <a href='http://us3.php.net/mcrypt'>mcrypt</a> module loaded for it to work</p></div>
-		<style type='text/css'>
-		#adminmenu { margin-bottom: 5em; }
-		#recaptcha-warning { position: absolute; top: {$top}em; }
-		</style>
-		";
-   }
-   
-   if (($wpmu == 1 && is_site_admin()) || $wpmu != 1)
-		add_action('admin_footer', 'mcrypt_warning');
-   
-   return;
-}
-
-// If MailHide is enabled but no keys have been entered
-if ($mailhide_enabled && !($recaptcha_opt['mailhide_pub'] && $recaptcha_opt['mailhide_pub']) && !isset($_POST['submit'])) {
-	function mailhide_warning() {
-		global $wpmu;
-		
-		$path = plugin_basename(__FILE__);
-		$top = 0;
-      
-		if ($wp_version <= 2.5)
-         $top = 12.7;
-		else
-         $top = 7;
-         
-		echo "
-		<div id='recaptcha-warning' class='updated fade-ff0000'><p><strong>MailHide is not active</strong> You must <a href='options-general.php?page=" . $path . "'>enter your MailHide API keys</a> for it to work</p></div>
-		<style type='text/css'>
-		#adminmenu { margin-bottom: 5em; }
-		#recaptcha-warning { position: absolute; top: {$top}em; }
-		</style>
-		";
-	}
-      
-   if (($wpmu == 1 && is_site_admin()) || $wpmu != 1)
-		add_action('admin_footer', 'mailhide_warning');
-   
-	return;
-}
-
-/* =============================================================================
-   End Apply the admin menu
-============================================================================= */
 ?>
\ No newline at end of file